Fala galera, tudo beleza?
No post de hoje iremos apresentar um projeto de uma régua eletrônica utilizando um sensor ultrassônico. Nossa régua irá medir a distância entre nosso sensor e o objeto alvo.
Este sensor será controlado por um Arduino UNO e as medidas serão exibidas em um Display OLED de 0,96″.
Existem inúmeras aplicações para este tipo de sensor, que vão desde uma simples régua até dispositivos de proteção para máquinas e pessoas. Atualmente este tipo de sensor é amplamente utilizado na área da robótica para fazer a detecção de obstáculos.
Depois de entender o funcionamento deste sensor o infinito é o limite da criatividade para quaisquer novos projetos com ele.
Inicialmente vamos estudar a teoria básica deste nosso sensor ultrassônico.
HC-SR04
O sensor ultrassônico HC-SR04 é constituído por um emissor e um receptor de ondas sonoras. O emissor envia uma frequência específica e o receptor capta esta frequência quando ela é refletida por algum objeto dentro da faixa de alcance.
Este módulo oferece excelente detecção de distâncias sem contato com o objeto, com alta precisão e leituras estáveis de 2 cm até 400 cm. Sua operação não é afetada pela luz solar ou por material preto. Ele vem completo com transmissor ultra-sônico e módulo receptor.
Características:
- Alimentação :+5V DC;
- Corrente Nominal: 15mA;
- Ângulo eficaz: <15°;
- Distância de detecção : 2cm – 400 cm;
- Resolução : 0.3 cm;
- Trigger Input Pulse width: 10uS;
- Tamanho: 45mm x 20mm x 15mm.
Para conhecer melhor este módulo sugerimos ler o datasheet.
Display Oled Gráfico 128×64
Utilizamos também um display OLED com comunicação I2C conectado no Arduino UNO. Este tem a função de auxiliar o usuário na aplicação do equipamento. Mostrando a distância medida entre o sensor e o objeto alvo. O display possui um controlador SSD1306 e uma resolução de 128 x 64 pixels, descritos no datasheet do módulo. A principal vantagem deste módulo de visualização é sua alta
LET’S WORK!
Materiais Utilizados:
- 1 x Arduino UNO R3;
- 1 x Protoboard;
- 1 x Display Oled Gráfico 128×64;
- 1 x Sensor De Distância Ultrassônico HC-SR04;
- Jumpers.
Esses itens, e mais uma outros para implementar seu projeto – você acha AQUI na nossa loja :D.
Montagem
Código comentado:
// Projeto: Régua Eletrônica // Autor: Samuel Centenaro de Oliveira // Data: 03.07.2017 // V_1.0.1 //Carrega a biblioteca do display OLED #include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); //deve ser utilizada esta configuração //Carrega a biblioteca do sensor ultrassonico #include <Ultrasonic.h> //Define os pinos para o trigger e echo #define pino_trigger 4 #define pino_echo 5 //Inicializa o sensor nos pinos definidos acima Ultrasonic ultrasonic(pino_trigger, pino_echo); float cmMsec, inMsec, mMsec; //declaração das variáveis utilizadas para medição de distancia void draw() { // Comandos graficos para o display devem ser colocados aqui // Seleciona a fonte de texto u8g.setFont(u8g_font_profont11); // Mensagens iniciais u8g.drawRFrame(0, 18, 128, 46, 4); u8g.drawStr( 8, 10, "Regua Eletronica"); // Mostra valor do sensor em centimetros ou metros // para valores menores que 1 metro será mostrado em centimetros if(cmMsec < 100) { u8g.setFont(u8g_font_9x18B); u8g.setPrintPos(25, 45); u8g.print(cmMsec); //linha de comando que imprime a variavel de retorno do valor do sensor u8g.drawStr( 85, 45, "cm"); } else { u8g.setFont(u8g_font_9x18B); u8g.setPrintPos(30, 45); u8g.print(mMsec); //linha de comando que imprime a variavel de retorno do valor do sensor u8g.drawStr( 85, 45, "m"); } } // Imprime mensagem no rodape void setup(void) { Serial.begin(9600); //inicia comunicação serial if ( u8g.getMode() == U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); // white } else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); // max intensity } else if ( u8g.getMode() == U8G_MODE_BW ) { u8g.setColorIndex(1); // pixel on } else if ( u8g.getMode() == U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255, 255, 255); } } void loop(void) { //Le as informacoes do sensor, em cm e pol long microsec = ultrasonic.timing(); cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); mMsec = cmMsec/100; inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); Serial.print("Distancia em cm: "); Serial.print(cmMsec); Serial.println(mMsec); u8g.firstPage(); // Chama a rotina de desenho na tela do { draw(); } while ( u8g.nextPage() ); delay(100); //mantem uma atualização a cada 100 miliSegundos }
Este código basicamente fica “plotando” as informações no display a cada 100 ms. As informações de distâncias medidas são determinadas pelo comando “ultrasonic.timing();” e após é realizado o cálculo de distância.
É muito importante que as bibliotecas do sensor e do display sejam instaladas e utilizadas corretamente para o funcionamento adequando do projeto.
Como um adicional ao projeto, para quem não possui ainda o display, existe uma maneira de monitorar os valores de medição de distância através da porta serial. Para quem quiser testar esta alternativa pode-se alterar o valor do delay de 100 para 1000 na última linha do código, isto facilitará a impressão dos dados no terminal serial.
Conclusões:
Após a montagem de todos os componentes na protoboard, carregamento do firmware no Arduino e realizado os testes, foi identificado um ótimo funcionamento do sensor ultrasom.
Ele foi capaz de executar leituras consideravelmente exatas e precisas principalmente pelo valor do módulo.
O display também é uma ótima ferramente para quem gosta de criar projetos com interfaces de leitura.
Então, gostaram da postagem? Ficaram com dúvidas? Tem sugestão?
Este é só uma montagem simples da integração entre estes componentes, com eles podemos fazer diversos projetos interessantes.
No próximo post falaremos especificamente sobre o display OLED: funcionamento, configurações e vários arquivos exemplos. Até mais!!
Se você gostou deste post deixe seu comentário aqui e curta no Facebook!!