Consiglio rottura barriera IR

Salve a tutti
Sto lavorando a questo codice per gestire una barriera ad infrarossi.
Ho creato una parte di sketch partendo da un po di materiale in rete,ma secondo l'autore questo sketch dovrebbe avvisare, con l'ultimo digitalRead della funzione letturaIR, la presenza o meno di un ostacolo.
A me pero il SerialMonitor restituisce sempre 0. In effetti quando davanti il fototransistor non ci sono ostacoli mi aspetto di vedere 1.
Dopodiche il mio intento era di creare una If e di far partire una allarme in caso di 0 restituito dalla funzione.
Secondo voi dove sbaglio?
Grazie mille

int readPin =22;
int triggerPin =8;
 
 int letturaIR (int readPin, int triggerPin);

void setup(){
  pinMode (8,OUTPUT);
  pinMode (22,INPUT);
  Serial.begin(9600);
}

void loop() {
  
  Serial.println(letturaIR(22,8));
  
  delay (100);
  
}

  int letturaIR (int readPin,int triggerPin){
    int halfPeriod =13;
    int cycles=38;
    int i;
    for (i=0; i <= cycles; i++) {
      digitalWrite (triggerPin, HIGH);
      delayMicroseconds (halfPeriod);
      digitalWrite (triggerPin,LOW);
      delayMicroseconds (halfPeriod-1);
    }
    return digitalRead (readPin);
  }

Volevo chiedervi senza aprire un altro post, in una precedente discussione ho letto alcune righe di codice di uno sketch che usava i timer.
Il codice è questo:

digitvoid setup()
{
 pinMode(11, OUTPUT);     
 OCR2A = 211;
 TCCR2A = 0b01000011; 
 TCCR2B = 0b00001001;
}

Ma giusto per sapere, il valore del registro OCR2A non deve essere in formato esadecimale?

nel frattempo attende sempre vostri consigli su post sopra

Grazie a tutti

Decimale, esadecimale, ottale, binario ... sono SOLO delle forme di rappresentazione di un numero ... alla fine quello che conta sono i vari bit, che poi tu mi dica 10 in decimale, 0x0A in esadecimale, 012 in ottale o 00001010 in binario è esattamente la stessa cosa.

Guglielmo

P.S.: metti il link al sensore IR che stai usando ...

Perfetto ,buono a sapersi, pensavo ci fosse una sintassi da rispettare altrimenti il valore non verrebbe accettato.

Il sensore l'ho comprato su amazon, ho chiesto il datasheet al fornitore ma ancora non ha risposto, e non si capisce che sigla abbia, ho visto solo che nelle recensioni alcuni acquirenti lo usano con Arduino.
Che tipo posso acquistare per andare sul sicuro altrimenti?

Aprire una nuova discussione è gratis e permette di:

  • non intercalare le risposte, migliorando la comprensibilità della discussione
  • ritrovare in futuro gli argomenti in base al titolo.

Ribadisco, metti il link e vediamo di che si tratta ...

Mah ... dipende dall'applicazione, ad esempio io uso QUESTI a riflessione che sono ottimi e banali da usare.

Ma se devi creare una "barriera" perché non usi da un lato un LED laser (es. uno di quelli per i puntatori) e dall'altro un normale fototransistor ?

Guglielmo

eccolo:
https://www.amazon.it/LAOMAO-diodi-infrarossi-emissione-ricezione/dp/B00EFOTJZE/ref=sr_1_1_sspa?keywords=laomao+diodi&qid=1644833293&sr=8-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyVzdMQkZUTTJPUlAmZW5jcnlwdGVkSWQ9QTA3NjQ3ODEyT09MODNSMURUT0FDJmVuY3J5cHRlZEFkSWQ9QTAyMzMyMDYySUFOQ0FaNlpHWkIwJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==

Terrò a mente!

o, ancora più brevemente:

:slight_smile:

... proprio per complicarsi la vita ... quella è roba per i telecomandi e richiede una portante ed una modulazione. A te serve un NORMALE LED emettitore nel campo del IR ed un fototransistor.

Ma poi, ripeto, che ci devi fare nella pratica? Un modellino o pensi di realizzare una cosa "vera" da usare in casa?

Guglielmo

Eh, sì: i ricevitori hanno all'interno un filtro a 38kHz, quindi il segnale emesso dai LED deve essere modulato a quella frequenza.

Il "normale" fototransistor può essere di quelli neri, sensibili solo agli infrarossi, inserito in un tubetto nero.

@alerm : toh ... guarda QUI cosa ho trovato :smiley:

Guglielmo

In pratica dovrei realizzare una barriera che in caso di passaggio di un qualunque oggetto viene interrotta attivando un apertura cancello.
Mi serve solo per un progetto di tesina.
La distanza tra il trasmettitore ed il ricevitore dovrà essere di circa 1,5 metri.
Avevo pensato alla soluzione IR prendendo spunto dalle fotocellule dei cancelli elettrici, e dai telecomandi delle TV che riescono a dialogare anche da distanze di 2, 3 metri..

... che funzionano in TUTT'ALTRO modo inviando, come ti ho detto, una modulazione su un segnale portante. Lascia stare i LED trasmettitori per telecomando ed usa normali LED IR ... hai visto l'articolo di cui ti ho dato il link?

Guglielmo

Sembra sia riuscito con l'aiuto di un potenziometro a settare il diodo IR ed il ricevitore, ad una frequenza corretta, ed ora sembra funzionare tutto. Entrambi ora sembrano interagire correttamente.
Devo solo verificare fino a che distanza dialogano!

Si gli ho visti però l'unico neo è che arrivano ad un massimo di 70 cm..
Per me quella distanza non va bene!

Allego quanto fatto finora

#include <Servo.h>
Servo rcservo;

int readPin =22;
int triggerPin =8;
int Led1=26;
 
 int letturaIR (int readPin, int triggerPin);

void setup(){
  pinMode (8,OUTPUT);
  pinMode (22,INPUT);
  pinMode (24,INPUT);
  pinMode (26,OUTPUT);
  rcservo.attach(2);
  Serial.begin(9600);
}

void loop() {
  
  Serial.print("letturaIR ");
  Serial.println(letturaIR(22,8));
  delay (100);
 
  if (letturaIR(22,8)==0){
    digitalWrite (Led1,LOW);
  }
  
  else {
    
    digitalWrite (Led1,HIGH);
   /* if (Led1==HIGH){
      for (int f=0;f<=90;f++){
        rcservo.write(f);
        delay (20);*/
   }
}

  int letturaIR (int readPin,int triggerPin){
    int halfPeriod =13;
    int cycles=38;
    int i;
    for (i=0; i <= cycles; i++) {
      digitalWrite (triggerPin, HIGH);
      delayMicroseconds (halfPeriod);
      digitalWrite (triggerPin,LOW);
      delayMicroseconds (halfPeriod-1);
    }
    return digitalRead (readPin);
  }

La mia domanda ora è:
Come faccio ad inserire un ciclo for per un servo che apra e chiuda il cancello alla interruzione della barriera, senza dover allungare il tempo del loop?
Ho provato ad inserirlo cosi ma non mi fa funzionare nulla, è come se mi cambiasse i tempi e i livelli di tutti gli ingressi ed uscite. Appena stacco il servo dal pin 2 funziona tutto nuovamente!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.