circuito IR /motore DC

buongiorno a tutti, eccomi con un altro problema da risolvere!
dunque ho provato IR signal,ed impiegato per l’accensione/spegnimento di un led.
e fino a qua tutto bene, ora volevo ampliare un po’ il progetto, facendo in modo di tramite l’IR signal di attivare un transistor che aveva sul 9V un motore collegato…

Bene quando vado a dare l ‘impulso IR tramite telecomando il transistor fa il suo lavoro ed accende il motore DC… il problema e’ che torna a spegnersi ed accendersi in sequenza direi quasi regolare…

ora:
-(l’unico indizio che sono riuscito a rintracciare tramite Serial.println() inserito nella condizione di verifica dell IR signal ricevuto e’ che l’accensione e spegnimento ripetuti senza l’impulso dal telecomando e’ dettato dalla verifica di quella condizione)pur non premendo nessun tasto, qualcuno ha idee?? ora vi allego lo sketch di seguito, al solito grazie in anticipo.

#include <IRremote.h>
int RECV_PIN = 3; // Pin di ricezione
IRrecv irrecv(RECV_PIN);//creazione istanza"irrecv" del 3 pin(int) collegato all IR reciver
int ledState=0,i;
decode_results bits;
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Inizializzo il ricevitore(da ora in poi irrecv)
  pinMode(10,OUTPUT);
  
}
 
void loop() 
{
  if (irrecv.decode(&bits)) 
  {
    
    ledState^=1;
    digitalWrite(10,ledState);
    Serial.println("ciao");
      Serial.println(i);
    irrecv.resume();
    i++;
  delay(1000);
   
  }
}

Non vedo nulla di errato!

Aggiungi un Serial.println(bits.value); cosi verifichi se il presunto valore ricevuto è uguale al primo o altro.

Nota:
io comunque mapperei un tasto del telecomando in modo da intercettare solo quello:

#define keyPower 0xNNNNNNNN
...
...
if (irrecv.decode(&bits)) {
  if (bits.value == keyPower ) {
    //fai quello che devi fare
  }
}
...

Federico66:
Non vedo nulla di errato!

Aggiungi un Serial.println(bits.value); cosi verifichi se il presunto valore ricevuto è uguale al primo o altro.

ok adesso provero' come dici a mappare il singolo tasto, anche perche' non mi garbava molto il fatto che il telecomando avesse diversi tasti e tutti avessero la stessa funzione..
pero' rimango con il problema principale, non riesco a pilotare il motore con L'IR reciver.. che delusione.. mi fa impazzaire tra l'altro che sul circuito del led, non da problemi...

iaccaro:
ok adesso provero' come dici a mappare il singolo tasto, anche perche' non mi garbava molto il fatto che il telecomando avesse diversi tasti e tutti avessero la stessa funzione..
pero' rimango con il problema principale, non riesco a pilotare il motore con L'IR reciver.. che delusione.. mi fa impazzaire tra l'altro che sul circuito del led, non da problemi...

sai dove posso trovare il codice di corrispondenza dei: tasti del telecomando --> IR signal??

Se googli "arduino telecomando infrarossi" ti si apre un mondo.

Ciao,
P.

Come dice pgiagno puoi trovare tantissimi esempi online :wink:

comunque:

iaccaro:
sai dove posso trovare il codice di corrispondenza dei: tasti del telecomando --> IR signal??

dall'ide, tra gli esempi della libreria IRremote (quella che stai usando), trovi almeno un paio di sketch Dump che ti permettono di decodificare i tasti.
Fai attenzione, alcuni telecomandi, in particolare quelli cinesi piccolini, ma non solo, se tieni premuto il tasto, sparano segnali come se non ci fosse un domani.

E per questo motivo, quando sei in lettura, conviene aspettare un po' ("usare millis"), prima di leggere nuovamente, per evitare di intercettare falsi segnali, ad esempio

#define keyPower 0xNNNNNNNN
#define keyPlay 0xNNNNNNNN
//...
unsigned long last = millis();
//...
void loop() {
  //ho usato 300 ms, ma valuta tu che delay può andar bene
  if (irrecv.decode(&bits) && millis() - last > 300) {
    switch (results.value) {
      case keyPower: {
        //fai quello che devi fare
        break;
      }
      case keyPlay: {
        //fai quello che devi fare
        break;
      }
    }
  }
}

iaccaro:
pero' rimango con il problema principale, non riesco a pilotare il motore con L'IR reciver.. che delusione..

Prima fai funzionare correttamente la procedura, poi passi alla gestione del motore, non avere fretta!

Federico

Federico66:
Come dice pgiagno puoi trovare tantissimi esempi online :wink:

comunque:

dall'ide, tra gli esempi della libreria IRremote (quella che stai usando), trovi almeno un paio di sketch Dump che ti permettono di decodificare i tasti.

hai ragione fede e' facile farsi prendere dalla fretta e dal panico grazie, sono ora ora sul trovare la maniera di definire il singolo tasto, fatto questo cerchero' di capire il problema principale, anche se non mi sono ancora venute nuove idee
Jari

iaccaro:
sono ora ora sul trovare la maniera di definire il singolo tasto…

Il primo che ho trovato, ma mi sembra ci sia tutto per iniziare
scopriamo gli infrarossi con Arduino

Federico

PS
Prima che il sommo moderatore ti bacchetti :slight_smile:
Ti consiglio di non quotare tutto il messaggio a cui ti riferisci, ma solo una piccola parte per far capire a cosa ti riferisci, come ho fatto io

Federico66:
Ti consiglio di non quotare tutto il messaggio a cui ti riferisci, ma solo una piccola parte per far capire a cosa ti riferisci, come ho fatto io

oh :slight_smile: grazie cosi magari e' meglio!
grande per il link devo saltarne fuori, ho esattamente uno di quei telecomandini piccoli cinesi di cui parlavi sopra.. e con una pressione leggermente prolungata, mi spara fuori lo stesso valore con tutti i tasti!! incredibile, adesso cerco di dargli l'intervallo con millis e vedo dove arrivo poi!
per ora grazie un sacco!

iaccaro:
ho esattamente uno di quei telecomandini piccoli cinesi di cui parlavi sopra..

Qualche settimana fa ho fatto dei test con uno di quelli, dopo 15 minuti l'ho lanciato dalla finestra e ho preso un vecchio telecomando della tv :slight_smile:

Federico

Federico66:
Qualche settimana fa ho fatto dei test con uno di quelli, dopo 15 minuti l'ho lanciato dalla finestra e ho preso un vecchio telecomando della tv :slight_smile:

Federico

ahahah cacchio allora funzionerebbe quello della tv?? e se ne avessi uno un po recente? penso sia IR comunque, ora provo

iaccaro:
ahahah cacchio allora funzionerebbe quello della tv??

direi proprio di si!

a meno che non usi tua sorella (per dire :slight_smile: ), come facevo più di qualche decennio fa, per farle premere i pulsanti del tv bn :slight_smile:

Federico

#include <IRremote.h>

int inPin = 3; // Pin di ricezione
IRrecv irrecv(inPin);//creazione istanza"irrecv" del 3 pin(int) collegato all IR reciver
int stato=0;
decode_results bits;
unsigned long inter=1500;


void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn(); // Inizializzo il ricevitore(da ora in poi irrecv)
  pinMode(10,OUTPUT);
  
}
 
void loop() 
{
  if (irrecv.decode(&bits)&&(millis()-inter)>0 ) 
  { inter=millis();
 Serial.println(bits.value,HEX);
 irrecv.resume();
}

domandone, non mi prende l’intervallo in millis, non dovrebbe funzionare cosi’?

Federico66:
tra gli esempi della libreria IRremote (quella che stai usando), trovi almeno un paio di sketch Dump che ti permettono di decodificare i tasti.
Fai attenzione, alcuni telecomandi, in particolare quelli cinesi piccolini, ma non solo, se tieni premuto il tasto, sparano segnali come se non ci fosse un domani.

credo il problema sia relativo a questa tua nota.
ho visto che il difetto nel progetto, sta nel fatto che come dici tu gli IR signal non sono per niente stabili, e nel momento in cui al transistor ce' collegato un led riceve un segnale pulitoe decodifica correttamente il pulsante premuto.
quando collegato c'e' il motorino:
1- motore Spento-->acceso(possiedo un segnale "pulito")
2-motore Acceso-->spento(il segnale ricevuto varia in HEX tra valori che non risultano normalmente premendo quel determinato tasto)

consigli su come eliminare il problema?

iaccaro:
quando collegato c'e' il motorino:...

Così, senza provare non riesco a dirti se il motore può interferire, mi pare comunque strano.
Se riesco domani provo, ma hai risto tutte le altre questioni? Decide, millis?

Federico

Federico66:
Così, senza provare non riesco a dirti se il motore può interferire, mi pare comunque strano.

e dai grande sul serio?? grazie!

Federico66:
Se riesco domani provo, ma hai risto tutte le altre questioni? Decide, millis?

sisi, ho risolto il millis per sostituzione del delay, ma che alla fine ho rimesso nell'ultimo sketch sempre nel tentativo di separare questi segnali corrotti da quelli successivi bloccando totalmente la lettura dello sketch..
(non sembra funzionare)
mentre per la specifica del singolo tasto ho fatto il decode(HEX)
e richiamo accensione/spegnimento tramite switch/case 0xNNNNNN
proprio quando sono giunto a questo punto ho realizzato che se tramite IR accendo il motore e stacco l'alimentazione esterna del motore(circuito transistor)
posso tranquillamente premere il tasto di spegnimento ed il segnale risulta pulito(stacca il transistor ma solo in quella condizione)

pgiagno:
Se googli "arduino telecomando infrarossi" ti si apre un mondo.

Ciao,
P.

ho notato solo ora:O tentero' anche quella strada, per ora sono perso.. troppi indizi da tutte le parti, che sembrano moltiplicare i problemi piuttosto che ridurli .. XD

Allora, ero curioso e ho appena provato usando il materiale dello starter kit:
motore dc, transistor, diodo, qualche led, un modulo IR receiver e naturalmente un telecomando

ho mappato un pulsante per avviare e stoppare il motore e accendere un led
funziona benissimo!

ti posto il codice, ma non é diverso da quello di prima...
... anzi no, forse prima ho scritto una sciocchezza... :slight_smile:

//...

void loop() {

  if (IR.decode(&results)) {
    if (millis() - last > 250) {
      switch (results.value) {
        case keyPlay: {
            state02 = !state02;
            digitalWrite(LED02_PIN, state02 ? HIGH : LOW);
            digitalWrite(DC_PIN, state02 ? HIGH : LOW);
            break;
          }
        //...
      }
    }
    last = millis();
    IR.resume();
  }
}

Federico

Federico66:
Allora, ero curioso e ho appena provato usando il materiale dello starter kit:
motore dc, transistor, diodo, qualche led, un modulo IR receiver e naturalmente un telecomando …

ciao fede! cavolo ormai ho girato in questo tipo di sketch abbastanza da capire il tuo, ne comprendo il funzionamento, ed il delay in millis non mi funzionava come me lo avevi proposto la prima volta, ma lo avevo rifatto in altra maniera… ora pero’ l’unico dubbio che mi viene e che sia una questione hardware… che transistor hai usato??
perche’ giuro che il mio progettino funziona se attaccato al transistor c’e’ il led, altrimenti arduino si inventa la lettura di segnali IR non esistenti…
e i casi sono due:
-ho mappato il tasto del telecomando–> e quando vado a premerlo il valore letto da arduino a ogni pressione e’ sballato e mi printa un codice diverso da quello messo nel controllo…(ma non "inventa"i segnali di sana pianta…)
-non ho mappato il tasto -->ed alla prima pressione l’arduino legge segnali regolarmente (tutti a diversi codici di frequenza)ma che comunque risultano segnali IR ed entrano ed escono dalla condizione:risultato il motore si accende e spegne ad intervalli…(ps. nel secondo caso una volta fatto partire col telecomando non ho piu’ nessuna funzione, come venisse schermato dall IR reciver)

>iaccaro: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce. Gli utenti da device "mobile" ringrazieranno per la cortesia :wink:

Guglielmo

P.S.: Ho troncato io il QUOTE qui sopra :slight_smile: