Buongiorno, sono Federico, ho 21 anni e studio design. Premetto di essere un neofita sia con Arduino sia con il mondo della programmazione in generale. Un paio di mesi fa comprai un Arduino starter kit e imparai le basi di Arduino per avvicinarmi al mondo della programmazione.
Ora sto cercando di usare arduino per clonare un telecomando che comanda il movimento di un letto trasformabile e lo fa alzare o abbassare.
In pratica dovrei generare un codice che ciclicamente (ogni 15/30 min) faccia alzare o abbassare il letto. Con il telecomando originale tenete conto che il tasto va tenuto premuto per tutta la durata del movimento, quindi per 30 secondi circa.
Clonando il telecomando originale tramite un modulo ricevitore a infrarossi ho ottenuto i seguenti dati:
Encoding : NEC
Code : A55AA05F (32 bits)
unsigned int data = 0xA55AA05F
i rawData che da quel che ho capito sono più complessi da usare e gestire
Ora, ho provato con il seguente codice, tuttavia funziona per i primi 3/4 secondi poi il movimento si blocca, sembra che il codice diventi inefficace.
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 10; i++)
{
irsend.sendNEC(0xA55AA05F,32); // discesa
}
delay(100000);
for (int i = 0; i < 10; i++)
{
irsend.sendNEC(0xA55A20DF,32); // salita
delay(100);
}
delay(10000);
}
Potrebbe essere che, siccome il tasto va tenuto premuto, dopo un tot di tempo il telecomando genera un codice diverso e per questo nel mio caso si interrompe la comunicazione?
Sapreste aiutarmi come risolvere questo problema?
Grazie in anticipo a tutti.
Buongiorno e benvenuto nella sezione Italiana del forum,
cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Buongiorno, mi scusi pensavo fosse sufficiente una breve presentazione nel post.
Ho provveduto a una presentazione più completa ed esaustiva nell'apposita discussione.
Buona giornata
Purtroppo, contrariamente a quanto possa sembra, l'analisi dei segnali IR generati da vari telecomandi è molto meno banale di quanto si pensi ... il consiglio che io do sempre a chi vuole lavorare con certe cose è di investire qualche decina di US$ ed acquistare QUESTO prodotto ...
Io mi sono costruito un piccolo shield con i due ricevitori IR consigliati (con due frequenze portanti diverse), ho dedicato un semplice Arduino UNO al codice che viene fornito ed ho uno strumento di analisi dei segnali IR che non fallisce un colpo.
Ricordo quando a suo tempo ho dovuto catturare i dati da un telecomando di un decoder IPTV ... con AnalysIR ho ottenuto i due RAW che mi servivano, gli ho fatto direttamente generare il codice da copiare nel codice Arduino per usare la IRremote e ... in due minuti ho avuto il sistema funzionante. Senza AnalysIR avrei sprecato un'infinità di tempo e, quasi sicuramente, non sarei neanche riuscito a scoprire che la portante NON era a 38KHz ma a 36KHz!
Considera AnalysIR, come più volte ho scritto su questo forum, è uno strumento di analisi che ti permette di esaminare esattamente cosa un telecomando trasmette, controllare i periodi, confrontare segnali, ecc. ecc.
Volendo, puoi scaricati la versione di demo, che contiene tutta la documentazione e studiarla molto bene perché ... non è una cosa proprio banale.
Esatto, il tempo di attesa di 2 min era una prova per vedere se tutto funzionava, poi sarà di 15/30 min . So che la funzione delay non è la migliore essendo una funzione bloccante però mi risultava la più semplice da usare.
Il problema che ho adesso è comunque la trasmissione della discesa, perchè ho anche provato ad aumentare le i e portarle anche a 1000, però sempre dopo 3/4 s il comando viene interrotto.
Grazie comunque per la disponibilità.
Grazie per la disponibilità.
Sì esatto anche io pensavo fosse più semplice clonare un telecomando , tuttavia ho fatto una prova con un telecomando Samsung e riesco a far accendere e/o spegnere la tv senza problemi.
Il problema principale sta probabilmente nel fatto che il telecomando va tenuto premuto e quindi i segnali diventano più complessi.
Per ora la ringrazio, proverò con lo strumento che mi ha consigliato.
Buona giornata
Nota che ci sono i due while () e i due delay (attesa) che irrigidiscono tutto, ma così intanto vediamo se con le pause di 500ms (che potrai provare a diminuire a 300ms, per esempio) funziona. In questo modo manda dei treni di impulsi leggermente spaziati fra un treno e l'altro per una durata di 30 secondi perché quasi sicuramente il telecomando, anche tenendo un pulsante premuto, fa delle pause fra un treno e l'altro di impulsi.
In realtà la cosa può essere ben più complicata ...
... se aveste fatto una piccola ricerca avreste, ad esempio, trovato questa vecchia discussione (da QUI in poi) in cui "docdoc" ha scoperto l'arcano solo grazie ad AnalysIR perché, con la sola IRremote era praticamente impossibile capirlo ...
Salve, grazie ora riesco a farlo funzionare completando un ciclo (impostando il delay a 300). Tuttavia eseguendo il ciclo svariate volte ho notato che talvolta si blocca e non è totalmente fluido il movimento. Si ferma in un punto come se non ricevesse più il segnale e dopo qualche secondo riparte (con 500 di delay certe volte si bloccava e non ripartiva più).
Questo problema potrebbe essere dato dal ricevitore, dato che ogni tanto (anche se meno spesso) si blocca anche con il telecomando?
Magari aggiungere un piccolo delay nel ciclo for ? Magari delay(10), per non sparare 10 send troppo veloci al ricevitore senza una minima pausa. Tanto per provare
Quello dovrebbe essere un pacchetto corrispondente a una singola pressione del pulsante. Normalmente il codice viene inviato più volte ogni volta che si preme un pulsante su un telecomando. Probabilmente viene fatto perché il microcontrollore dell'apparato ricevente non riceve un interrupt dal ricevitore IR, ma lo controlla solo a ogni giro di loop, per esempio ogni 10, 20, 50ms: se rileva un codice in arrivo, si prepara per prendere il successivo dall'inizio.
Ricevuto un comando, magari il ricevitore ha bisogno di pochi millesimi per mettersi in ascolto del prossimo comando. L'OP dice che anche con il telecomando a volte si impalla il ricevitore.
Grazie a te per la precisione e la correttezza con cui ti esprimi senza fretta (anche se proprio alla fine ti è sfuggito un punto in mezzo alla frase! ). E' facile comprenderti e darti la risposta che desideri.
Figurati! Alla fine il programma funziona perfettamente con i pari a 8 e un delay di 200.
Grazie che mi hai risolto questo problema senza dover passare necessariamente da costosi e complicati strumenti come mi hanno detto. Tante volte dire "non posso farlo perchè non ho gli strumenti" è semplicemente una nostra scorciatoia mentale che ci poniamo per non voler pensare davvero alla soluzione.
Grazie ancora di tutto!
... costosi ??? ... non hai idea di cosa sono i "costosi strumenti" e, ti assicuro, t'è andata bene che il problema era banale, ma ... con i segnali IR senza i "costosi strumenti" (da 20 US$) ... difficilmente fai qualche cosa.