In dit project gaan we LDR koppelen aan ATMEGA8 microcontroller, en hiermee kunnen we LICHTINTENSITEIT in het gebied meten. In ATMEGA8 gaan we de 10bit ADC-functie (analoog naar digitaal conversie) gebruiken om de lichtintensiteit te meten.
Am LDR is een transducer die zijn weerstand verandert wanneer LICHT op zijn oppervlak valt. LDR-sensor is verkrijgbaar in verschillende maten en vormen.
LDR's zijn gemaakt van halfgeleidermaterialen om hun lichtgevoelige eigenschappen te hebben. Er worden veel soorten materialen gebruikt, maar een die populair is, is CADMIUM SULPHIDE (CdS). Deze LDR's of PHOTO REISTORS werken volgens het principe van "Photo Conductivity". Wat dit principe nu zegt, is dat wanneer er licht op het oppervlak van de LDR valt (in dit geval) de geleiding van het element toeneemt of met andere woorden de weerstand van de LDR afneemt wanneer het licht op het oppervlak van de LDR valt. Deze eigenschap van de afname van de weerstand voor de LDR wordt bereikt omdat het een eigenschap is van halfgeleidermateriaal dat op het oppervlak wordt gebruikt. LDR wordt meestal gebruikt om de aanwezigheid van licht te detecteren of om de intensiteit van licht te meten.
Er zijn verschillende soorten LDR, zoals weergegeven in de bovenstaande afbeelding, en elk met verschillende specificaties. Gewoonlijk heeft een LDR 1MΩ-2MΩ bij totale duisternis, 10-20KΩ bij 10 LUX, 2-5KΩ bij 100 LUX. De typische weerstand tegen LUX-grafiek van een LDR wordt weergegeven in de afbeelding.
Zoals getoond in bovenstaande figuur, neemt de weerstand tussen de twee contacten van de sensor af met de lichtintensiteit of neemt de geleiding tussen twee contacten van de sensor toe.
Om deze verandering in weerstand om te zetten in verandering in spanning, gaan we een spanningsdelercircuit gebruiken. In dit resistieve netwerk hebben we een constante weerstand en een andere variabele weerstand. Zoals weergegeven in de afbeelding, is R1 hier een constante weerstand en is R2 een FORCE-sensor die als weerstand fungeert.
Het middelpunt van de tak wordt gemeten. Als weerstand R2 verandert, verandert de Vout lineair mee. Hiermee hebben we dus een spanning die verandert met het gewicht.
Het belangrijkste om hier op te merken is dat de input van de controller voor ADC-conversie zo laag is als 50 µAmp. Dit belastingseffect van een op weerstand gebaseerde spanningsdeler is belangrijk omdat de stroom die wordt getrokken uit Vuit van de spanningsdeler het foutpercentage verhoogt, voorlopig hoeven we ons geen zorgen te maken over het laadeffect.
Wat we hier gaan doen, is dat we twee weerstanden nemen en een verdeelcircuit vormen zodat we voor een Vin van 25 Volt een 5 Volt Vout krijgen. Dus alles wat we hoeven te doen is de Vout-waarde te vermenigvuldigen met "5" in het programma om de echte ingangsspanning te krijgen.
Componenten
Hardware: ATMEGA8, voeding (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF condensator, 100nF condensator (5 stuks), 10KΩ weerstand, LDR (Light Dependent Resistor).
Software: Atmel studio 6.1, progisp of flash magie.
Schakelschema en uitleg van het werk
In circuit is PORTD van ATMEGA8 verbonden met datapoort LCD. In 16 * 2 LCD zijn er in totaal 16 pinnen als er een achtergrondverlichting is, als er geen achtergrondverlichting is, zijn er 14 pinnen. Men kan de achterlichtpinnen van stroom voorzien of laten. Nu in de 14 pennen zijn er 8 datapennen (7-14 of D0-D7), 2 voedingspennen (1 & 2 of VSS en VDD en GND en + 5 V), 3 rd pin voor contrastregeling (VEE-bepaalt hoe dik de tekens moet afgebeeld) en 3 controlepennen (RS & RW & E)
In het circuit kun je zien dat ik maar twee controlepennen heb genomen. Het contrastbit en READ / WRITE worden niet vaak gebruikt, zodat ze kunnen worden kortgesloten naar aarde. Dit plaatst LCD in het hoogste contrast en leesmodus. We hoeven alleen de ENABLE- en RS-pinnen te bedienen om tekens en gegevens dienovereenkomstig te verzenden.
De aansluitingen voor LCD worden hieronder gegeven:
PIN1 of VSS ------------------ aarde
PIN2 of VDD of VCC ------------ + 5v voeding
PIN3 of VEE --------------- grond (geeft maximaal contrast het beste voor een beginner)
PIN4 of RS (Registerselectie) --------------- PB0 van uC
PIN5 of RW (lezen / schrijven) ----------------- grond (zet LCD in leesmodus vergemakkelijkt de communicatie voor de gebruiker)
PIN6 of E (inschakelen) ------------------- PB1 van uC
PIN7 of D0 ----------------------------- PD0 van uC
PIN8 of D1 ----------------------------- PD1 van uC
PIN9 of D2 ----------------------------- PD2 van uC
PIN10 of D3 ----------------------------- PD3 van uC
PIN11 of D4 ----------------------------- PD4 van uC
PIN12 of D5 ----------------------------- PD5 van uC
PIN13 of D6 ----------------------------- PD6 van uC
PIN14 of D7 ----------------------------- PD7 van uC
In het circuit kun je zien dat we 8bit communicatie hebben gebruikt (D0-D7) maar dit is niet verplicht, we kunnen 4bit communicatie gebruiken (D4-D7) maar met 4 bit wordt het communicatieprogramma een beetje ingewikkeld. Dus van louter observatie van bovenaf, verbinden we 10 pinnen van het LCD-scherm met de controller waarin 8 pinnen datapinnen zijn en 2 pinnen voor controle.
De spanning over R2 is niet volledig lineair; het zal luidruchtig zijn. Om de ruis eruit te filteren worden condensatoren over elke weerstand in het delercircuit geplaatst, zoals weergegeven in de afbeelding.
In ATMEGA8 kunnen we analoge invoer geven aan elk van de VIER kanalen van PORTC, het maakt niet uit welk kanaal we kiezen, want ze zijn allemaal hetzelfde. We gaan kanaal 0 of PIN0 van PORTC kiezen. In ATMEGA8 heeft de ADC een resolutie van 10 bits, dus de controller kan een minimale verandering van Vref / 2 ^ 10 detecteren, dus als de referentiespanning 5V is, krijgen we een digitale outputstap voor elke 5/2 ^ 10 = 5mV. Dus voor elke stap van 5mV in de ingang hebben we een toename van één bij digitale uitgang.
Nu moeten we het register van ADC instellen op basis van de volgende voorwaarden:
1. Allereerst moeten we de ADC-functie in ADC inschakelen.
2. Hier krijg je een maximale ingangsspanning voor ADC-conversie is + 5V. We kunnen dus de maximale waarde of referentie van ADC naar 5V instellen.
3. De controller heeft een trigger-conversiefunctie, wat betekent dat ADC-conversie alleen plaatsvindt na een externe trigger, aangezien we niet willen dat we de registers hoeven in te stellen om de ADC continu vrij te laten draaien.
4. Voor elke ADC zijn de conversiefrequentie (analoge waarde naar digitale waarde) en nauwkeurigheid van digitale uitvoer omgekeerd evenredig. Dus voor een betere nauwkeurigheid van de digitale uitvoer moeten we een lagere frequentie kiezen. Voor een normale ADC-klok stellen we de voorverkoop van ADC in op maximale waarde (2). Omdat we de interne klok van 1MHZ gebruiken, zal de klok van ADC (1000000/2) zijn.
Dit zijn de enige vier dingen die we moeten weten om aan de slag te gaan met ADC.
Alle bovenstaande vier functies worden ingesteld door twee registers,
ROOD (ADEN): Dit bit moet worden ingesteld om de ADC-functie van ATMEGA in te schakelen.
BLAUW (REFS1, REFS0): deze twee bits worden gebruikt om de referentiespanning in te stellen (of de maximale ingangsspanning die we gaan geven). Omdat we een referentiespanning van 5V willen, moet REFS0 worden ingesteld volgens de tabel.
GEEL (ADFR): deze bit moet worden ingesteld om de ADC continu te laten werken (vrijloopmodus).
PINK (MUX0-MUX3): deze vier bits zijn voor het aangeven van het ingangskanaal. Omdat we ADC0 of PIN0 gaan gebruiken, hoeven we geen bits in te stellen zoals bij de tabel.
BRUIN (ADPS0-ADPS2): deze drie bits zijn voor het instellen van de prescalar voor ADC. Omdat we een prescalar van 2 gebruiken, moeten we een bit instellen.
DONKERGROEN (ADSC): deze bit is ingesteld voor de ADC om de conversie te starten. Dit bit kan in het programma worden uitgeschakeld wanneer we de conversie moeten stoppen.
Dus met de weerstand van LDR op het 16x2 LCD-scherm, kunnen we het matchen met de LUX-grafiek om de lichtintensiteit te krijgen.