In questo progetto interfacciamo LDR con il microcontrollore ATMEGA8, e con questo possiamo misurare l'INTENSITÀ DELLA LUCE nell'area. In ATMEGA8, utilizzeremo la funzione ADC a 10 bit (conversione da analogico a digitale) per misurare l'intensità della luce.
Am LDR è un trasduttore che cambia la sua resistenza quando la LUCE cade sulla sua superficie cambia. Il sensore LDR è disponibile in diverse dimensioni e forme.
Gli LDR sono realizzati con materiali semiconduttori per consentire loro di avere le loro proprietà fotosensibili. Ci sono molti tipi di materiali utilizzati, ma uno che è popolare è SOLFURO DI CADMIO (CdS). Questi LDRs o PHOTO REISTORS lavoro sul principio di “Photo conducibilità”. Quello che dice questo principio è che ogni volta che la luce cade sulla superficie dell'LDR (in questo caso) la conduttanza dell'elemento aumenta o in altre parole la resistenza dell'LDR diminuisce quando la luce cade sulla superficie dell'LDR. Questa proprietà della diminuzione della resistenza per l'LDR è ottenuta perché è una proprietà del materiale semiconduttore utilizzato sulla superficie. Gli LDR sono utilizzati la maggior parte delle volte per rilevare la presenza di luce o per misurare l'intensità della luce.
Esistono diversi tipi di LDR come mostrato nella figura sopra e ognuno ha specifiche diverse. Tipicamente un LDR avrà 1 MΩ-2 MΩ al buio totale, 10-20 KΩ a 10 LUX, 2-5 KΩ a 100 LUX. La tipica resistenza al grafico LUX di un LDR è mostrata in figura.
Come mostrato nella figura sopra, la resistenza tra i due contatti del sensore diminuisce con l'intensità della luce o la conduttanza tra due contatti del sensore aumenta.
Ora per convertire questa variazione di resistenza in variazione di tensione, useremo il circuito divisore di tensione. In questa rete resistiva abbiamo una resistenza costante e l'altra resistenza variabile. Come mostrato in figura, R1 qui è una resistenza costante e R2 è il sensore FORZA che funge da resistenza.
Il punto medio del ramo viene preso per la misurazione. Quando la resistenza R2 cambia, la Vout cambia con essa linearmente. Quindi con questo abbiamo una tensione che cambia con il peso.
La cosa importante da notare qui è che l'input preso dal controller per la conversione ADC è di appena 50µAmp. Questo effetto di carico del partitore di tensione basato sulla resistenza è importante poiché la corrente assorbita da Vout del partitore di tensione aumenta la percentuale di errore aumenta, per ora non dobbiamo preoccuparci dell'effetto di carico.
Quello che faremo qui è prendere due resistori e formare un circuito divisore in modo che per un 25Volt Vin, otteniamo un 5Volt Vout. Quindi tutto ciò che dobbiamo fare è moltiplicare il valore Vout per "5" nel programma per ottenere la tensione di ingresso reale.
Componenti
Hardware: ATMEGA8, alimentatore (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), condensatore 100uF, condensatore 100nF (5 pezzi), resistenza 10KΩ, LDR (Light Dependent Resistor).
Software: Atmel studio 6.1, progisp o flash magic.
Schema del circuito e spiegazione del funzionamento
Nel circuito PORTD di ATMEGA8 è collegato alla porta dati LCD. In 16 * 2 LCD ci sono 16 pin in tutto se c'è una retroilluminazione, se non c'è retroilluminazione ci saranno 14 pin. Si può alimentare o lasciare i perni della retroilluminazione. Ora nei 14 pin ci sono 8 pin dati (7-14 o D0-D7), 2 pin di alimentazione (1 & 2 o VSS & VDD o gnd & + 5v), 3 ° pin per il controllo del contrasto (VEE-controlla quanto dovrebbero essere spessi i caratteri mostrato) e 3 pin di controllo (RS & RW & E)
Nel circuito, puoi osservare che ho preso solo due pin di controllo. Il bit di contrasto e READ / WRITE non sono usati spesso, quindi possono essere cortocircuitati a massa. Questo mette l'LCD nel più alto contrasto e modalità di lettura. Abbiamo solo bisogno di controllare i pin ENABLE e RS per inviare caratteri e dati di conseguenza.
I collegamenti per LCD sono riportati di seguito:
PIN1 o VSS ------------------ terra
PIN2 o VDD o VCC ------------ Alimentazione + 5v
PIN3 o VEE --------------- terra (offre il massimo contrasto migliore per un principiante)
PIN4 o RS (selezione registro) --------------- PB0 di uC
PIN5 o RW (lettura / scrittura) ----------------- terra (mette il display LCD in modalità di lettura facilita la comunicazione per l'utente)
PIN6 o E (Abilita) ------------------- PB1 di uC
PIN7 o D0 ----------------------------- PD0 di uC
PIN8 o D1 ----------------------------- PD1 di uC
PIN9 o D2 ----------------------------- PD2 di uC
PIN10 o D3 ----------------------------- PD3 di uC
PIN11 o D4 ----------------------------- PD4 di uC
PIN12 o D5 ----------------------------- PD5 di uC
PIN13 o D6 ----------------------------- PD6 di uC
PIN14 o D7 ----------------------------- PD7 di uC
Nel circuito si può vedere che abbiamo utilizzato la comunicazione a 8 bit (D0-D7) tuttavia non è obbligatoria, possiamo usare la comunicazione a 4 bit (D4-D7) ma con la comunicazione a 4 bit il programma diventa un po 'complesso. Quindi dalla semplice osservazione dalla tabella sopra stiamo collegando 10 pin dell'LCD al controller in cui 8 pin sono pin dati e 2 pin per il controllo.
La tensione ai capi di R2 non è completamente lineare; sarà rumoroso. Per filtrare il rumore, i condensatori sono posizionati su ciascun resistore nel circuito del divisore come mostrato in figura.
In ATMEGA8, possiamo fornire un ingresso analogico a uno qualsiasi dei QUATTRO canali di PORTC, non importa quale canale scegliamo poiché sono tutti uguali. Sceglieremo il canale 0 o PIN0 di PORTC. In ATMEGA8, l'ADC ha una risoluzione di 10 bit, quindi il controller può rilevare una variazione minima di Vref / 2 ^ 10, quindi se la tensione di riferimento è 5V otteniamo un incremento dell'uscita digitale per ogni 5/2 ^ 10 = 5mV. Quindi per ogni incremento di 5mV in ingresso avremo un incremento di uno in uscita digitale.
Ora dobbiamo impostare il registro di ADC in base ai seguenti termini:
1. Prima di tutto dobbiamo abilitare la funzione ADC in ADC.
2. Qui si otterrà una tensione di ingresso massima per la conversione ADC è + 5V. Quindi possiamo impostare il valore massimo o il riferimento dell'ADC a 5V.
3. Il controller ha una funzione di conversione del trigger che significa che la conversione dell'ADC avviene solo dopo un trigger esterno, poiché non vogliamo che sia necessario impostare i registri affinché l'ADC funzioni in modalità di esecuzione libera continua.
4. Per qualsiasi ADC, la frequenza di conversione (da valore analogico a valore digitale) e la precisione dell'uscita digitale sono inversamente proporzionali. Quindi, per una migliore precisione dell'uscita digitale, dobbiamo scegliere una frequenza inferiore. Per il normale orologio ADC stiamo impostando la prevendita dell'ADC al valore massimo (2). Dato che stiamo utilizzando l'orologio interno di 1 MHZ, l'orologio dell'ADC sarà (1000000/2).
Queste sono le uniche quattro cose che dobbiamo sapere per iniziare con ADC.
Tutte le quattro funzioni di cui sopra sono impostate da due registri,
ROSSO (ADEN): questo bit deve essere impostato per abilitare la funzione ADC di ATMEGA.
BLU (REFS1, REFS0): Questi due bit vengono utilizzati per impostare la tensione di riferimento (o la tensione di ingresso massima che daremo). Dato che vogliamo avere una tensione di riferimento di 5V, REFS0 dovrebbe essere impostato, dalla tabella.
GIALLO (ADFR): questo bit deve essere impostato affinché l'ADC funzioni continuamente (modalità di funzionamento libero).
ROSA (MUX0-MUX3): questi quattro bit servono per indicare il canale di ingresso. Poiché utilizzeremo ADC0 o PIN0, non è necessario impostare alcun bit come da tabella.
MARRONE (ADPS0-ADPS2): questi tre bit servono per impostare il prescalar per ADC. Dato che stiamo usando un prescalar di 2, dobbiamo impostare un bit.
VERDE SCURO (ADSC): questo bit consente all'ADC di avviare la conversione. Questo bit può essere disabilitato nel programma quando è necessario interrompere la conversione.
Quindi con la resistenza di LDR sullo schermo LCD 16x2, possiamo abbinarlo al grafico LUX per ottenere l'intensità della luce.