quinta-feira, 20 de novembro de 2014

Atualizando

Olá pessoal!

Gostaria de agradecer todos que estão comprando procutos em nossa loja e nos enviando projetos para serem desenvolvidos com toda qualidade e honestidade Microembarcado.

Os últimos meses foram de muito trabalho, o por isso da falta de atualizações no Blog.

Porem! Estamos preparando uma serie de posts com os assuntos mais comentados aqui.

Abraços.


Vinicius R.

microembarcado@gmail.com

sexta-feira, 4 de julho de 2014

Acessibilidade Portão eletrônico interface Audio/Visual III

Continuando com a segunda etapa do projeto, passamos para o controle da solenoide que aciona a tranca da porta. Esse controle foi fácil de se trabalhar, simulamos o apertar do botão com níveis Alto(+5V) e baixo (GND), assim conseguimos abrir o portão remotamente.

Para controlarmos remotamente a fechadura elétrica do portão, vamos utilizar um Modulo GSM. O modulo GSM SIM900 opera com redes celulares moveis GSM/GPRS, capaz de efetuar todas as funções de um aparelho convencional devido ao fato de possuir um microcontrolador interno que traduz os comandos enviados em formas de ações a serem tomadas. Estes comandos são chamados de AT, existem documentações onde podemos encontrar todos comandos e seus parâmetros para funcionamento. O envio de comandos AT deve ser feito por meio de uma porta serial, assim como a resposta dos comandos. Para isso vamos utilizar a porta serial do microcontrolador para fazer essa interface e comunicar com o modulo.

             

Em nosso projeto vamos utilizar os comandos para fazer uma chamada para outro número celular, assim como monitorar constantemente as SMS que chegam no modulo, para tomar as devidas ações. No trecho de código abaixo, podemos visualizar o comando que mostra todas SMS que o modulo recebeu, se a SMS recebida for “Tranca”, isso implica em chamar a função que aciona o botão apara abrir o portão.

                                       

Dessa forma o usuário pode abrir o portão de sua casa a distância, apenas com o envio de uma SMS. Muito útil para casos de urgência. Para completar a segunda etapa do projeto, vamos fazer o controle do botão do gancho do fone físico do interfone. Isso deve ser feito, pois com mesmo modulo utilizado anteriormente para fazer a leitura de SMS. Agora vamos fazer uma ligação para o usuário caso ele não atenda uma chamada no interfone. A partir do momento que alguém pressiona o botão de chamada no interfone, a nossa pulseira passa a vibrar alertando o usuário que alguém está na porta. Caso não seja respondido, temos a opção de fazer uma ligação para o usuário, assim ele consegue conversar do seu telefone celular com quem está na porta. Para isso acontecer temos que simular o botão do gancho, assim enviamos nível alto para o circuito do interfone interpretar que o usuário fisicamente tirou o fone e libera a comunicação sonora, só que ao invés do sinal vim do fone físico, ele vira do Modulo GSM.


                                       

Lista de matérias:

Para o módulo conectado ao interfone foram utilizados os seguintes componentes:
1x Módulo GSM SIM900
1x Arduino UNO
3x Fotoacoplador 4N25
1x Módulo transmissor 433MHz

Já o módulo que fica na pulseira utilizou os seguintes componentes:
1x Microcontrolador Atmega328-PU
1x Cristal 16Mhz 1x Módulo receptor 433Mhz
1x Motor VIbracall 1x Bateria 3,3V

É isso ai pessoal!

Próximo post é o final, com todos arquivos em anexo e vídeo do funcionamento de todo projeto :D




quarta-feira, 2 de julho de 2014

Acessibilidade Portão eletrônico interface Audio/Visual II

Para comunicação entre o microcontrolador principal que está conectado ao interfone com o segundo microcontrolador que está conectado a pulseira dos usuários decidimos utilizar módulos de rádio frequência 433MHz. Estes módulos são encontrados facilmente no mercado devido sua larga utilização, principalmente para acionamento de alarmes residenciais. As características principais do transmissor são as seguintes: alcance de 20-200 metros conforme a tensão de alimentação, relevo e antena. Trabalha com tensão de operação entre 3,5V e 12V. Modo de operação AM (Modulação em Amplitude). Taxa de transferência de 4KB/s. Potência de transmissão 10mW. Para o receptor, temos: tensão de operação de 5V e corrente 4mA com sensibilidade de -105dB.

Modulo TX, já mostrado aqui no blog:

Modulo RX:


Par transmissor:



Voltando ao acionamento do botão de chamada do interfone, trecho em que enviamos as informações para o segundo microcontrolador:


Com essa função enviamos via RF para o segundo microcontrolador a mensagem “Vibrar”, caso o microcontrolador da pulseira ler essa mensagem, aciona o motor para vibrar a pulseira. Abaixo temos o circuito presente na pulseira:





O programa que roda no microcontrolador da pulseira é bem simples. Ele apenas fica verificando em tempo real o recebimento da palavra “Vibrar”. Caso ele receba essa mensagem via rádio frequência, ele aciona o motor que faz a pulseira vibrar.  Logo, o código utilizado no microcontrolador:


Bom, é isso ai. No próximo post vamos tratar da ligação com modulo SIM900. Lembrando que no final dos posts desse projeto teremos um apanhado geral com todos arquivos utilizados etc.



domingo, 29 de junho de 2014

Acessibilidade Portão eletrônico interface Audio/Visual



Para iniciarmos o projeto, compramos um interfone analógico convencional, desses que se encontra facilmente em qualquer loja de elétrica. Escolhemos esse modelo por ser barato, fácil de encontrar, o mais comum nas residências, além disso, os circuitos são mais simples para fazer as previstas modificações. Com o interfone em mãos, fizemos a instalação normal seguindo o manual. Tudo funcionou perfeitamente. A partir disso iniciamos a primeira etapa do projeto, que era identificar em que pontos do circuito original teríamos que atuar para fazer um controle avançado. Ficou definido que teríamos três pontos de controle, o estado do botão de chamada do interfone, o controle para acionar a solenoide da tranca que abria a porta e além disso, o controle do estado do gancho do fone.


  • O estado do botão de chama: esse controle é importando pois podemos identificar por meio de um microcontrolador se temos uma chamada, a partir disso podemos processar os dados e tomar as devidas ações, como por exemplo enviar o sinal via rádio frequência para acionar o microcontrolador da pulseira. 
  • O controle da solenoide: simulamos o pressionar de um botão para enviar o sinal para abrir o portão. Com isso podemos simular o apertar por meio de um microcontrolador e abrir o portão a distância, ou melhor, em casos de emergência.
  • Controle do gancho: teríamos que controlar esse botão, pois existe a possibilidade do usuário conversar através do seu celular com quem está no interfone, para isso acontecer temos que simular o fone original fora do gancho.

Ficou definido, que em todas as entradas/saídas de nosso microcontrolador que comunicam com o circuito do interfone utilizariam fotoacopladores. Dessa forma isolaríamos os dois circuitos eletricamente, mantendo uma comunicação e controle entre ambos. O isolamento é garantido porque não há contato elétrico, somente um sinal luminoso. O seu funcionamento é simples: há um emissor de luz (geralmente um LED) e um receptor (fototransistor). Quando o LED está aceso, o fototransistor responde entrando em condução.Com o LED apagado o fototransistor entra em corte. Sabendo que podemos alterar a luminosidade do LED, obtemos assim diferentes níveis na saída. Em nosso circuito de ligação entre o microcontrolador a o circuito do interfone estamos utilizando fotoacopladores 4N25, abaixo está o esquemático do circuito:





 Com as ligações feitas, agora podemos controlar por meio do microcontrolador nosso interfone. Assim movemos para o próximo passo. A segunda etapa do projeto consiste além de controlar as funções do interfone pelo microcontrolador, agora temos que processar esses dados e tomar as diferentes ações. Vamos começar com o botão de chamada. O botão de chamada do interfone é monitorando constantemente, para fazer isso sem ocupar nosso microcontrolador, estamos utilizando a função de interrupção. As interrupções são muito utilizadas no mundo dos microcontroladores e dos microprocessadores. Um exemplo típico são nossos microcomputadores PC. Sempre que pressionamos uma tecla, uma interrupção é gerada para o microprocessador, solicitando o tratamento desta. Assim, o PC não é obrigado a varrer constantemente o teclado em busca de uma tecla. A principal vantagem está na otimização do código (programa). Com o uso correto das interrupções é possível executar “algumas” tarefas quase que ao mesmo tempo. É possível, por exemplo, aguardar uma tecla e um dado do canal de comunicação, sem a necessidade de realizar uma varredura em ambos. Se isso não fosse feito, correríamos o risco de perder uma das “entradas”. Ao estar tratando a tecla, o dado poderia estar disponível no canal de comunicação, mas como nenhuma varredura foi realizada naquele momento, o byte estaria perdido.

Sendo assim, configuramos nosso pino de interrupção do microcontrolador com o seguinte trecho da programação:

attachInterrupt(0, b_interfone, FALLING); 

Isso faz com que sempre que haja um sinal na porta, e que ele esteja mudando de Alto(+5V) para Baixo(GND), dispare nossa função de interrupção. Aleguem pressionou o botão de chamada no interfone. Assim que detectada a interrupção, em um outro trecho do programa sinalizamos um flag como verdadeiro, para enfim ser tratado no loop de execução normal do microcontrolador: Com o flag ativo, entramos na função que trata esses dados, enviando para tela do computador a mensagem de chamada no interfone, e chamando uma outra função que aciona nosso transmissor de rádio frequência:


Com o flag ativo, entramos na função que trata esses dados, enviando para tela do computador a mensagem de chamada no interfone, e chamando uma outra função que aciona nosso transmissor de rádio frequência:




É isso ai! até o próximo post destrinchando a conexão RF e muito mais.

terça-feira, 1 de abril de 2014

Atualizando

Fala pessoal!


O Blog ficou parado por algum tempo, estive ocupado com alguns projetos. O bom é que logo mais vamos ter alguns posts bacanas sobre C#, continuação do projeto seguidor solar, novo projeto interfone para cego ou surdo/mudo(novidade!) e varias outras aplicações.

Obrigado a todos que acessam o blog e acompanham os projetos. Qualquer duvida, sempre a disposição.


Abraço.

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: