programa para ler os valores de meu controle e anotei em uma folha
o programa é o seguinte:
// Programa leitura controle remoto e resposta em hexadecimal
#include <IRremote.h> // inclue biblioteca do IR
int RECV_PIN = 11;// declara o pino de entrada do sinal do receptor
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);// velocidade da comunicação serial
irrecv.enableIRIn(); // Começa a receber
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
Com esse programa você vai apertando os botão do controle e vendo oque aparece serial monitor para ver o valor , agora vem o programa meu do garabot é diferente do que eles passam ai em cima mais o meu funcionou normalmente.
#include "IRremote.h"
#include "Servo.h"
#define centro 30 // coloca a cabeça no centro
#define moveesq 0 // cooca a cabeça para esquerda
#define movedir 60 // coloca a cabeça para direita
#define abre 0 // abre a boca
#define fecha 60 // fecha a boca
int Ledolho1 = 12;
int Ledolho2 = 13;
int receiver = 11;
Servo cabeca, boca ;
IRrecv irrecv(receiver);
decode_results results;
void setup()
{
cabeca.attach(10);
boca.attach(9);
cabeca.write(centro);
boca.write(fecha);
pinMode(Ledolho1, OUTPUT);
pinMode(Ledolho2, OUTPUT);
digitalWrite(Ledolho1,LOW);
digitalWrite(Ledolho2,LOW);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
translateIR();
irrecv.resume();
}
}
void translateIR()
{
switch(results.value)
{
case 0xFD609F://aki é onde voce coloca o valor do botao escolhido depois do 0x...
cabeca.write(moveesq);
delay(500);
cabeca.write(centro);
break;
case 0xFD20DF://aki tambem e assim por diante
cabeca.write(movedir);
delay(500);
cabeca.write(centro);
break;
case 0xFD50AF:
boca.write(abre);
delay(500);
boca.write(fecha);
break;
case 0xFD30CF:
digitalWrite(Ledolho1, HIGH);
digitalWrite(Ledolho2, HIGH);
cabeca.write(movedir);
delay(400);
cabeca.write(moveesq);
delay(400);
cabeca.write(movedir);
delay(400);
cabeca.write(moveesq);
delay(400);
cabeca.write(centro);
digitalWrite(Ledolho1, LOW);
digitalWrite(Ledolho2, LOW);
break;
case 0xFD08F7:
digitalWrite(Ledolho1, HIGH);
digitalWrite(Ledolho2, HIGH);
boca.write(abre);
delay(400);
boca.write(fecha);
delay(400);
boca.write(abre);
delay(400);
boca.write(fecha);
digitalWrite(Ledolho1, LOW);
digitalWrite(Ledolho2, LOW);
break;
case 0xFD8877:
digitalWrite(Ledolho1,HIGH);
digitalWrite(Ledolho2,HIGH);
delay(300);
digitalWrite(Ledolho2,LOW);
digitalWrite(Ledolho1,LOW);
break;
delay(500);
}
}
Pronto agora você pega os valores de seu controle em HEX e muda nesse programa onde eu comentei ok testa ai qualquer dúvida tamos ai.
…
o a tecla 1 do controle a cortina abre a tecla 2 fecha e a 3 é um " stop " em algum angulo que o usuario queira , o problema é que quando o motor chega no fim de curso ele para ..porem enquanto o fim de curso esta ativado ele nao deixa mais o motor girar no sentido contrario.. pois o sensor esta mandando o motor ficar parado...se alguem puder me ajudar fico grato ! estou usando essa programaçao :#include <IRremote.h> #include <AccelStepper.h>int sensor_final = 2;int estadosf ; int velocidade_motor = 250; int aceleracao_motor = 150;int sentido_horario = 0 ;int sentido_antihorario = 0 ;int RECV_PIN = 11; float armazenavalor; int pino_enable = 10; IRrecv irrecv(RECV_PIN); decode_results results; AccelStepper motor1(1,7,4); void setup() { pinMode(pino_enable, OUTPUT); pinMode(sensor_final, INPUT_PULLUP); Serial.begin(9600); irrecv.enableIRIn(); // Inicializa o receptor IR motor1.setMaxSpeed(velocidade_motor); motor1.setSpeed(velocidade_motor); motor1.setAcceleration(aceleracao_motor); Serial.println("Digite 1, 2 ou 3 e 3...");} void loop() { estadosf = digitalRead (sensor_final); if (estadosf == LOW ) { Serial.print(" sensor "); digitalWrite (pino_enable, HIGH); } if (irrecv.decode(&results)) { Serial.print("Valor lido : "); Serial.println(results.value, HEX); armazenavalor = (results.value); if (armazenavalor == 0xFF6897) //Verifica se a tecla 1 foi acionada { Serial.println("Numero 1 recebido - Girando motor sentido horario."); digitalWrite(pino_enable, LOW); sentido_horario = 1; sentido_antihorario = 0; } if (armazenavalor == 0xFF9867) //Verifica se a tecla 2 foi acionada { Serial.println("Numero 2 recebido - Girando motor sentido anti-horario."); digitalWrite(pino_enable, LOW); sentido_horario = 0; sentido_antihorario = 1; } if (armazenavalor == 0xFF02FD) //Verifica se a tecla OK foi acionada { Serial.println("Numero 3 recebido - Parando motor..."); sentido_horario = 0; sentido_antihorario = 0; motor1.moveTo(0); digitalWrite(pino_enable, HIGH); } irrecv.resume(); //Le o próximo valor } // Move o motor no sentido horario if (sentido_horario == 1) { motor1.moveTo(10000); } // Move o motor no sentido anti-horario if (sentido_antihorario == 1) { motor1.moveTo(-10000); } // Comando para acionar o motor no sentido especificado motor1.run(); }…
Adicionado por lucas borges ao 12:27 em 20 novembro 2018
om o código do botão
Acontece que mesmo colocando ela para ser pulsada, a tv não responde.
O Led IR está na porta 13 sem resistor e está emitindo luz. (testei na camera IR)
Vi que as vezes pode ter sido erro de leitura do receptor quando gerou a variável, mas rodei o sketch do receptor de novo e a variável bateu.
Então acredito que deva ser algo relacionado a frequência. O contador referente aos delays e pulsos parece estar funcionando.
Resumindo não sei o que pode estar errado.
Agradeço qualquer ajuda.
// MUTELG is a variation of Nikon D50 Trigger:
// This sketch will send out a Nikon D50 trigger signal (probably works with most Nikons)// See the full tutorial at http://www.ladyada.net/learn/sensors/ir.html// this code is public domain, please enjoy!
int IRledPin = 13; // LED connected to digital pin 13int IRsignal[] = { 892, 436,
66, 46,
58, 52,
60, 160,
64, 46,
60, 52,
58, 52,
58, 52,
58, 52,
60, 166,
60, 154,
66, 46,
58, 162,
64, 156,
64, 156,
66, 154,
64, 156,
64, 156,
66, 44,
60, 52,
58, 166,
62, 44,
60, 50,
60, 52,
58, 52,
58, 52,
58, 162,
60, 160,
66, 44,
60, 162,
64, 156,
64, 156,
64, 156,
64, 3914,
890, 222,
54, 0};// The setup() method runs once, when the sketch starts // ON, OFF (in 10's of microseconds) void setup() { // initialize the IR digital pin as an output: pinMode(IRledPin, OUTPUT); Serial.begin(9600); } void loop() { Serial.println("Sending IR signal"); MuteCode(); delay(10*1000); // wait one minute (60 seconds * 1000 milliseconds)} // This procedure sends a 38KHz pulse to the IRledPin // for a certain # of microseconds. We'll use this whenever we need to send codesvoid pulseIR(long microsecs) { // we'll count down from the number of microseconds we are told to wait cli(); // this turns off any background interrupts while (microsecs > 0) { // 38 kHz is about 13 microseconds high and 13 microseconds low digitalWrite(IRledPin, HIGH); // this takes about 3 microseconds to happen delayMicroseconds(9); // hang out for 10 microseconds, you can also change this to 9 if its not working digitalWrite(IRledPin, LOW); // this also takes about 3 microseconds delayMicroseconds(9); // hang out for 10 microseconds, you can also change this to 9 if its not working // so 26 microseconds altogether microsecs -= 26; } sei(); // this turns them back on} void MuteCode() { // This is the code for my particular Nikon, for others use the tutorial // to 'grab' the proper code from the remote for (int o=0; o<71; o+=2) {
pulseIR(IRsignal[o]); Serial.print("\nImprimiu: "); Serial.print(IRsignal[o], DEC); Serial.print("\n Delay: "); delayMicroseconds(IRsignal[o+1]);
Serial.print(IRsignal[o+1], DEC); } };…
lecionar uma opcão da pagina ele mesmo execute o comando.
Para exemplifcar:
É um controle remoto para minha SKY, dai, vou ligar o W5100 na minha rede ele vai ser o WebServer e o executador de comando.
Não sei se consegui explicar direito, vou tentar explicar em passos:
1- digito no celular o IP do W5100;
2- Ele abre a interface html, no caso essa:
3 - Dai clico em lista;
4 - O Arduíno que está ligado a ele, manda o sinal IR para Sky, usando essa sketch:
#include <IRremote.h>
IRsend irsend;
char acionaComando = 0;
void setup () { Serial.begin(9600);}void loop() {
if (Serial.available() > 0) { char acionaComando = Serial.read(); switch(acionaComando){ case 'a': lista();break; case 'b': guia();break; case 'c': confirma();break; case 'd': channelMais();break; case 'e': channelMenos();break; case 'f': setaAcima();break; case 'g': setaAbaixo();break; case 'h': setaEsq();break; case 'i': setaDir();break; case 'j': sair();break; case 'k': info();break; case 'l': play();break; case 'm': skystop();break; case 'n': ffwd();break; case 'o': rrwd();break; case 'p': pause();break; case 'q': rec();break; case 'r': secff();break; case 's': secrr();break; case 't': channelReturn();break; case 'u': nDash();break; case 'z': n0();break; case '1': n1();break; case '2': n2();break; case '3': n3();break; case '4': n4();break; case '5': n5();break; case '6': n6();break; case '7': n7();break; case '8': n8();break; case '9': n9();break; } }}
É possivel pessoal?
Eu posso colocar as Imagens que montam o HTML no cartao de memoria que posso colocar no W5100?
OBS : o HTML e o Sketch estão em anexo. Para poderem analizar e ver se é possivel.
Abraços
…
Adicionado por Michael Araujo ao 15:24 em 27 novembro 2014
que tenho junto do Arduino, vi que existe alguns exemplos (ESSE), de como conectar o controle no Arduino, pela internet, já dei uma boa pesquisadaBom vamos la, faço engenharia mecânica, elétrica/eletrônica não é meu forte mas não sou um completo desentendido no assunto. Pretendo usar Arduino UNO ou Mega 2560 R3 (pela maior capacidade de memoria já que o programa vai ser um pouco grande e também pela maior quantidade de portas PWM, vou precisar de 8) 1- Algum shield USB Host (ESSE ou ESSE), gostaria de saber se eles são todos iguais, compatíveis, etc... 2- Vou comprar um dongle bluetooth USB compatível com o controle e fazer o pareamento3- Vou ligar 2 pontes H (ESSA) no Arduino pra fazer o controle dos motores, a ideia inicial é usar as portas PWM pra controlar a velocidade do motor caso o host USB não roube as portas.4- A alimentação das pontes (dos motores consequentemente) vai ser por uma bateria 12v, já li que o Arduino suporta 12v mas gostaria de saber se posso usar os mesmos 12v da bateria, enquanto uso as pontes, para alimentar o Arduino (a bateria é um tanto grande (UNIPOWER UP1213 12v 1.3Ah Chumbo-acida) e os motores são ESSE 3657, não sei se tenho opção do motor com corrente mais baixa, até então estou restrito a ele5- Pretendo usar a biblioteca padrão de exemplo PS3BT disponibilizada pelo próprio Arduino.6- Posso ligar as duas pontes H no Ground do Arduino? Apesar de as entradas logicas da ponte usar no max 36mA, cada motor drena até 2A e eles podem estar os 4 ligados ao mesmo tempo, isso não vai danificar o Arduino? O modo correto seria ligar o polo negativo da ponte no no negativo da bateria? Ou ligar em ambos, Ground e negativo como no diagrama abaixo?
7- A carcaça da plataforma vai ser feita de alumínio, já ouvi comentários que isso gerava interferência no Arduino, fiquei meio cético quando ouvi mas vai que é verdade, alguém sabe? Já que vou comprar os componentes, a ideia geral é saber se isso pode dar errado alem do dongle BT não ser compatível com o controle ou a biblioteca PS3BT não conversar com o shield/dongleNunca usei Arduino na vida, então quero já tirar as duvidas da parte de hardware antes de queimar alguma coisa por desatenção, a parte de software não é tanto um problema, só se precisar modificar os pinos que a biblioteca usa Desculpa o amadorismo, mas não estou com software adequado pra montar o esquema elétrico, então foi no paint mesmo, só pra mostrar o que tenho na cabeçaEstou correndo o risco de fazer alguma coisa errada? Alguém tem alguma dica ou observação pra eu ficar de olho e não ir pro caminho errado?
Obrigado…
Adicionado por Felipe T ao 15:05 em 28 agosto 2015
azoavelmente bem, mas ainda apresentam taxa de erro média e sensibilidade média.
Não consigo entender como o receptor é tão pouco sensível ao receber um sinal. Os meus aparelhos da sala, basta apenas um reflexo do sinal do controle na parede por exemplo que já funciona, enquanto o arduino as vezes preciso me levantar e ter linha visada perfeita para funcionar, e quando funciona...
Para tentar descobrir a origem do problema, estou usando esse código super simplificado que indica o protocolo e o código recebido. Carreguei o sketch em um duemillanove e liguei um dos receptores, mas o resultado foi pior ainda... Não conseguiu decodificar nada, a não ser as repetições FFFFFFFF do protocolo NEC
Eis o código:
#include <IRremote.h>#include <IRremoteInt.h>const int RECV_PIN = 6;IRrecv irrecv(RECV_PIN);decode_results results;void setup(){ Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver irrecv.blink13(true); Serial.println("init");}void loop() { if (irrecv.decode(&results)) { if (results.decode_type == NEC) { Serial.print("NEC: "); } else if (results.decode_type == SONY) { Serial.print("SONY: "); } else if (results.decode_type == RC5) { Serial.print("RC5: "); } else if (results.decode_type == RC6) { Serial.print("RC6: "); } else if (results.decode_type == UNKNOWN) { Serial.print("UNKNOWN: "); } Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value }}
O que recebo na serial é isso:
initUNKNOWN: 6BA470EFNEC: FFFFFFFFUNKNOWN: 4CB0FADDNEC: FFFFFFFFUNKNOWN: 24AE7D4FNEC: FFFFFFFFNEC: FFFFFFFFNEC: FFFFFFFFUNKNOWN: C503CECFUNKNOWN: 25AE7EE0UNKNOWN: 71ED18FCUNKNOWN: DCB07354UNKNOWN: A57305FDNEC: FFFFFFFFNEC: FFFFFFFFUNKNOWN: 892614D9NEC: FFFFFFFFNEC: FFFFFFFFUNKNOWN: 61AEB848NEC: FFFFFFFFNEC: FFFFFFFFUNKNOWN: 60CFF56D
O protocolo desse controle em particular é NEC em todas as teclas, muitos dos "UNKNOWN" eram a mesma tecla pressionada várias vezes, porém teve um código totalmente diferente e aparentemente desconhecido.O controle remoto não tem defeitos, pois uso o mesmo controle em outro aparelho e funciona perfeitamente
Eu tenho o palpite de que o problema pode ser esse componente de recepção que uso. Se não me engano é o TSOP1738.
O curioso é que no passado os meus projetos funcionavam muito bem e ultimamente tem dado muitos problemas.Segue imagem:
Grato…
um sensor LDR para quando estiver escuro os leds acenderem sozinhos de acordo com a luz ambiente, mas não sei colocar esses dois codigos em um só arduino você poderia me ajudar, achei um codigo para LDR e outro para Servo quase deu certo só não esta funcionando a parte do LDR ele não apaga os leds quando quando coloco luz isso virtual no 123Dcircuits
Codigo Fonte
#include <Servo.h>
/* source: www.electroschematics.comYou'll need to change the led pins and the codes accordingly to your configuration and IR remote*/ #include <IRremote.h> int RECV_PIN = 2; // the pin where you connect the output pin of TSOP4838int led1 = 3;
int itsONled[] = {0,0,0,0,0,0,0,0,0,0};/* the initial state of LEDs is OFF (zero) the first zero must remain zero but you can change the others to 1's if you want a certainled to light when the board is powered */#define code1 2295 // code received from button 1
#define LDR 0//#define led 7int val;// variá IRrecv irrecv(RECV_PIN); decode_results results;
Servo servoMain; // Define our Servo
void setup(){ servoMain.attach(12); // servo on digital pin 10 Serial.begin(9600); // you can comment this line irrecv.enableIRIn(); // Start the receiver pinMode(led1, OUTPUT); pinMode(led, OUTPUT); digitalWrite(led, LOW);} void loop() { if(irrecv.decode(&results)) { unsigned int value = results.value; switch(value) { case code1: if(itsONled[1] == 1) { // if first led is on then digitalWrite(led1, LOW); // turn it off when button is pressed servoMain.write(45); // Turn Servo Left to 45 degrees itsONled[1] = 0; // and set its state as off } else { // else if first led is off digitalWrite(led1, HIGH); // turn it on when the button is pressed servoMain.write(90); // Turn Servo Left to 45 degrees itsONled[1] = 1; // and set its state as on } Serial.println(value); // you can comment this line irrecv.resume(); // Receive the next value val= analogRead(LDR); // ler os valores obtidos pelo ldr Serial.println(val); if (val <= 400) { // pouca luz - quase escuro digitalWrite(led, HIGH); } if (val> 400) { // muita luz digitalWrite(led, LOW); } delay(500);}}}
…
tura maxima - não muda int vent1 = 9; // onde será ligado os atuadores ( Nomeia o pino 7 para (led1) ).
int RECV_PIN = 8; //Onde será ligado o Receptor IR IRrecv irrecv(RECV_PIN); // Não mudar decode_results results; // Não mudar void setup() {
irrecv.enableIRIn(); //Iniciando a recepção do sinal - Não mudar Serial.begin(9600); // abilita a comunicação serial - Não mudar } //--------------------------------------------------------------------------------- int compare(unsigned int oldval, unsigned int newval) { // if (newval < oldval * .8) { // return 0; // } // else if (oldval < newval * .8) { // return 2; // } // else { // return 1; // } // } // unsigned long decodeHash(decode_results *results) { // unsigned long hash = FNV_BASIS_32; // for (int i = 1; i+2 < results->rawlen; i++) { // int value = compare(results->rawbuf[i], results->rawbuf[i+2]);// hash = (hash * FNV_PRIME_32) ^ value; // } // return hash; // } // //--------------------------------------------------------------- // |NÃO MUDAR NENHUM PARAMETRO DE CONFIGURAÇÃO NESTA AREA| void loop() { if (irrecv.decode(&results)) { // Serial.print("'real' decode: "); //Mostra o valor recebido - Não necessario // Serial.print(results.value, HEX); //!!!!!!!PARA IDENTIFICAR AS TEClAS - Não necessario Serial.print(" Tecla decodificada > "); // Mensagem que virá escrita no Serial Monitor unsigned long hash = decodeHash(&results); // Valor Decodificado da tecla pressionada Serial.println (hash); //Mostra o valor Decodificado da tecla no Serial Monitor irrecv.resume(); // Obrigatório a reinicialização da recepção!
//--------------Local para inserção do código logo abaixo!-----------------
if(hash == 3778927144){ // Valor do botão do controle remoto já decodificado. Serial.println ("Ventilador Ligador"); // Mensagem que será mostrada no Serial Monitor. digitalWrite(vent1, HIGH); // Valor da saida ( HIGH = LIGADO - LOW = DESLIGADO ).}if(hash == 2908251746){ Serial.println ("Ventilador Desligado"); digitalWrite(vent1, LOW);}
} }
…