quarta-feira, 29 de janeiro de 2014

Loja aberta!

Fala pessoal!

A loja virtual do Blog esta aberta. Todos produtos que falamos sobre aqui estão lá, com um preço muito bom e envio em 24h :-)

http://www.microembarcado.com.br/


Em breve novidades...


quarta-feira, 22 de janeiro de 2014

Seguidor Solar Arduino - II

Olá!

Vamos dar continuidade ao projeto. Agradeço a todos que de uma forma estão contribuindo com conhecimento para evolução do projeto.

Hoje vamos falar sobre o algorítimo introduzido na programação para distinguir de onde temos mais incidência de raios solares, e de que forma tratamos esses dados para controlar os dois servo motores.

O código para o Arduino está todo comentado, mas basicamente o quele faz é o seguinte, define em quais pinos estão conectados os LDRs e servo motores, estes tem valor inicial de posição 90° e 135°. No loop, fazemos a leitura dos sensores e armazenamos em variáveis, que são tratadas logo em seguida. Avaliamos em conjunto os sensores Acima/Abaixo e Direita/Esquerda, verificamos em qual sensor temos mais incidência com um limiar 2 para evitar movimentos inesperados.


  1. #include <Servo.h>// Inclui biblioteca de servos
  2.  
  3. Servo servoRotacao;// Cria variaveis para controlar servos
  4. Servo servoPasso;// Cria variaveis para controlar servos
  5.  
  6. int ldrEsquerda = A2;// Ldr da esquerda pino 2
  7. int ldrDireita  = A3;// Ldr da direita pino 3
  8. int ldrCima     = A0;// Ldr de cima pino 4
  9. int ldrBaixo    = A1;// Ldr de baixo pino 5
  10.  
  11. int valRotacao  = 90;// Posicao inicial dos servos
  12. int valPasso    = 135;// Posicao inicial dos servos
  13.  
  14. int valEsquerda;// Variaveis para pegar valor analogico dos pinos
  15. int valDireita;                                                      
  16. int valCima;                                                      
  17. int valBaixo;                                                        
  18.  
  19. int delayMovimento= 100;// Tempo de delay dos servos
  20.  
  21. void setup()
  22. {
  23.   servoRotacao.attach(10);// Atribui ao pino 6 o servo rotacao
  24.   servoPasso.attach(9);// Atribui ao pino 9 o servo passo
  25. }
  26.  
  27. void loop()
  28. {
  29.   valEsquerda = analogRead(ldrEsquerda);// Faz leitura analogica do ldr esquerdo de acordo com a incidencia de luz
  30.   valDireita  = analogRead(ldrDireita);                          
  31.   valCima     = analogRead(ldrCima);                                
  32.   valBaixo    = analogRead(ldrBaixo);                                
  33.  
  34.   if (valEsquerda - valDireita > 2 || valEsquerda - valDireita < -2)  
  35.   // Comparando os LDR's da esquerda e direita com threshold de "2" para evitar tremer os servos (jitter)
  36.   {
  37.     if (valEsquerda > valDireita && valRotacao > 0)                  
  38.         // Luz vindo da direita, prepara para virar servo para direita (valor de travamento menor que 0)
  39.     {
  40.       valRotacao--;                                                  
  41.           // Decrementa variavel
  42.     }  
  43.     if (valDireita > valEsquerda && valRotacao < 180)                
  44.         // Luz vindo da esquerda, prepara para virar servo para esquerda (valor de travamento maior que 180)
  45.     {
  46.       valRotacao++;                                                  
  47.           // Incrementa variavel
  48.     }
  49.   }
  50.  
  51.   if (valCima - valBaixo > 2 || valCima - valBaixo < -2)              
  52.   // Comparando LDR's de Cima e Baixo com threshold de "2" para evitar tremer os servos (jitter)
  53.   {
  54.     if (valCima > valBaixo && valPasso > 90)                          
  55.         // Luz vindo de Cima, prepara servo para virar para cima (valor de travamento menor que 90)
  56.     {
  57.       valPasso--;                                                    
  58.           // Decrementa variavel
  59.     }
  60.     if (valBaixo > valCima && valPasso < 180)                        
  61.         // Luz vindo de Baixo, prepara servo para ir para baixo (valor de travamento maior que 180)
  62.     {
  63.       valPasso++;                                                    
  64.           // Incrementa variavel
  65.     }  
  66.   }
  67.    /*
  68.    dica: o servo de passo so precisa de um alcance de 90 graus em caso de luz vindo
  69.    horizontalmente para o chao(nascer do sol)
  70.    ou verticalmente (sol do meio dia)
  71.    */
  72.   servoRotacao.write(valRotacao);// Coloca a posicao do servo de acordo com valor calculado
  73.   servoPasso.write(valPasso);// Coloca a posicao do servo de acordo com valor calculado
  74.  
  75.   delay(delayMovimento);// Espera o servo se mover até a posicao
  76. }

Conjunto acoplado a placa do Arduino:




Verificando funcionamento do algorítimo usando luz artificial:




É isso ai, em breve novas atualizações no projeto!


quarta-feira, 15 de janeiro de 2014

Seguidor Solar Arduino - I

Fala pessoal!


Algum tempo sem postar, mas estava fazendo alguns preparativos. Agora voltamos com tudo.

Hoje vou apresentar a ideia de um projeto que sempre pensei em desenvolver, na maioria dos casos esbarrava na falta de componentes, agora temos algumas coisas que podem dar o ponta pé inicial.

A ideia é simples, acoplar a um suporte 4 sensores LDR (resistor que varia de acordo com quantidade de luz) um painel solar (potencia a ser discutida). Esse suporte é controlado por 2 servo motores podendo girar em todas direções. Para facilitar a visualização do que estou tentando explicar aqui estão as imagens dos componentes (já foram avaliados pelo blog):

Painel Solar 5V/130mA:



O painel ficaria fixado na base do Pan&Tilt, assim como os LDRs. O código faria a leitura em tempo real dos 4 sensores, com esses valores vai ser possível estipular em qual posição estamos recebendo mais intensidade de luz solar, assim damos o comando nos 2 motores de passo para modificar a posição atual para a nova posição onde vamos receber mais radiação solar e consequentemente aumentar a tensão no painel solar.

Com essas ideia podemos nos fazer as seguintes perguntas:

  • O sistema consegue se auto-alimentar?
  • É possível utilizar uma bateria para ser carregada e aumentar autonomia?
  • Com essa corrente máxima de 130mA o painel consegue alimentar ambos motores e a placa do Arduino?
Bom, ja estou trabalhando no código, a parte de controlar a posição dos motores de acordo com a intensidade de luz esta pronta. Vou deixar algumas fotos e um pequeno vídeo.

Tensão no painel solar (consegui atingir um máximo de 6V)


Painel solar alimentando placa do Arduino UNO e 1 servo motor:


Vídeo comprovando a funcionamento:





Aceito dicas sobre o projeto!
Em breve nova atualização.

Adicionando o básico do circuito: