Controle Remoto
A última atividade da oficina foi a instalação de um receptor de controle remoto infravermelho. O carro é autônomo, e não precisa de um controle remoto para operar. Mas, para exercitarmos uma aplicação que utilizasse esse componente, decidimos usar comandos do controle remoto para ajudar o carro quando o mesmo para por causa de um obstaculo à sua frente.Escolhemos o pino 11 para ligar o controle remoto. A escolha foi por ser este um pino disponível, e conectado à lógica de interrupções do Arduino, que é necessária para a leitura de sinais do controle remoto.
Antes de instalar o componente no carro, criamos um pequeno circuito de testes, para entender melhor o funcionamento do controle remoto. Este circuito tem o receptor de IR ligado ao pino 11, e dois LEDs ligados aos pinos 5 e 7. Para limitar a corrente que passa pelos LEDs, utilizamos resistores de 330 Ohm (laranja, laranja e marrom). A placa disponível para montar o circuito era de um Arduino Leonardo. Os pinos de E/S são os mesmos, e o circuito seria igual em um Arduino UNO.
Até esse ponto, temos ilustrado o relatório com a vista física dos componentes elétricos. Técnicos em eletrônica normalmente utilizam outro tipo de diagrama, com símbolos padronizados para representar cada tipo de componente. Como o diagrama para o circuito de teste é simples, decidimos mostrá-lo também, na figura abaixo.
Neste ponto, ultrapassamos a capacidade de utilização do Ardublockly como ferramenta de desenvolvimento. Para uso do controle remoto, decidimos utilizar uma biblioteca já pronta - IRremote - que necessita tratar interrupções e foi desenvolvida na linguagem nativa do Arduino. Portanto, iniciamos a fase em que a programação será realizada na própria linguagem de programação do Arduino, que é um subconjunto do C/C++.
Copiamos o código de exemplo, do site de um revendedor para 'Makers', e alteramos para controlar os dois LEDs com comandos das teclas 1, 2, 3 e 4.
Os sinais que o controle remoto envia são códigos com muitos dígitos, que nada têm a ver com as teclas pressionadas. Tivemos que fazer alguns testes utilizando o monitor serial para descobrir o código correspondente a cada tecla.
Código de teste do controle remoto:
// Programa : Teste Controle Remoto IR
// Autor : Arduino e Cia
#include <IRremote.h>
// Pino onde esta ligado o receptor IR
int RECV_PIN = 11;
unsigned long armazena_valor;
int pino_led_vermelho = 5;
int pino_led_verde = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
pinMode(pino_led_vermelho, OUTPUT);
pinMode(pino_led_verde, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor IR
}
void loop() {
if (irrecv.decode(&results)) {
Serial.print("Valor lido : ");
armazena_valor = (results.value);
Serial.println(armazena_valor, HEX);
if (armazena_valor == 0xC101E57B) // Se a tecla 1 foi acionada
digitalWrite(pino_led_vermelho, HIGH); //Acende o led vermelho
if (armazena_valor == 0x97483BFB) // Se a tecla 2 foi acionada
digitalWrite(pino_led_vermelho, LOW); //Apaga o led vermelho
if (armazena_valor == 0x9716BE3F) // Se a tecla 4 foi acionada
digitalWrite(pino_led_verde, HIGH); //Acende o led verde
if (armazena_valor == 0x3D9AE3F7) // Se a tecla 5 foi acionada
digitalWrite(pino_led_verde, LOW); //Apaga o led verde
if (armazena_valor == 0x449E79F) { // Se a tecla 9 foi acionada...
//Apaga todos os leds
digitalWrite(pino_led_vermelho, LOW);
digitalWrite(pino_led_verde, LOW);
}
irrecv.resume(); //Le o próximo valor
}
}
Mais Detalhes:
No início do código acima, utilizamos cores para destacar algumas características da linguagem C/C++ e também para mostrar o uso da biblioteca IRremote, que iremos usar no código do carro.
Os comandos em verde são os da biblioteca, e vamos ter que copiá-los para o código do carro sem muitas alterações.
As palavras em azul são palavras reservadas do C/C++, e representam declarações de tipos de variáveis e comandos da linguagem. Por exemplo: as palavras if/else correspondem aos comandos se/senao que utilizávamos no Ardublockly.
Os valores em vermelho são constantes numéricas. As que se iniciam com 0x representam valores hexadecimais (base 16, ao invés de base 10).
As palavras em marrom são palavras reservadas da biblioteca do Arduino, com nomes de funções e constantes pré-definidas.
O texto em cinza são comentários que nós inserimos no programa para explicar a lógica. Essa parte do programa não é executada. Serve apenas para as pessoas lerem, e entenderem melhor o que o código representa.
As palavras em preto, em Português, são nomes de variáveis que nós escolhemos para a lógica do nosso programa de teste.
No código, o símbolo = aparece com dois tipos de uso diferentes. Quando usado isoladamente (apenas um símbolo), ele causa a atribuição do valor da direita à variável à esquerda do símbolo. Quando usado na forma == (dois símbolos juntos, sem espaço entre eles), este símbolo torna-se um teste de igualdade, que resulta verdadeiro se o valor da expressão à esquerda do símbolo é o mesmo que o da expressão à direita. As expressões podem ser variáveis, constantes ou operações entre constantes e variáveis.
Para uma referência completa da linguagem, visite este site: https://www.arduino.cc/reference/pt/
O Receptor de Controle Remoto
O receptor de controle remoto é um fototransistor semelhante à parte receptora dos sensores infravermelhos reflexivos discutidos no tópico anterior. Quando uma tecla do controle remoto é pressionada, este emite uma série de sinais que são capturados pelo fototransistor como zeros e uns. A biblioteca IRremote tem funções que decodificam essas sequências em códigos numéricos. Cada tecla gera um código diferente, e, assim, podemos saber que tecla foi pressionada.
Este sistema de controle remoto é o mesmo utilizado para controlar os televisores que temos em casa. Se você utilizar o controle do seu televisor com o Arduino, também vai receber códigos numéricos, mas com valores diferentes.
Passar para a Parte 10


Nenhum comentário:
Postar um comentário