6p20 é um codificador no qual você programa um codigo de endereçamento que depois vai ser transmitido toda vez que você acionar o enable dele.
primeiro montei o receptor de 433mhz na protoboard e coloquei um led na saida de dados. quando acionava o botão do controle o led dava umas piscadas ( o que seria o codigo transmitido)
depois liguei um arduino nesta saida de dados para captar estes dados ( usando o arduinoscope). ate consegui ver uma sequencia de altos e baixos, mas com muito ruido a sequencia ficava sempre diferente.
o protocolo usado para transmissaõ parece ser o manchester, segundo lí em alguns foruns.
tentei decodificar com o codigo de píc (usando um 16f628) mas não rolou, caso tivesse rolado daria para ir adaptando para o arduino.
Estou nessa !
O ideal seria ligar um scope para ver o que esta ocorrendo, mas não tenho acesso a nenhum...
Estou pensando em talvez ir no labdegaragem e testar lá... depois colocar a solução aqui...
Têm alguma ideia que eu possa testar por aqui ?
Abraço
Gino
…
Adicionado por Gino Almeida ao 10:39 em 3 outubro 2011
no projeto eu envio pela web o código do comando tipo <a href=\"ir?code=000001\">Send 0x46C7</a> eu gostaria de passar 3 parametros o código do controle tipo esse acima 000001 e nesse trecho de código irsend.sendRC6(code, 20) aonde está sendRC6 e aonde está o 20, não sei se estou sendo claro mas na prática eu queria uma digitar no navegador os 3 dados e o esp8266 entender os 3 e executar como já faz hoje só com 1 comando.
meu código
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <IRremoteESP8266.h> const char* ssid = "Bruno"; const char* password = "pedrorafael"; MDNSResponder mdns; ESP8266WebServer server(80);
IRsend irsend(0);
void handleRoot() { server.send(200, "text/html", "<html><head> <title>ESP8266 Demo</title></head><body><h1>Hello from ESP8266, you can send NEC encoded IR signals from here!</h1><p><a href=\"ir?code=000001\">Send 0x46C7</a></p><p><a href=\"ir?code=83472\">Send 0x1461</a></p><p><a href=\"ir?00002\">Send 0x14611</a></p></body></html>"); }
void handleIr(){ for (uint8_t i=0; i<server.args(); i++){ if(server.argName(i) == "code") { unsigned long code = server.arg(i).toInt(); irsend.sendRC6(code, 20); } } handleRoot(); }
void handleNotFound(){ String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); } void setup(void){ irsend.begin(); Serial.begin(115200); WiFi.begin(ssid, password); IPAddress subnet(255, 255, 255, 0); WiFi.config(IPAddress(192, 168, 1, 50), IPAddress(192, 168, 1, 1), subnet); Serial.println("");
// Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.on("/ir", handleIr); server.on("/inline", [](){ server.send(200, "text/plain", "this works as well"); });
server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); pinMode(2, OUTPUT); // escreve o estado da porta 4 como LOW / desligado digitalWrite(2, LOW); } void loop(void){ server.handleClient(); }…
Adicionado por Bruno Diegues ao 19:50 em 12 dezembro 2016
a com o ultimo valor lido, por conta disso o meu armário fica abrindo e fechando todo momento.
O meu código ficou assim:
Obs. Deixei algumas linhas do comando entre */ porque eu estou tentando não usar o botão local e sim o remoto.
Desde já muito obrigado.
// Projeto - Amarario para pessoas portadoras de necessidades especiais.// Acionamento por controle remoto
#include <IRremote.h>
int releA = 10; //Rele para abrir o armário.int releF = 12; //Rele para fechar o armário.int aFechado = 5; //Sensor fim de curso/*int botao = 3; //Botão que inicia o sistema*/int delayPeriod = 2800; // Atraso de 2,6 segundosint RECV_PIN = 11;float armazenaValor;IRrecv irrecv(RECV_PIN);decode_results results;
void setup(){ pinMode(releA, OUTPUT); //Define o pino 10 como saída. pinMode(releF, OUTPUT); //Define o pino 12 como saída. pinMode(aFechado, INPUT); //Define o pino 5 como entrada /*pinMode(botao, INPUT); //Define o pino 3 como entrada*/ digitalWrite(aFechado, HIGH); //Habilita resistor de Pull Up na entrada 5 /*digitalWrite(botao, HIGH); //Habilita resistor de Pull Down na entrada 3*/ Serial.begin(9600); irrecv.enableIRIn(); //Inicializa o receptor IR}
void loop()
{ if (irrecv.decode(&results)) { Serial.print("Valor lido : "); Serial.println(results.value, HEX); armazenaValor = (results.value); if (((armazenaValor) == 0xFF30CF) && (digitalRead(aFechado) == HIGH)) //Se o botão foi acionado e o armário estiver fechado, vai para função que abre o armário. { openCloset(); //Função que abre o armário } else if (((armazenaValor) == 0xFF30CF) && (digitalRead(aFechado) == LOW)) //Se o botão estiver acionado e o armário estiver aberto, vai para função fechar armário. { closeCloset(); //Função que fecha o armário } else //Se não { loop(); //Vai para função checkButton } }}
void openCloset() //Função que abre o armário{ digitalWrite(releA, HIGH); //Adiciona 5V na saída para comutar o rele de abertura delay(delayPeriod); //Aguarda 2600ms digitalWrite(releA, LOW); //Retira o 5V da entrada para desligar o motor loop(); //Vai para a função checkButton}
void closeCloset() //Função que fecha o armário{ digitalWrite(releF, HIGH); //Adiciona 5V na saída para comutar o rele de fechamento delay(delayPeriod); //Aguarda 2600ms digitalWrite(releF, LOW); //Retira o 5V da entrada para desligar o motor loop(); ////Vai para a função checkButton}…
#include <IRremote.h> int RECV_PIN = 11; float armazenavalor; int pinoledvermelho = 5; int pinoledverde = 7; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); pinMode(pinoledvermelho, OUTPUT); pinMode(pinoledverde, OUTPUT); digitalWrite(pinoledvermelho , 0); digitalWrite(pinoledverde , 0); irrecv.enableIRIn(); // Inicializa o receptor IR } void loop() { if (irrecv.decode(&results)) { Serial.print("Valor lido : "); Serial.println(results.value, HEX); armazenavalor = (results.value); if (armazenavalor == 0xFF10EF) //Verifica se a tecla 1 foi acionada { digitalWrite(pinoledvermelho, HIGH); //Acende o led vermelho delay(1000); digitalWrite(pinoledvermelho, LOW); } if (armazenavalor == 0xFF18E7) //Verifica se a tecla 2 foi acionada { digitalWrite(pinoledvermelho, LOW); //Apaga o led vermelho } if (armazenavalor == 0xFF30CF) //Verifica se a tecla 4 foi acionada { digitalWrite(pinoledverde, HIGH); //Acende o led verde delay(1000); digitalWrite(pinoledverde, LOW); } if (armazenavalor == 0xFF38C7) //Verifica se a tecla 5 foi acionada { digitalWrite(pinoledverde, LOW); //Apaga o led verde } if (armazenavalor == 0xFF52AD) //Verifica se a tecla 9 foi acionada { digitalWrite(pinoledvermelho, LOW); //Apaga todos os leds digitalWrite(pinoledverde, LOW); } irrecv.resume(); //Le o próximo valor } } …
Adicionado por emerson klebe ao 22:20 em 5 agosto 2014
Quanto à parte eletrônica, entretanto, pude notar que, algumas vezes que o circuito comandava para ligar/desligar a luz, mas o ventilador não respondia. OBS.: uso tensão de 5V. Alimentei com 12V e nada de melhorar o sinal.
Minha formação é Eng. Elétrica e trabalho com TI, pensei que o fato do ventilador não receber o comando para a luz estava relacionado com ruídos do meio.
Porém, pensei que talvez faltasse o fator humano relacionado ao controle.
Pesquisei que, em média, um toque de botão pode demorar cerca de 70 a 150ms. Como cada byte do comando leva 500 microssegundos e, cada comando, possui 32 bytes, logo são 16 ms por comando. Simples, enviei 10x o mesmo comando para obter a duração de 160ms de sinal e agora o ventilador responde em 100% das vezes. O circuito do ventilador deve ignorar a repetição de uma rajada de comandos iguais, assim como ocorre com controle remoto IR em uma TV (vejo isso na prática, com o piscar do receptor na minha).
O que acham da linha de raciocínio?Espero que isto ajude os demais.…
Adicionado por Lucas Alves ao 10:15 em 26 agosto 2022
lhos de audio e video, leitura de temperatura com LM35, e estou quase conseguindo interligar meu alarme residencial para controla-lo.
Também tenho o Status da iluminação e temperatutra no celular a cada 5 segundos
Para acesso remoto estou usando o NO-IP, liberei as portas e OK
Problemas:
Internamente OK tudo funciona perfeitamente,usando o endereço do NO-IP no APP Touchosc
Acessando externamente, por outra rede, consigo controlar tudo, mas não tenho Status.
Acessando pelo 3G(TIM) via celular, controlo tudo, e tenho o Status da iluminação e temperatura,mas tem vezes que eu não tenho o Status,
pelo 3G(claro) somente controlo não tenho Status.
Já alterei para outras portas e mesma coisa
Já troquei a fonte de alimentação, dei prioridade no Qos( roteador ) para o arduino
Já troquei para o Change-IP e mesmo problema as vezes não tenho status remotamente via 3G(TIM).
Também fui aumententando o tempo de atualização de status e cheguei até 30 segundos e mesma coisa
segue um trecho do Sketch
if (digitalRead(botaosala)==LOW){ float releestado = digitalRead(luzsala); //liga ou desliga luz digitalWrite(luzsala,!releestado); OSCMessage msgOUT("/ard/sala"); //endereço OSC de envio para smartphone msgOUT.add(releestado); //dados a ser enviado Udp.beginPacket(Udp.remoteIP(),destPort); //destino ip remoto e porta msgOUT.send(Udp); // envia os dados delay (200); Udp.beginPacket(destip, destPort); //destino ip interno msgOUT.send(Udp);//dados a ser enviado Udp.endPacket(); //envia os dados msgOUT.empty(); //zera para outra mensagem delay(200); }
Se alguem souber mais alguma coisa que eu possa fazer para resolver agradeço.
Camilo…
ois servos interligados para movimentar uma camera sem fio e, um servo na frente para um sensor de ultra som. A principio minha ideia é fazer um automato e a camera será manipulada depois..
Etapas:
(1) O carro tem motor DC podendo ir para frente e para tras;
(2) A direção é dada por outro motor DC (esq e dir);
(3) servo de movimento do sensor de ultra som variando em 180 graus;
(4) programacao do sensor e controlando a movimentacao das rodas para desvio.
Problemas:
A parte mecanica esta pronta vou tirar fotos hoje para colocar no lab garagem porem sou uma zebra em programacao C me restringindo a acender leds e copiar aluns programas para ver como funciona. Tentei colocar um teste de movimento do servo frontal com o movimento das rodas e testar o shield de motor. funcionou porém, no loop, o servo se movimenta, para e depois do testes das rodas do carro para todos os sentidos, ele volta a funcionar e repete assim po diante. Pergunta (1) tem como gravar os arquivos de controle independente e acessa-los pela programacao quando for necessario em vez de colocar tudo num mesmo arquivo? (2) como resolver o problemade loopsequencial onde realiza cada coisa por vez?
abraços a todos.…
acionamento desse led vem via IR de um controle remoto, bom até aí blza o programa já funciona hj da seguinte maneira...
#define ledliga 12
#include <IRremote.h>
int RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);decode_results results;
int armazenaValor;
void setup(){ irrecv.enableIRIn(); pinMode(ledliga, OUTPUT);}
void loop(){ if (irrecv.decode(&results)) { armazenaValor = (results.value); setorIR(); }}
void setorIR(){ switch (armazenaValor) { case 0xFF30CF: digitalWrite(ledliga, HIGH); delay(10000);
break;
case 0xFF18E7: digitalWrite(ledliga, LOW); break;
} armazenaValor = 0; irrecv.resume(); //Le o próximo valor }
porém quando eu ligo o led o programa não consegue mais receber comandos IR até os 10 segundos do delay acabar...Mas preciso que eu possa apagar o led antes dos 10 segundos.... poderia simplesmente retirar o delay(10000), mais não posso retirar os 10 segundos porque o código continua e é grande... só coloquei essa parte de exemplo para simplificar....
Valeu pessoal... Obrigado mais uma vez.....
…
a pequenas distancias, como chave otica. Para evitar que a luz ambiente atrapalhe usam uma carenagem plastica. Se bater sol por ex para de funcionar. Alcance de alguns milimetros.
2) Pulsados ou em frequencia. A grande diferença é que vc não mede se tem infravermelho, pq tem, o sol tem ! Vc tem (emite) tudo que está quente tem. Vc filtra uma determinada frequencia. Isso permite bastante distancia. Coisa como 5metros. É o usado em TV.
Acho que vc quer o 2).
Sendo ele vc precisa considerar que não é tão simples. Vc precisa fazer o led piscar.
Vamos supor que vc apenas faça piscar (38KHz, por ex) e do lado do receptor coloque tb um de 38KHz. Deve funcionar. Acertou ele vai gerar um pulso (baixo ?). Mas no silencio (sem a emissão) é indeterminado. Pode ser que venha silencio ou que venha ruido. Não sei, depende...
Outra, qualquer controle remoto comum de TV vai interferir, pq vai emitir alguma coisa na mesma frequencia.
O circuito otimo seria vc não apenas mandar um pulso e sim um codigo.
Aih vc chegou no circuito completo de um controle remoto IR.
Algo assim:
https://www.instructables.com/id/Arduino-Infrared-Remote-tutorial/
Que é o mais recomendável.
Embora vc consiga fazer de forma bastante simples usando uma canetinha laser e um LDR.
https://www.instructables.com/id/How-to-Make-a-Laser-Security-System-Using-Arduino-/
Basta acertar o tiro que vc fecha contato...
…
Adicionado por Eduardo ao 21:49 em 4 fevereiro 2019
cam, mais não tenho ideia de como fazer ou como começar. :(
Poderia ser tipo por posicionamento já estabelecido previamente tipo por ponto fixo na tela dai a estrela que seria móvel se movimentaria ate o ponto escolhido ou programado para ir ate ele , mais ai que esta como fazer isso ?????
Ou ate por um controle remoto para controlar a estrela ate o ponto fixo.
Ajudem ai gente
Desde já agradeço
…
Adicionado por Thiago Dias ao 21:19 em 23 junho 2015