I det här projektet ska vi gränssnitt LDR med ATMEGA8 mikrokontroller, och med detta kan vi mäta ljusintensitet i området. I ATMEGA8 ska vi använda 10bit ADC (Analog till Digital Conversion) -funktion för att mäta ljusintensiteten.
Am LDR är en givare som ändrar sitt motstånd när LIGHT faller på dess yta förändras. LDR-sensor finns i olika storlekar och former.
LDR är gjorda av halvledarmaterial för att de ska ha sina ljuskänsliga egenskaper. Det finns många typer av material som används, men ett som är populärt är CADMIUM SULPHIDE (CdS). Dessa LDR: er eller FOTOREISTORER arbetar på principen "Fotokonduktivitet". Vad den här principen säger är närhelst ljus faller på ytan av LDR (i det här fallet) ökar konduktansen hos elementet eller med andra ord minskar motståndet från LDR när ljuset faller på ytan av LDR. Denna egenskap hos minskningen av motstånd för LDR uppnås eftersom den är en egenskap hos halvledarmaterial som används på ytan. LDR används oftast för att detektera närvaro av ljus eller för att mäta ljusintensiteten.
Det finns olika typer av LDR som visas i figuren ovan och alla har olika specifikationer. Vanligtvis har en LDR 1MΩ-2MΩ vid totalt mörker, 10-20KΩ vid 10 LUX, 2-5KΩ vid 100 LUX. Det typiska motståndet mot LUX-graf för en LDR visas i figur.
Som visas i figuren ovan minskar motståndet mellan sensorns två kontakter med ljusintensiteten eller så ökar konduktansen mellan sensorns två kontakter.
Nu för att konvertera denna förändring i motstånd mot spänningsförändringar, kommer vi att använda spänningsdelarkrets. I detta resistiva nätverk har vi ett konstant motstånd och ett annat variabelt motstånd. Som visas i figur är R1 här ett konstant motstånd och R2 är FORCE-sensor som fungerar som ett motstånd.
Grenens mittpunkt tas till mätning. När motstånd R2 ändras ändras Vout linjärt med det. Så med detta har vi en spänning som ändras med vikten.
Nu är det viktigt att notera att ingången från styrenheten för ADC-konvertering är så låg som 50 µAmp. Denna belastningseffekt av motståndsbaserad spänningsdelare är viktig eftersom strömmen från Vout av spänningsdelaren ökar felprocentandelen, för nu behöver vi inte oroa oss för belastningseffekten.
Vad vi ska göra här är att vi ska ta två motstånd och bilda en delarkrets så att vi för en 25 volt Vin får en 5 volt volt. Så allt vi behöver göra är att multiplicera Vout-värdet med "5" i programmet för att få den verkliga ingångsspänningen.
Komponenter
Hårdvara: ATMEGA8, strömförsörjning (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF kondensator, 100nF kondensator (5 delar), 10KΩ motstånd, LDR (ljusberoende motstånd).
Programvara: Atmel studio 6.1, progisp eller flash magi.
Kretsschema och arbetsförklaring
I kretsen är PORTD på ATMEGA8 ansluten till dataport LCD. I 16 * 2 LCD finns det 16 stift överallt om det finns en bakgrundsbelysning, om det inte finns något bakgrundsbelysning kommer det att finnas 14 stift. Man kan driva eller lämna bakljuset. Nu i de 14 stiften finns 8 datastift (7-14 eller D0-D7), 2 effektmatningsstiften (1 & 2 eller VSS & VDD eller GND & + 5v), 3 : e stift för kontrastreglering (VEE-styr hur tjock tecknen bör vara visas) och 3 kontrollstift (RS & RW & E)
I kretsen kan du se att jag bara har tagit två kontrollstift. Kontrastbiten och LÄS / SKRIV inte ofta så att de kan kortslutas till marken. Detta sätter LCD i högsta kontrast och läsläge. Vi behöver bara kontrollera ENABLE- och RS-stift för att skicka tecken och data i enlighet därmed.
De anslutningar för LCD anges nedan:
PIN1 eller VSS ------------------ jord
PIN2 eller VDD eller VCC ------------ + 5v ström
PIN3 eller VEE --------------- mark (ger maximal kontrast bäst för en nybörjare)
PIN4 eller RS (Registrera val) --------------- PB0 för uC
PIN5 eller RW (Läs / skriv) ----------------- mark (sätter LCD i läsläge underlättar kommunikationen för användaren)
PIN6 eller E (Aktivera) ------------------- PB1 för uC
PIN7 eller D0 ----------------------------- PD0 för uC
PIN8 eller D1 ----------------------------- PD1 för uC
PIN9 eller D2 ---------------------------- PD2 för uC
PIN10 eller D3 ----------------------------- PD3 för uC
PIN11 eller D4 ----------------------------- PD4 för uC
PIN12 eller D5 ---------------------------- PD5 för uC
PIN13 eller D6 ----------------------------- PD6 för uC
PIN14 eller D7 ----------------------------- PD7 för uC
I kretsen kan du se att vi har använt 8-bitars kommunikation (D0-D7) men detta är inte obligatoriskt, vi kan använda 4-bitars kommunikation (D4-D7) men med 4-bitars kommunikationsprogram blir det lite komplext. Så från enbart observation från ovanstående tabell ansluter vi 10 stift LCD till styrenhet där 8 stift är datapinnar och 2 stift för kontroll.
Spänningen över R2 är inte helt linjär; det blir en högljudd. För att filtrera bort är bruskondensatorerna placerade över varje motstånd i delarkretsen som visas i figuren.
I ATMEGA8 kan vi ge analog ingång till någon av de fyra PORTC-kanalerna, det spelar ingen roll vilken kanal vi väljer eftersom alla är desamma. Vi ska välja kanal 0 eller PIN0 för PORTC. I ATMEGA8 har ADC 10 bitars upplösning, så att styrenheten kan upptäcka en minsta förändring av Vref / 2 ^ 10, så om referensspänningen är 5V får vi en digital utgångsinkrement för varje 5/2 ^ 10 = 5mV. Så för varje 5mV-steg i ingången kommer vi att öka en på digital utgång.
Nu måste vi ställa in ADC-registret baserat på följande villkor:
1. Först och främst måste vi aktivera ADC-funktionen i ADC.
2. Här kommer att få en maximal ingångsspänning för ADC-omvandling är + 5V. Så vi kan ställa in maximalt värde eller referens för ADC till 5V.
3. Styrenheten har en utlösningsomvandlingsfunktion som innebär att ADC-omvandling endast sker efter en extern utlösare, eftersom vi inte vill att vi behöver ställa in registren för att ADC ska kunna köras i kontinuerligt frilöpande läge.
4. För varje ADC är omvandlingsfrekvensen (analogt värde till digitalt värde) och noggrannheten för digital utgång omvänt proportionell. Så för bättre noggrannhet för digital utgång måste vi välja lägre frekvens. För normal ADC-klocka ställer vi in förförsäljningen av ADC till maximalt värde (2). Eftersom vi använder den interna klockan på 1MHZ kommer klockan till ADC att vara (1000000/2).
Det här är de enda fyra sakerna vi behöver veta för att komma igång med ADC.
Alla ovanstående fyra funktioner är inställda av två register,
RÖD (ADEN): Denna bit måste ställas in för att aktivera ADC-funktionen i ATMEGA.
BLÅ (REFS1, REFS0): Dessa två bitar används för att ställa in referensspänningen (eller max ingångsspänningen vi ska ge). Eftersom vi vill ha referensspänning 5V, bör REFS0 ställas in enligt tabellen.
GUL (ADFR): Denna bit måste ställas in för att ADC ska kunna köras kontinuerligt (frilöpande läge).
PINK (MUX0-MUX3): Dessa fyra bitar är för att berätta ingångskanalen. Eftersom vi ska använda ADC0 eller PIN0 behöver vi inte ställa in några bitar som i tabellen.
BRUN (ADPS0-ADPS2): dessa tre bitar är för att ställa in prescalar för ADC. Eftersom vi använder en prescalar på 2 måste vi ställa in en bit.
MÖRK GRÖN (ADSC): denna bituppsättning för att ADC ska starta omvandlingen. Denna bit kan inaktiveras i programmet när vi behöver stoppa konverteringen.
Så med motstånd från LDR på 16x2 LCD-skärmen kan vi matcha det med LUX-graf för att få ljusintensiteten.