Pages: 1 2 [3]   Go Down
Author Topic: Esperimenti con una fotocellula  (Read 6752 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono andato in cerca dei componenti, ma nella mia cittadina purtroppo non li tengono perchè considerati troppo "di nicchia" smiley-confuse

Mi sa che aspetterò che esca la nuova shield wifi e ordinerò su internet tutto assieme, mi secca pagare 11 euro di spedizione per pochi euro di sensore..
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Riesumo come promesso questo vecchio topic perchè finalmente mi sono procurato i componenti smiley-cool
Il ricevitore non è proprio un TSOP, ma è un integrato equivalente, cambia solo la posizione dei tre piedini. Come emettitore ho usato un normale led rosso a media intensità, per gli esperimenti da vicino funziona.

Come primi test ho usato la libreria IR remote per arduino. Puntando il telecomando della tv sul ricevitore la libreria mi fornisce il codice del tasto premuto, e puntando il led rosso che uso come emettitore sulla tv sono riuscito a spegnerla (non vi dico l'emozione smiley). Poi ho effettuato una prova di comunicazione tra i due componenti (collegati a due diversi arduino) ed è andata a buon fine.

Testato l'hardware, ho iniziato con il mio primo programmino, non vorrei fare tutto soltanto con le librerie senza capire niente. Il programma è il più semplice possibile, quando l'integrato riceve qualche segnale dal ricevitore, cioè quando il pin digitale dove è collegato il ricevitore passa a HIGH, il programma scrive tramite seriale "ricevuto". Il problema è che anche senza niente collegato al pin 11 (intendo proprio la board senza niente nel connettore) a video vedo continuamente la scritta "ricevuto" che appare in continuo riempiendomi pagine e pagine di pormpt. Un problema di circuiteria lo escluderei, dato che con la libreria funzionava tutto perfattamente. Visto che il codice è molto breve mi permetto di postarlo, magari qualche anima buona avrà voglia di aiutarmi smiley
Code:
const int IRPin =  11;   // pin dove è collegato il piedino OUT del ricevitore

int IRState = 0;    // variabile per leggere lo stato del pin a cui è collegato i lricevitere IR

void setup() { 
  //inizializza comuicazione seriale
  Serial.begin(9600);
  // Inizializza come pin di input il pin dove è collegato il ricevitore IR
  pinMode(IRPin, INPUT);     
}

void loop(){
  // read the state of the IR value:
  IRState = digitalRead(IRPin);

  // check if the IR out is HIGH:
  if (IRState == HIGH) {     
    // Stampa a video il messaggio di avvenuta ricezione 
    Serial.println("Ricevuto"); 
  }
}

Veramente non capisco, magari sarà una stupidaggine di errore, ma il programma l'ho fatto copiando l'esempio "Button" del compilatore di arduino, quindi non mi spiego cosa.

Ringrazio in anticipo per l'aiuto, Lorenzo
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sto facendo degli esperimenti, quindi un piccolo aggiornamento:
Se attacco il pin 11 a massa finalmente non ricevo scritte a terminale. Anche staccando il cafo tutto bene, ma se tocco la parte in rame con le dita schizza subito HIGH. Sembra un problema di disturbi, ma come può essere che prima con la libreria non si presentava? :s
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Sto facendo degli esperimenti, quindi un piccolo aggiornamento:
Se attacco il pin 11 a massa finalmente non ricevo scritte a terminale. Anche staccando il cafo tutto bene, ma se tocco la parte in rame con le dita schizza subito HIGH. Sembra un problema di disturbi, ma come può essere che prima con la libreria non si presentava? :s

Tutti i pin del micro sono (se posti in Input) ad alta impedenza di ingresso, per questo è sempre consigliabile chidere i pin non usati a GND.
Nel tuo caso, la libreria probabilmente imposta il pin in Input ma con pull-up che fissa il pin ad High e gestisce la logica inversa.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono col cell e non riesco a leggere tutto il codice, ma mi sbilancio, metti una resistenza da 10k verso gnd sul pin del sensore. fai un pulldown
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Problema risolto, anche se sinceramente non ho capito esattamente come :s
Come primo tentativo ho provato con la resistenza da 10kohm e non ha funzionato.
Poi ho provato con il tester per vedere a quanti volt è effettivamente l'uscita dell'integrato, e me la segnava sempre a 4.5 volt circa, come se stesse sempre ricevendo smiley-eek
Infine ho modificato il programma, in modo che segnalasse soltanto le variazioni di stato da LOW ad HIGH del pin collegato al ricevitore e...funziona! (cioè la scritta "ricevuto" appare soltanto quando invio l'impulso IR)

Ecco il nuovo codice:
Code:
//Il programma invia un messaggio a video quando c'è una variazione di stato da LOW a HIGH sul pin IRPin
const int IRPin =  11;   // pin dove è collegato il piedino OUT del ricevitore

int IRState = 0;    // variabile per leggere lo stato del pin a cui è collegato i lricevitere IR
int statoPrecedente=0; // memorizza lo stato di IRPin trovato dalla lettura precedente

void setup() { 
  //inizializza comuicazione seriale
  Serial.begin(9600);
  // Inizializza come pin di input il pin dove è collegato il ricevitore IR
  pinMode(IRPin, INPUT);     
}

void loop(){
  // read the state of the IR value:
  IRState = digitalRead(IRPin);

  // Controlla se c'è un cambio di stato da 0 a +5 sul pin IRPin
  if (IRState == HIGH && statoPrecedente==0) {     
    // Stampa a video il messaggio di avvenuta ricezione 
    Serial.println("Ricevuto");
    statoPrecedente=1;
  }
  // Se IRPin è allo stato Low cambia lo stato precedente
  if (IRState == LOW && statoPrecedente == 1){
    statoPrecedente = 0;
  }
}

Ed ecco l'impiantino di prova: (i piedini del ricevitore sono OUT GND +5V da sinistra a destra)


Secondo voi da cosa potrebbe dipendere il fatto che ora tutto funziona?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho cantato vittroia troppo presto smiley-sad
Ad un'analisi più approfondita ho riscontrato che non appena apro il panello di comunicazione seriale del computer appare una singola scritta "ricevuto" quindi qualcosa che non va c'è. Poi però la scritta appare di nuovo soltanto quando uso effettivamente il telecomando, quindi non è poi tanto grave, solo che non mi capacito del perchè accada.
Ho provato anche in questo caso con la resistenza da 10Kohm tra il piedino OUT e la massa, ma con qualla la scritta "ricevuto" non appare nemmeno col telecomando.
Logged

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dicci che sensore stai usando
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Newbie
*
Karma: 0
Posts: 24
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il sensore si chiama IR38DM, e questa è la sua pagina: http://www.futurashop.it/allegato/8220-IR38DM.asp?L2=CORRELATI&L1=8220-K8050&L3=&cd=8220-IR38DM&nVt=
Il datasheet sembra non esistere, ma cercando su google dicono cha sia uguale al ben più noto TSOP1738, e che ciò che cambia sia soltanto la piedinatura.

Ho fatto un'altro test:
-un arduino (emittente) invia un segnale continuo a 38KHz
-l'arduino ricevitore, con lo stesso circuito di prima, riceve il segnale e mostra a video (10 volte al secondo)lo stato del pin dove è collegato il ricevitore. Se il pin è a +5 il programma segna 1, mentre se è a GND il programma segna 0.
Avviato il test appena apro il serial monitor ricevo una serie continua di 1, poi metto il dito davanti alla fotocellula tenendola coperta e continuo a ricevere 1. Solo nel momento in cui tolgo il dito appare un singolo 0, e poi continua la fila di 1.

Chissà che funzionamento bizzarro cha ha questo sensore :s
Logged

Pages: 1 2 [3]   Go Up
Jump to: