um erro o qual o pino não ficava piscando:
if(results.value==0x9CB92){ //onde 9CB92 seria o botão do controle digitalWrite(6, HIGH); // aciona o relé
delay(600); // aguarda 6 milissegundos digitalWrite(6, LOW); // desativa o relé delay(600); // aguarda 6 milissegundos
}
mas invés de rodar tal função do começo como eu imaginava, apenas liga a lãmpada por 6 milissegundos e simplesmente desliga. Como deixar o pino 6 "piscando" até que eu desative com outro botão?????
sketch completa:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){ Serial.begin(9600); pinMode(6, OUTPUT); irrecv.enableIRIn(); // Start the receiver}
void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } if(results.value==0x490){ digitalWrite(6, HIGH); } if(results.value==0xC90){ digitalWrite(6, LOW); } if(results.value==0x9EB92){ digitalWrite(6, HIGH); } if(results.value==0x5EB92){ digitalWrite(6, LOW); } if(results.value==0xDEB92){ digitalWrite(6, HIGH); } if(results.value==0x3EB92){ digitalWrite(6, LOW); } if(results.value==0xD0B92){ digitalWrite(6, HIGH); delay(30000); digitalWrite(6, LOW); } if(results.value==0x4CB92){ digitalWrite(6, HIGH); delay(60000); digitalWrite(6, LOW); }
if(results.value==0x9CB92){ digitalWrite(6, HIGH); delay(600); digitalWrite(6, LOW); delay(600); } }…
Adicionado por Andrew Mendes ao 14:59 em 4 maio 2015
ramação, já fui novato, e te falo que quanto mais florido o código, maior o trabalho de assimilação do funcionamento do código e o que é necessário reter/relevar(isso confunde a cabeça de quem nunca viu um sketch)... Se o material é utilizado para aprendizado, deve-se aumentar a clareza do texto/código, o reference do arduino é um bom exemplo à seguir...
"Quanto a dar uma passo de cada vez, isso também já foi feito. Na verdade meu Dimmer funciona perfeitamente somente com o potenciomentro. Porém eu estava exatamente querendo incrementá-lo deixado de fazer o controle do brilho da lâmpada através de um simples potenciometro e utilizar um controle remoto.
Não tenho nenhum problema de interrupção com esse meu código quando o utilizo apenas com o potenciometro, porém quando acrescento o IR começo a ter, haja visto que a biblioteca do IR também utiliza de interrupções, e é exatamente a solução desse caso que estou buscando aqui na Comunidade."
Hugney, esse sketch(do potenciometro) foi ajustado até funcionar, como uma obra de arte, qualquer outro acréscimo de material(codigo) tira a funcionalidade dele... ex: Se você fizesse uso do millis para contar tempo, ele seria mais longo que o normal pois o delay do de interrupções impede o tratamento de outras/consecutivas interrupções, como a do millis a cada 1ms.
Esse sketch que postou nem compila por causa de resquícios de testes e variaveis indicando outros usos e coisas como esta:
valorCodigo = resultados.value, DEC; //armazena o código
PS. Não se ofenda como a forma que expus a minha opinião, o que falo é tudo que funcionou/funciona comigo, e o mesmo talvez não será verdade para outros. Com relação ao tom da conversa, que o computador torna rispida e impessoal, para mim seria uma conversa numa mesa de bar com um chopinho do lado :)
…
Adicionado por fabio henrique ao 10:08 em 11 fevereiro 2013
lver a parte de potência), através de teclas que não tem função do seu controle remoto e também através de dois botões.
Através destes dois controles, conseguimos aumentar e diminuir a intensidade da lâmpada.
Apaguei os códigos que fui postando para não ficar o post confuso, e com a grande ajuda de nosso Garagista Rui Viana e com montagens simultâneas chegamos neste código:
#include <NECIRrcv.h> #define InfraVermelho 12 //pino recebe IR int ledRed = 5; //pino acionamento de led int incPin = 3; int decPin = 4; int val = 0; int incButton = LOW; int decButton = LOW; float intensidadeRed = 0; unsigned long capturaCodigo = 0; NECIRrcv ir (InfraVermelho); void setup() { Serial.begin(9600); ir.begin(); pinMode(incPin, INPUT); pinMode(decPin, INPUT); pinMode (ledRed, OUTPUT); analogWrite(ledRed, intensidadeRed); } void loop() { analogWrite(ledRed, intensidadeRed); while (ir.available()) { capturaCodigo = ir.read() ; Serial.println(capturaCodigo); //Diminui a intensidade do led // tecla - VOL if (capturaCodigo == 4044250759) { if (intensidadeRed > 0) { intensidadeRed = intensidadeRed - 25.5; delay(200); } } //Aumenta a intensidade do led // tecla + VOL if (capturaCodigo == 4060962439) { if (intensidadeRed < 255) { intensidadeRed = intensidadeRed + 25.5; delay(200); } } } incButton = digitalRead(incPin); if (incButton == HIGH) { if (intensidadeRed > 0) { intensidadeRed = intensidadeRed - 25.5; delay(200); } } decButton = digitalRead(decPin); if (decButton == HIGH) { if (intensidadeRed < 255) { intensidadeRed = intensidadeRed + 25.5; delay(200); } } }
Façam bom proveito e espero ter ajudado com esta contribuição.
Claro se não fosse pela ajuda do Rui Viana acho que não conseguiria chegar até aqui o final.
Lembrem que para poder funcionar no controle de você copiar este sketch, carregar no Arduino, abrir o serial monitor, pulsar as duas teclas que deseja aumentar e diminuir, pegar os dois códigos gerados, copiar e colar logo após o capturaCodigo, carregar novamente o Arduino com a alteração e testá-lo.
Abraços e boa noite a todos,
José Antonio …
remote.h>#include <avr/interrupt.h>
#define VolDOWN 2640488535 //codigo tecla controle remoto#define VolUP 2640455895 //codigo tecla controle remoto
int rIR = 11; //pino do sensor IRint triac = 13; //pino Triacunsigned int maxTimer = 65235; //65535 - (150e-6 / ( 62.5e-9 x 8 )) / o tempo para estouro do timer em 150us / comeco semiciclounsigned int minTimer = 48575; //65535 - ((8.33e-3+150e-6) / (62.5e-9 x 8)) // tempo para estouro do timer 150us +8.33ms // final semciclo unsigned int incremento = 150; //o dimmer terá uma resolução de 65235 - 48575 : mais de 16000 pontos, com incremento de 150 resulta em 120 niveis de luz...volatile unsigned int timer = minTimer; //quando a variavel será utilizada em interupções, deve ser "volatile" para garantir a leitura correta... IRrecv receptorIr(rIR);decode_results resultados;
void setup()//configurações iniciais...{ Serial.begin(19200); receptorIr.enableIRIn(); pinMode(triac, OUTPUT);pinMode(2, INPUT);//pino passagem zerodigitalWrite(2,HIGH);//liga o pullupdigitalWrite(triac,LOW);digitalWrite(rIR, HIGH);attachInterrupt(0, passagemzero, RISING); TCCR1B=0; //timer desligadoTIMSK1 = 1<< TOIE1;//habilita interrupção por estouro do timer1}
void loop(){if (receptorIr.decode(&resultados)) //se houve uma decodificação válida{switch (resultados.value) {//testa as teclas...case VolUP:timer +=incremento;//aumenta o valor de inicio do contador, diminuindo o tempo para estouro do timer, indo em direção ao inicio do semicicloif (timer > maxTimer){//proteção para o timer não sair da faixa timer = maxTimer;}Serial.print(millis());Serial.println(".VolUP");break;case VolDOWN: timer -=incremento;//diminui o valor de inicio do contador, aumentando o tempo para estouro d timer, indo em direção ao fim do semiciclo...
if (timer < minTimer){timer = minTimer;}Serial.print(millis());Serial.println(".VolDOWN");break;default:break; }delay(30);//atrasa o recebimento de novos comandos tornando mais suave o dimmerreceptorIr.resume(); }}
void passagemzero(){digitalWrite(triac,LOW);//desliga triacTCNT1=timer;//carrega contadorTCCR1B=2; //liga timer com prescaler de 8}
ISR(TIMER1_OVF_vect)//interrupção do timer1 {TCCR1B=0; // desliga timer1digitalWrite(triac,HIGH); //liga triac}
…
Adicionado por fabio henrique ao 10:46 em 11 fevereiro 2013
. O melhor é saber o que se está fazendo e o que precisa ser feito.
No seu caso, não adiantou seu "chute" de colocar o "UNKNOW" na frente do "send", porque não existe um função (ou "método") na biblioteca do IR que tenha o nome "sendUNKNOW". Existe para outros como vc viu (Samsung, NEC, Sony, etc). Mas não existe para o "UNKNOW".
A lista que vc me mostrou na figura, eu já tinha visto, e se trata de uma função que permite exibir a identificação do Fabricante do código que foi identificado quando vc usa o Arduino para "clonar" os códigos de um Controle Remoto qualquer. Apenas isso. Mas se ele não conseguir identificar quem é o Fabricante, então ele informa que é "UNKNOW", indicando que não identificou.
Espero ter esclarecido.
Abrçs
Elcids
…
Adicionado por Elcids Chagas ao 23:34 em 11 junho 2019
mação residencial/qualquer_coisa ;) até para aumentar a renda familiar...
Conheço bem de sistemas, consigo programar tudo o que eu quero, embora desenvolvimento não é a minha área, porém, tenho dificuldades na parte elétrica e eletrônica.
Eu tenho algumas dúvidas que gostaria de compartilhar com vocês:
- Como automatizar uma casa, sem quebrar paredes, utilizando o arduino/raspberryPi?
*Eu sei que existem equipamentos que trabalham sem fio, mas, quais são? Como integrá-los para que controlem uma lâmpada por exemplo?
- Conhecem alguém que já trabalhe com automação baseada em arduino / raspberryPi?
- Estou querendo comprar alguns sensores, camera, aqueles centralizadores de IR para acabar com os controles remotos, para criar um ambiente de teste em casa. O que acham? Alguma dica?
- Acham viável vender uma solução de automação baseada em arduino?
- Basicamente eu gostaria de vender uma solução de controle das lampadas, talvez portas, camera e midia center, tudo isso com acesso externo e, criar umas rotinas que permita ao cliente agendar tarefas, como acender luzes e abrir cortinas automaticamente na data e hora configurada por ele. O que acham?
Muito obrigado à todos pela atenção. …
ara a conclusão:
O cenário é o seguinte:
Temos dois botões (inc e dec) onde pulsando cada um deles você consegue incrementar ou decrementar (em outras palavras) aumentar ou diminuir a intensidade da luz (ventilador) etc.
Também temos aquelas teclas sem quase função de nossos controles remoto. Utilizarei duas delas para também fazer o aumento e a diminuição da intensidade da carga. Em resumo postarei primeiro o Hardware:
Agora o sketch:
#include <Arduino.h> #include <NECIRrcv.h>#define InfraVermelho 9int ledPin = 3;int incPin = 4;int decPin = 5;int val=0;int incButton = LOW;int decButton = LOW;
unsigned long capturaCodigo = 0;NECIRrcv ir (InfraVermelho);
void setup() { pinMode(incPin, INPUT); pinMode(decPin, INPUT); pinMode(ledPin, OUTPUT); analogWrite(ledPin, 0); Serial.begin(9600);}
void loop() { incButton = digitalRead(incPin); decButton = digitalRead(decPin); if (incButton == HIGH) { if(val==255)val=255; else val++; } if(decButton == HIGH){ if(val==0)val=0;else val=val-1;}Serial.println(val);delay(120);analogWrite(ledPin, val);}
Desda maneira os botões já estáo funcionando.
Falta dizer ao programa que ao pulsar tal tecla do teclado vc também incrementa/decrementa a carga.
Peguei um trecho de um outro sketch, mais não tenho conhecimentos para tal:
while (ir.available()) { capturaCodigo = ir.read() ; // Captura toda entrada de dados que seja infra vermelho e armazena na variavel capturaCodigo do tipo long. Serial.println(capturaCodigo); // Imprime no serial monitor o valor capturado ja declado na variavel. if (capturaCodigo == 3442630279)
Desde já aguardo comentários,
Obrigado.
Na conclusão montarei o projeto para controle de lâmpadas de led dimerizáveis (já em funcionamento com dimmer manual, 4 ligadas em paralelo). Ai postarei o projeto completo.
…
RDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif
#define IRPIN 0 // PINO QUE O RECPTOR IR ESTÁ CONECTADO
IRremoteir(IRPIN) ;
// Define Váriaveis para inteiros
int x;
int y;
int aux;
float tempC;
int tempPin = 0; //ENTRADA ANALÓGICA
void setup() // Programa para Definr Pinos como Saídas
{
Serial.begin(9600) ;
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Serial.println("RECEBENDO DADOS...") ; // Usar Serial Monitor para verificar sinal de controle
ir.begin() ;
} // Fim do setup
void loop() // Programa para Executar
{
unsigned long ircode ;
while (ir.available())
{
ircode = ir.read() ;
Serial.println(ircode) ;
if ( ircode == 4278190335 ) // Se receber sinal Carro anda à frente
{
digitalWrite(8, HIGH);
delay(10);
digitalWrite(9, HIGH);
delay(10);
}
if ( ircode == 3826974975) // Se receber sinal Carro vira à direita
{
digitalWrite(8, LOW);
delay(10);
digitalWrite(9, HIGH);
delay(10);
}
if ( ircode == 3893821695) // Se receber sinal Carro vira à esquerda
{
digitalWrite(8, HIGH);
delay(10);
digitalWrite(9, LOW);
delay(10);
}
if ( ircode == 3994091775 ) // Se receber sinal Carro para
{
digitalWrite(8, LOW);
delay(10);
digitalWrite(9, LOW);
delay(10);
}
} // Fim do while para Verificação
} // Fim do programa…
Adicionado por Amanda PP ao 18:05 em 13 agosto 2014
em uma "torneira"...
Enfim, facilitou.
Umas ideias para fertilizar sua mente...:
1) Colocar um emissor laser (pode até improvisar com um chaveirinho laser, só não use no máximo que ele não aguenta em uso continuo) de um lado e um fototransistor do outro lado vc tem um sensor.
2) idem anterior, mas melhorado.. Se vc colocar 2 barras espelhadas em paralelo de forma que o grão passe entre elas e injetar o laser em um pequeno grau vc consegue fazer o feixe ficar refletindo nas paredes até achar a saida (exige calibração mecanica). Para o espelho melhor usar laminas de inox polido (como uma faca).
3) Idem 1) mas inspirado nos sensores de gota dos injetores de soro hospitalar) Se vc usar essa "armadilha de luz só que com um circuito em realimentação em malha fechada vc pode usar até um led transmissor de infravermelho (como controle remoto) comum.
Essa montagem seria um operacional com:
entrada positiva) ligada numa referencia, por ex 2,5V e
negativa) ligada a um sensor ir (do tipo TIL) com um resistor a VCC.
Saida) Aciona um LED emissor de IR (TIL tb).
Isso é um amplificador que tem sua realimentação passando por dentro do tubo de forma otica.
Quando algo passa pelo tubo abala o equilibrio. A realção do circuito é modificar a intensidade do emissor de IR para compensar (atingir novamente o equilibrio). Assim sem filtro algum certamente será uma reação abrupta (provavelmente vai ter que ser diminuida com um capacitor ou resistor entre o acionamento do IR e o receptor IR.
Esse sinal que alimenta o led se alterando amplamente quando passa o grão é o que vc quer.. Usando um CI com 2 operacionais (gosto do TL082. mas tem um monte) vc pode usar o outro comparando o sinal imediato com uma media do sinal (liga numa entrada via resistor e no outro pino via resistor e capacitor). Para não ser muito sensível vc precisa desequilibrar um pouco esse comparador, com um resistor ao gnd (so atuar mediante minimo de perturbação). Aqui vale um trimpot de ajuste de sensibilidade.
Deu pra entender ??????????????????????
Se não posso desenhar o circuito.. Mas é um sensor caseiro de grande utilidade... Inova pela realimentação Otica. (apesar de ser um circuito mto antigo);
Defeitos: Se vc usar "à luz do sol" poderá ter problemas como acionamento ao passar por uma sombra. Vc vai precisar abrigar o sensor. Se a luz for constante não atrapalha.
4) sensor de impacto) Se vc colocar uma barreira mecanica, como uma folha de aluminio, de tal forma que o milho bata e espirre para frente vai gerar um "pá" caracteristico. Isso pode ser captado por um sensor piezoeletrico (se o milho cair sobre o sensor) ou com um microfone, que pode ser colocaro preso a folha de aluminio. Microfones são muito sensiveis a impactos sobre a mesa em que estão apoiados. Se sua máquina não for muito barulhenta funciona melhor.
5) Sensor capacitivo) Os sensores capacitivos são bons para achar oleaginoas. Não sei se 1 grão seria suficiente para acionar, mas vc pode consultar um fabricante...
…
Adicionado por Eduardo ao 10:19 em 15 novembro 2012