collapse collapse

* Links de Robótica

* Posts Recentes

Identificar 2 componentes por almamater
[Ontem às 19:09]


+ LASERs por dropes
[16 de Julho de 2025, 12:38]


Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]

* LusoRobótica - Robótica em Portugal

A robótica é uma das ciências mais desafiantes. A perfeita fusão harmoniosa entre um sem fim número de ciências faz da robótica um excelente desafio, que nos convida a imergir neste grandioso mundo da tecnologia, e utilizar a construção de robots como uma forma única de explorar todas as ideias que nos surgem no dia-a-dia.

Junta-te a nós e aprende como a robótica pode mudar a maneira como observas o mundo. Ajuda-nos a desmistificar a robótica em Portugal!
15 de Março de 2009, 21:03 por TigPT | Visualizações: 16528 | Comentários: 4

A inmotion.pt vair organizar uma série de workshops dos quais queria destacar os de Arduino dia 28 e 29 de Março dado pelo Filipe, assim como os de dia 4 e 5 de Abril dados pelo nosso colega Guibot. O LusoRobótica tem todo o prazer de apoiar esta iniciativa e convidar todos os membros e visitantes interessados no evento a passarem pelo site dos workshop para saberem mais, ficam então com o cartaz:


Site oficial:
www.inmotion.pt/workshops/
15 de Março de 2009, 01:04 por metRo_ | Visualizações: 18143 | Comentários: 17

Olá,
Venho aqui apresentar um exemplo de menu criado num LCD Nokia 3310 com o arduino.
Uso um potenciómetro para navegar no menu e um botão para seleccionar.

Ainda estou a comentar e organizar o código para ficar perceptível a todos :)
Depois posso também postar as ligações embora já estejam indicadas aqui: http://lusorobotica.com/index.php/topic,431.0.html

Aqui o que ando a fazer:

Fiz um esquema no Fritzing, foi a primeira vez que o testei mas não fiquei muito convencido parece-me que há coisas básicas que já deviam estar implementadas...


Eu não indiquei na imagem mas parece óbvio onde se liga o LCD :)

Agora acrescento o código, todas as linhas estão comentadas e de uma maneira que me parece perceptível a todos.
Aqui fica um excerto, o resto está em anexo!
Código: [Seleccione]
//Criação das variaveis a usar.
byte pontos[8]={0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00};                 //Este vector é o simbolo que coloco antes dos nomes, é aquela bolinha.
int ledsPinos[6]={8,9,10,11,12,13};                                       //Pinos onde estão os Leds
boolean ledsEstado[6]={false,false,false,false,false,false};              //Estado de cada Led! false para desligado, true para ligado!
char ledsNomes[6][6]={"Led 1","Led 2","Led 3","Led 4","Led 5","Led 6"};   //O nome dos leds que aparece no menu!
int pot=0;                                                                //pino do potenciometro
int botao=2;                                                              //pino do botao
int i=0;                                                                  //variavel auxiliar que vai servir para alocar a linha

void loop(){
  cursorxy(0,0);                               //Posiciona o cursor no inicio do LCD.
  pot=analogRead(0);                           // Le o valor do potenciometro na entrada 0;
  i=map(pot,0,950,0,5);                        //Mapeia o valor lido de 0 a 1023 num valor de 0 a 5 que é o numero de linhas. - Coloquei 950 em vez de 1023 porque quando carregava no botão havia um queda de tensão suficiente para passar o valor de 5 para 4.
 
  //Ligar o LED selecionado!
  if(digitalRead(2)==1){                       //Se o botão estiver pressionado...
    ledsEstado[i]=!ledsEstado[i];              //Altera-se o estado do led correspondente a linha selecionada com o potenciometro, isto é, se está "false"(falso) passa a "true"(verdade) e vice-versa...
    digitalWrite(ledsPinos[i],ledsEstado[i]);  //Escreve-se no led o seu estado, "false"(falso) ou "true"(verdade), desligado ou ligado!
    delay(250);                                //Evitar que durante o tempo em que se está a carregar no butão o código faço um ciclo, o que desligaria de novo o led!
  }
 
  //Escrever no LCD
  for(int k=0;k<6;k++){                        //Vamos correr as 6 linhas - de 0 a 5
    cursorxy(0,k);                             //Colocamos o cursor na posição 0 em x e na linha k
    for(int j=0;j<8;j++){                      //Vamos colocar o simbolo na linha.
      if(k==i){                                //Se a linha que em que estámos a colocar o simbolo for a mesma onde está o potenciometro vamos inverter a cor. Para isso
        writedata(pontos[j]^0xff);             //fazemos um XOR, isto é onde estava um pixel a 1 passa a 0 e onde estava a 0 passa a 1.
      }
      else{
        writedata(pontos[j]);                  //Os outros são os simbolos normais.
      }
    }
    putstr(" ");                               //Colocamos um espaço.
    if(ledsEstado[k]){                         //Se o estado do led da linha k estiver a true vamos colocar o nome com as cores inversas
      putstrInv(ledsNomes[k]);                 //para isso acrescentei a função putstrInv que coloca uma string mas com as cores inversas.
    }else{
      putstr(ledsNomes[k]);                    //caso contrário coloca o nome normalmente.
    }
  }
  delay(10);
}


Abraços :)
13 de Março de 2009, 01:06 por tr3s | Visualizações: 192091 | Comentários: 106

  Hello hello rapaziada :D!

  Pois é, estou de volta com mais um tutorial onde vos vou explicar como usar ou fazer interagir um RTC, mais propriamente o DS1307 da Maxim-Dallas com o Arduino! Agora já podem adicionar um relógio e dar horas no vosso projecto!


  Antes de mais o que é um RTC ou Real Time Clock? Um RTC é um dispositivo que dá horas, é verdade, conta o tempo! Todos nós os temos em casa, quer seja nos relógios digitais, na motherboard dos nossos computadores, nos telemoveis, etc..
  O RTC que vou introduzir hoje é, como já disse, o DS1307. Este RTC comunica por i2c e tem bastantes características interessantes:

  • Interface i2c;
  • Conta segundos, minutos, horas, dias de semana, dias do mes, mes, ano e considera anos bissextos;
  • Tem uma RAM de 56 bytes com capacidade para escritas infinitas;
  • Gera sinais quadrados programaveis;
  • Comuta automaticamente para a bateria se detectar falha de energia;
  • Consome menos de 500 nA (nano Amperes).

  A questão da alimentação da bateria é interessante, de certeza que todos sabem que nas motherboards dos nossos computadores temos la uma pilha, e "ah pois é" essa pilha é a que alimenta o RTC do nosso computador! Este integrado pode ser alimentado por uma fonte de energia normal como qualquer outro  integrado mas pode ainda estar a ser alimentado por uma bateria, normalmente uma pilha de 3V como as que os nossos computadores têm na motherboard (CR2032 por exemplo)! Este integrado se detectar que a fonte de alimentação não está presente comuta automaticamente para a bateria e passa a funcionar com a energia da bateria. Com uma destas pilhas totalmente carregada, o integrado matém-se a contar o tempo durante pelo menos 9 anos, "cool" não é? Ah, mas atenção, a bateria é obrigatória!

  O funcionamento do RTC, muito sucitamente, é o seguinte:

  • Ligar;
  • Alimentar com bateria;
  • Definir data de arranque;
  • Iniciar;
  • Ler data!

  Eehe até parece simples... E é! Claro que se começarmos a ler o Datasheet do DS1307 até nos assustamos com tanta informação e realmente interpretar aquilo é chato e massador! Por um lado é bom pois qualquer dúvida ou informação que queiramos saber está lá explicada, por outro lado é chato pois podiam fazer um guia mais simples do funcionamento do integrado em vez de colocarem a informação toda no mesmo documento.

  Entrando em mais promenores mas sem aprofundar muito (Ai não, queriam a papinha toda não era?! Seus malandros) como este dispositivo tem interface I²C não nos podemos esquecer das resistências de Pull-Up do canal! Se ainda não tiverem nenhum dispositivo i²c na vossa breadboard tem de colocar duas resistências na vossa montagem, caso contrário já têm as resistências colocadas (se não nem sei como funciona o vosso dispositivo) e então é so encaixarem lá o vosso novo integrado, o RTC!
  Para o cristal... pois é, é aqui que a "porca torce o rabo", o cristal que se usa com este RTC e com todos os outros RTC's (sim na motherboard está lá um mas nem pensem em tirá-lo para o bem da vossa "mobo"!) é um cristal com a frequência de 32.768KHz. É dificil de encontrar à venda nas lojas, pelo menos aqui em Lisboa, mas online encontra-se bastante facilmente e em casa também.... "O QUÊ EM CASA?" Ah pois é "bébés" em encontrei o meu num brinde do chinês, daqueles que fazem o que é suposto, não funcionar, mas que supostamente davam horas! Sim abri aquilo e tirei de lá o belo cristal de 32.768KHz ehehe mas também o podem encontrar em relógios digitais, alarmes etc., la dentro há sempre um destes cristais!


  Assim, com a introdução feita, vamos ver como são as ligações:


  Mais uma vez, A bateria é obrigatória e portanto o RTC não funciona sem a ter ligada! Eu aproveito o pino de 3V do Arduino!

  Em anexo deixo um código que vai enviar a data "actual"  por Serial, o código está bastante comentado e se seguirem os comentário fica fácil de entender. Vai também um ficheiro "ds1307.pde" com as rotinas que fiz para comunicar com o RTC. Basiei-me em código que vi em sites da internet mas que alterei de forma a respeitar o Datasheet do DS1307 e que também optimizei. Creio que é bastante fácil de entender e se tiverem dúvidas do porquê "disto e daquilo", se não estiver em comentário deixo-vos o desafio de irem consultar o datasheet :D!

  Tenham atenção à função "ds1307setup();", esta função só é necessária na primeira vez que ligam o RTC, se o alimentarem com uma pilha de 3v ou bateria nunca mais precisam desta função! Isto porque a função o que faz é preparar o RTC, definir a data de arranque e mandar o RTC contar o tempo, uma vez que ele nunca mais vai perder energia (pois tem uma bateria ligada) nunca vai parar de contar. Se por acaso lhe tirarem a alimentação, precisam de executar a função da próxima vez que o ligarem.

  Agora para o fim digo-vos que a Sparkfun vende um KIT com este RTC já com as resistências de i2c, com o cristal e pilha de 3V, tudo bonitinho sendo so preciso ligar dois fios de alimentação e os dois fios para comunicar:
  É claro que comprar isto, além de ser caro, não mete piada nenhuma porque já vem tudo feito! Mas para quem não gosta de se divertir a ligar coisas e tem dinheiro para gastar...

  Eu mandeir vir samples deste RTC do site da Maxim e aqui está o link de Samples de DS1307. Mandem vir o DS1307+, este é PDIP 8, ou seja tem 8 pinos e dá para encaixar na breadboard. O '+' significa que é RoHS Lead Free e daí dar para vir para a Europa (Se não for RoHs não podem enviar para cá, regras da U.E. e acho bem)!

 Bom... código em anexo leiam com atenção e ainda se podem rir :D

Exemplo de output do programa:
Citar
   Sao:    23:15:15   Quinta-feira dia 12 de Marco de 2009
   Sao:    23:15:16   Quinta-feira dia 12 de Marco de 2009
   Sao:    23:15:17   Quinta-feira dia 12 de Marco de 2009
Cumprimentos! ;)

Contribuição do metRo_ RTC + PCD8544
Páginas: 1 ... 136 137 [138] 139 140 ... 187

* Quem está online

  • Ponto Visitantes: 478
  • Ponto Spiders: 0
  • Ponto Escondidos: 0
  • Ponto Membros: 0

Não há utilizadores ligados.

* Estatística LusoRobótica

  • stats Total de Membros: 4.072
  • stats Total de Mensagens: 106.832
  • stats Total de Tópicos: 9.101
  • stats Total de Categorias: 8
  • stats Total de Quadros: 71
  • stats Recorde utilizadores online: 1.666