In questa pagina presento e descrivo il progetto del muro di Roomba con un Arduino Nano e una manciata di componenti.
Il muro si attiva premendo il tasto verde di un telecomando di un TV Samsung (giallo per la serie I di roomba e si disattiva premendo il tasto rosso o verde. Tuttavia è facile cambiare il tipo di telecomando semplicemente intercettando il segnale sulla stessa scheda e leggendo il codice sul Seriale dell’IDE Arduino.
Per motivi di consumo dopo 100 minuti il muro si spegne.
Questo tempo può essere modificato sostituento il valore del tempo in millisecondi o sostituendo dt=millis(); con dt=t1; in:
dt=millis();
if (dt-t1>6000000)
Quì c’e’ il codice pubblicato.
#include <IRremote.h>
#include <IRremoteInt.h>
IRsend irsend(3);
IRrecv irrecv(7);
decode_results results;
#define LEDGIALLO 9
#define LEDVERDE 10
boolean acceso=false;
String coloreled = "nessuno";
int a=0;
int tempo=1000;
unsigned long t1, dt;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irsend.enableIROut(38);
irrecv.blink13(true);
pinMode(LEDVERDE, OUTPUT);
pinMode(LEDGIALLO, OUTPUT);
digitalWrite(LEDGIALLO, LOW);
digitalWrite(LEDVERDE, LOW);
}
void loop(){
if (irrecv.decode(&results)){
//Serial.println(results.value);
for (a=0; a<68; a=a+1){
if (((int)results.rawbuf[a]>80) && ((int)results.rawbuf[a]<93)) {Serial.print("4500,");}
else if (((int)results.rawbuf[a]>8) && ((int)results.rawbuf[a]<14)) {Serial.print("600,");}
else if (((int)results.rawbuf[a]>30) && ((int)results.rawbuf[a]<40)) {Serial.print("1650,");}
else if (((int)results.rawbuf[a]>0) && ((int)results.rawbuf[a]<8)) {Serial.print("400,");}
else {Serial.print((int)results.rawbuf[a]);
Serial.print(",");}
}
Serial.println("-------");
irrecv.resume();
if (results.value==3772786903){
coloreled="verde";
digitalWrite(LEDVERDE, HIGH);
digitalWrite(LEDGIALLO, LOW);
delay (tempo);
digitalWrite(LEDVERDE, LOW);
delay (tempo);
digitalWrite(LEDVERDE, HIGH);
delay (tempo);
digitalWrite(LEDVERDE, LOW);
delay (tempo);
digitalWrite(LEDVERDE, HIGH);
delay (tempo);
delay (2000);
t1=millis();
results.value=1;}
else if (results.value==3772819543){
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDGIALLO, HIGH);
coloreled = "giallo";
delay (tempo);
digitalWrite(LEDGIALLO, LOW);
delay (tempo);
digitalWrite(LEDGIALLO, HIGH);
delay (tempo);
digitalWrite(LEDGIALLO, LOW);
delay (tempo);
digitalWrite(LEDGIALLO, HIGH);
delay (tempo);
delay (2000);
t1=millis();
results.value=1;}
else if (results.value==3772803223){
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDGIALLO, LOW);
coloreled = "nessuno";
delay (1000);
results.value=1;}
else if (results.value==3772790473){
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDGIALLO, LOW);
coloreled = "nessuno";
delay (1000);
results.value=1;}
}
dt=millis();
if (dt-t1>6000000){
coloreled="nessuno";
digitalWrite(LEDVERDE, LOW);
digitalWrite(LEDGIALLO, LOW);
}
if(coloreled=="verde"){
irsend.mark(1000);
irsend.space(1000);
}
if(coloreled=="giallo"){
irsend.mark(500);
irsend.space(7500);
}
}