Vai al contenuto
PLC Forum


azionare arduino con telecomando tv


claudiomagic

Messaggi consigliati

Buongiorno, apro questa nuova discussione in quanto mi  ero accodato ad un'altra un pò di tempo fa.

Premetto che ho installato un sistema con arduino che attraverso il telecomando tv mi apre la porta di casa. 

Il tutto funziona bene ,il problema sorge dopo un giorno o due , e cioè va in tilt .

Per ripristinare devo staccare l'alimentazione per poi farlo ripartire . posso intervenire sullo sketch

 

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
String stato;

void setup()
{
  pinMode(2, OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    
    if((results.value == 0x20DF4EB1) ){
     
    stato = "acceso1";
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    
    }
    else if (results.value == 1) {
    stato = "acceso2";
    digitalWrite(3, HIGH);
    }
    else if (results.value == 1) {
    stato = "acceso3";
    digitalWrite(4, HIGH);
    }
    else if (results.value == 1) { 
    stato = "mantieniacceso"; 
    }
    else {
    stato = "spento";
    };
    
    if(stato == "acceso1"){ 
    digitalWrite(2, HIGH);
    delay (400);
    digitalWrite(2, LOW);
    }
    else if (stato == "acceso2") {
    digitalWrite(3, HIGH);
    }
    else if (stato == "acceso3") {
    digitalWrite(4, HIGH);
    }
    else if (stato == "mantieniacceso") { 
    }
    else if (stato == "spento") {
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);  
    };    
    
    
    
    irrecv.resume(); // Receive the next value
  }
}
 

Link al commento
Condividi su altri siti


38 minuti fa, claudiomagic scrisse:

Il tutto funziona bene ,il problema sorge dopo un giorno o due , e cioè va in tilt .

Per ripristinare devo staccare l'alimentazione per poi farlo ripartire . posso intervenire sullo sketch

 

E' tipico.

Arduino ha una robustezza EMC (detti volgarmente disturbi elettric) praticamente nulla.

Leggi i miei messaggi alla fine di questa discussione, trovi le indicazioni per eliminare questi problemi.

 

Per intervnire solo software devi farti un watch dog e, se scade, andare a forzare il reset.

Altro metodo è farsi una specie di CCZ  (computer crazy) in modo hardware.

Questo è un mezzo molto sicuro.

Basta scrivere "HIGH" un'uscita all'inizio di loop(), prima istruzione; come ultima istruzione di loop() si scrivere "LOW" sulla medesima uscita. In questo modo si ottiene un impulso che rimane alto per il tempo di secuzione di loop  e va basso per il breve tempo che intercorre prima della ripetizione.

Qusti impulsi si usano per caricare un condensatore ed avere in questo modo un livello di tensione qausi costante se viene continuamente rinfrescato dagli impulsi. Se il processore si blocca, l'uscita non cambia più di stato e la carica del condensatore crolla. Se paragoni questo segnale con un soglia, in un comparatore, avrai una commutazion con la quale comandi un reset Hw parallelando il pulsante di reset sulla scheda.

Questo è il modo più sicuro per ottenere una ripartnza certa in caso di blocco del procssore o di programma che va a  "ranocchie".

 

Però prima di questo bisogna intervenire sulle EMC lavorando sulle alimentazioni, sugli I/O e sui cablaggi, perchè questi blocchi non sono la malattia, ma il sintomo; quindi bisogna curare la malattia non i sintomi.

Link al commento
Condividi su altri siti

Oltre a quello che ha detto Livio, senza dubbio la causa più probabile dell'impallamento dell'Arduino, io toglierei quella String stato per sostituirla con un byte stato. Chiaramente ogni stato sarà indicato da un valore, es.  spento = 0, acceso1 = 1, etc. In genere è bene evitare la classe String, non ha una gestione della memoria efficiente, e su una MCU con 2K di RAM non ha molto senso.

 

Ciao, Ale.

Link al commento
Condividi su altri siti

1 ora fa, ilguargua scrisse:

io toglierei quella String stato per sostituirla con un byte stato.  ...........

 

 

Programmare senza sapere bene quello che si sta facendo è il problema tipico di alcuni utenti di arduino, dei alcuni così detti makers.

Ci sono anche fior di programmatori che hanno messo a punto librerie e funzioni notevolmnte ben fatte, ma sono una minoranza.

 

La facilità d'uso, la quantità di software e bliblioteche pronte all'uso, permette a chiunque di farsi qualch piccola automazione che, bene o male, funziona.

Spesso mancano le basi di circuitistica e di programmazione ed alla prima difficoltà....ci si ritrova nel guano sino alle orecchie.

 

Purtroppo lo stile di programmazione non è solo fine a se stesso, spesso è anche funzionale alla ......funzionalità del programma.

 

Con arduino sta avvenendo qullo che è avvenuto con i PLC, e che purtroppo continua ancora, ci sono in circolazione tanti programmi messi con la mazza, che per girarare girano, ma basta uno leggera brezza perchè il castello di carte crolli.

 

 

Comunque, per tornare al problema, meglio fare un passo alla volta. Meglio mettere lo Hw nelle condizioni ottimali, magari con qualche precauzione di troppo, piuttosto che con qualche deficienza. Soprattutto se non si dispone della strumentazione adatta ad effetture dei test specifici.

Una volta che la base è solida si procede con l'ottimizzazione.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...