Uma das formas de interação sem fio
que temos contato a um bom tempo e que a utilizamos com muita frequência é a
infravermelho (IR), onde possuímos um emissor e um receptor. No caso do sinal
infravermelho, eles são ondas de comprimento de 1 milímetro até 700 nanômetros,
e, portanto, não visíveis para ao olho humano e possuem este nome, pois no espectro de luz, está localizado depois da luz vermelha.
E o receptor de infravermelho é um encapsulamento de componentes que,
normalmente, funcionam a uma frequência de modularização/demodularização de 38KHz no protocolo de transmissão NEC.
1. Materiais Utilizados
1.1. Emissor
7
fios (macho)
2
fios (fêmea)
1
led infravermelho
1
resistor de 1KΩ
1
botão
1 arduino
1 breadboard
1.2. Receptor
6
fios (macho)
1 arduino
2.1.
Emissor
Para montar o emissor, primeiramente conectamos o botão à breadboard,
colocamos uma tensão de 3.3V/5V em sua entrada, colocamos um resistor de 1KΩ para
evitar curto e desligamento do Arduino ligado ao terra (GND) e na saída do
botão adicionamos um fio para a porta digital 2 do Arduino. E o led
infravermelho o conectamos diretamente no Arduino, onde o seu negativo (perna
menor do led) conectamos em uma porta GND (terra) e o positivo (sinal) o conectamos
na porta PWM 3 do Arduino.
2.2.
Receptor
Para montar o receptor,
primeiramente conectamos na breadboard o receptor de infravermelho e na trilha
da breadboard referente a marcação (-) do receptor conectamos um fio ligado ao
terra (GND), na outra ponta, onde tem a marcação de um (S) é o sinal, e o conectamos
na porta digital 11 do Arduino e por fim, o pino do meio do receptor é o Vcc
que ligamos no 3.3V do Arduino. Após o receptor devidamente conectado,
conectamos o buzzer, onde o fio preto é ligado no terra (GND) e o fio vermelho
é ligado na porta digital 9 do Arduino.
3. Código utilizado no Arduino (Emissor)
Usando a biblioteca IRremote.
1: #include <IRremote.h>
2: IRsend irsend; //Configurado para a PWM 3
3: const int buttonPin = 2;
4: int buttonState = 0;
5: int lastButtonState = 0;
6: void setup() {
7: Serial.begin(9600);
8: pinMode(buttonPin, INPUT);
9: }
10: void loop() {
11: buttonState = digitalRead(buttonPin);
12: if (buttonState == HIGH)
13: {
14: irsend.sendNEC(0x00000001, 32); //Envia sinal NEC de 32bits
15: lastButtonState = 1;
16: }else{
17: if (lastButtonState == 1)
18: {
19: irsend.sendNEC(0x00000000, 32);
20: }
21: lastButtonState = 0;
22: }
23: delay(100);
24: }
Pontos Relevantes:
Este código é o responsável por identificar se o botão está sendo pressionado e é o responsável por enviar um sinal no padrão NEC de 32bits com um valor 1 ou 0, no caso.
O IRsend vem da biblioteca, é o responsável por enviar um sinal e por padrão ele está conectado ao PWM 3.
As linhas 14 e 19 são as responsáveis por enviar o sinal NEC propriamente dito.
As outras linhas dentro do método loop() basicamente são para identificar o estado do botão e enviar determinado sinal ou não.
O IRsend vem da biblioteca, é o responsável por enviar um sinal e por padrão ele está conectado ao PWM 3.
As linhas 14 e 19 são as responsáveis por enviar o sinal NEC propriamente dito.
As outras linhas dentro do método loop() basicamente são para identificar o estado do botão e enviar determinado sinal ou não.
1: #include <IRremote.h>
2:
3: int RECV_PIN = 11;
4: const int buzzerPin = 9;
5: IRrecv irrecv(RECV_PIN);
6: boolean bLastState = false;
7: decode_results results;
8:
9: void setup()
10: {
11: Serial.begin(9600);
12: irrecv.enableIRIn(); // Inicializa o receiver
13: }
14:
15: void dump(decode_results *results) {
16: results->decode_type = NEC;
17: if (results->decode_type == NEC) {
18: Serial.print("Decoded NEC: ");
19: }
20: if(results->value == 1){
21: if(bLastState == 0) {
22: beepOn();
23: bLastState = 1;
24: }
25: } else {
26: if(bLastState == 1) {
27: beepOff();
28: bLastState = 0;
29: }
30: }
31: Serial.println(results->value, HEX);
32: }
33:
34: void loop() {
35: if (irrecv.decode(&results)) {
36: dump(&results);
37: irrecv.resume(); // Prepara o receiver para o próximo dado
38: }
39: }
40:
41: void beepOn(){
42: analogWrite(9, 20);
43: }
44:
45: void beepOff(){
46: analogWrite(9, 0);
47: }
Pontos Relevantes:
Este código é o responsável por receber o sinal no padrão NEC e emitir um som com o buzzer.
A linha 12 é a responsável por inicializar o receptor.
As linhas 41-47 são os métodos beepOn() e beepOff, ou seja, são eles que escrevem valores analógicos para o pino, 9 no caso, e emitem o som ou não no buzzer.
As linhas 20 - 30 são as responsáveis por realizar testes para ver em qual posição o botão do emissor está e consequentemente acionar o buzzer.
A linha 35 é útil para ver se tem algo sendo enviado.
A linha 37 serve para preparar o receptor para receber o próximo dado.
Este código é o responsável por receber o sinal no padrão NEC e emitir um som com o buzzer.
A linha 12 é a responsável por inicializar o receptor.
As linhas 41-47 são os métodos beepOn() e beepOff, ou seja, são eles que escrevem valores analógicos para o pino, 9 no caso, e emitem o som ou não no buzzer.
As linhas 20 - 30 são as responsáveis por realizar testes para ver em qual posição o botão do emissor está e consequentemente acionar o buzzer.
A linha 35 é útil para ver se tem algo sendo enviado.
A linha 37 serve para preparar o receptor para receber o próximo dado.
Nenhum comentário:
Postar um comentário