Muro di Roomba con Arduino Nano

In questa pagina presento e descrivo il progetto del muro di Roomba con un Arduino Nano e una manciata di componenti.

Telecomando Samsung

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);
          }
  }