- ADC0804 og Raspberry Pi:
- LM35 Temperatursensor:
- Nødvendige komponenter:
- Krets og arbeidsforklaring:
- Programmeringsforklaring:
Vi har for det meste dekket alle de grunnleggende komponentene som grensesnittet med Raspberry Pi i vår Raspberry Pi Tutorial Series. Vi har dekket alle opplæringene på en enkel og detaljert måte, slik at alle, enten han har jobbet med Raspberry Pi eller ikke, lett kan lære av denne serien. Og etter å ha gått gjennom alle opplæringene, vil du kunne bygge noen høynivåprosjekter ved hjelp av Raspberry Pi.
Så her designer vi den første applikasjonen basert på de tidligere veiledningene. Den første grunnleggende applikasjonen er en leseromstemperatur av Raspberry Pi. Og du kan overvåke målingene på datamaskinen.
Som diskutert i tidligere veiledninger, er det ingen ADC-kanaler gitt internt i Raspberry Pi. Så hvis vi ønsker å grense noen analoge sensorer, trenger vi en ADC-konverteringsenhet. Og i en av veiledningene våre har vi grensesnitt ADC0804-brikke til Raspberry Pi for å lese en analog verdi. Så gå gjennom det før du bygger dette romtemperaturtermometeret.
ADC0804 og Raspberry Pi:
ADC0804 er en brikke designet for å konvertere analogt signal til 8-bits digitale data. Denne brikken er en av de populære seriene til ADC. Det er en 8bit konverteringsenhet, så vi har verdier eller 0 til 255 verdier. Oppløsningen på denne brikken endres basert på referansespenningen vi velger, vi vil snakke mer om det senere. Nedenfor er Pinout av ADC0804:
En annen viktig ting her er at ADC0804 opererer på 5V, og det gir utgang i 5V logisk signal. I 8-pin utgang (som representerer 8bits) gir hver pin + 5V utgang for å representere logikk'1 '. Så problemet er at PI-logikken er på + 3.3v, så du kan ikke gi + 5V-logikk til + 3.3V GPIO-pinnen på PI. Hvis du gir + 5V til en hvilken som helst GPIO-pin av PI, blir kortet skadet.
Så for å trappe ned logikknivået fra + 5V, vil vi bruke spenningsdelerkrets. Vi har diskutert Voltage Divider Circuit tidligere undersøkt det for ytterligere avklaring. Det vi skal gjøre er, vi bruker to motstander for å dele + 5V-logikk i 2 * 2,5V-logikk. Så etter divisjon vil vi gi + 2.5v logikk til PI. Så når logikk '1' presenteres av ADC0804, vil vi se + 2.5V på PI GPIO Pin, i stedet for + 5V.
LM35 Temperatursensor:
Nå for å lese temperaturen i rommet trenger vi en sensor. Her skal vi bruke LM35 temperatursensor. Temperaturen måles vanligvis i “Celsius” eller “Fahrenheit”. “LM35” -sensoren gir utgang i grad Celsius.
Som vist i figuren, er LM35 en tre-pinners transistorlignende enhet. Pinnene er nummerert som, PIN1 = Vcc - Strøm (koblet til + 5V)
PIN2 = signal eller utgang (koblet til ADC-brikke)
PIN3 = bakken (koblet til bakken)
Denne sensoren gir variabel spenning ved utgangen, basert på temperatur. For hver + 1 celsius temperaturøkning vil det være + 10 mV høyere spenning ved utgangsstiften. Så hvis temperaturen er 0◦ celsius, vil utgangen fra sensoren være 0V, hvis temperaturen er 10◦ celsius, vil sensorens utgang være + 100mV, hvis temperaturen er 25◦ celsius, vil utgangen fra sensoren være + 250mV.
Nødvendige komponenter:
Her bruker vi Raspberry Pi 2 Model B med Raspbian Jessie OS. Alle de grunnleggende maskinvare- og programvarekravene er tidligere diskutert, du kan slå opp i Raspberry Pi Introduksjon, annet enn det vi trenger:
- Koble pinner
- 1KΩ motstand (17 deler)
- 10K pott
- 0,1 µF kondensator
- 100 µF kondensator
- 1000 µF kondensator
- ADC0804 IC
- LM35 Temperatursensor
- Brødtavle
Krets og arbeidsforklaring:
Tilkoblingene som er gjort for å koble bringebær til ADC0804 og LM35, er vist i kretsskjemaet nedenfor.
LM35-utgangen har mange spenningssvingninger; så en 100uF kondensator brukes til å jevne ut utgangen, som vist på figuren.
ADC har alltid mye støy, denne støyen kan i stor grad påvirke ytelsen, så vi bruker 0.1uF kondensator for støyfiltrering. Uten dette vil det være store svingninger ved produksjonen.
Brikken fungerer på RC (Resistor-Capacitor) oscillatorklokke. Som vist i kretsskjemaet , danner C2 og R20 en klokke. Den viktige tingen å huske her er at kondensatoren C2 kan endres til en lavere verdi for høyere hastighet for ADC-konvertering. Men med høyere hastighet vil det være redusert nøyaktighet. Så hvis applikasjonen krever høyere nøyaktighet, velger du kondensatoren med høyere verdi og for høyere hastighet velger du kondensatoren med lavere verdi.
Som tidligere fortalt gir LM35 + 10mV for hver celsius. Maksimal temperatur som kan måles med LM35 er 150 ºC. Så vi vil ha maksimalt 1,5V på LM35 utgangsterminalen. Men standard referansespenning for ADC0804 er + 5V. Så hvis vi bruker denne referanseverdien, vil oppløsningen til utgangen være lav fordi vi bruker maksimalt (5 / 1,5) 34% av det digitale utgangsområdet.
Heldigvis har ADC0804 en justerbar Vref-pin (PIN9) som vist, pin-diagrammet ovenfor. Så vi vil sette Vref på brikken til + 2V. For å stille inn Vref + 2V, må vi gi en spenning på + 1V (VREF / 2) ved PIN9. Her bruker vi 10K pot for å justere spenningen ved PIN9 til + 1V. Bruk voltmeteret for å få nøyaktig spenning.
Vi har tidligere brukt LM35 temperatursensor til å lese romtemperaturen med Arduino og med AVR Microcontroller. Sjekk også fuktighets- og temperaturmåling ved hjelp av Arduino
Programmeringsforklaring:
Når alt er koblet til i henhold til kretsskjemaet, kan vi slå PI på for å skrive programmet i PYHTON.
Vi vil snakke om få kommandoer som vi skal bruke i PYHTON-programmet, Vi skal importere GPIO-filer fra biblioteket, under funksjonen gjør det mulig for oss å programmere GPIO-pinner på PI. Vi omdøper også "GPIO" til "IO", så når vi vil referere til GPIO-pinner i programmet, bruker vi ordet "IO".
importer RPi.GPIO som IO
Noen ganger, når GPIO-pinnene, som vi prøver å bruke, gjør noen andre funksjoner. I så fall vil vi motta advarsler mens vi kjører programmet. Kommandoen nedenfor forteller PI å ignorere advarslene og fortsette med programmet.
IO.setwarnings (False)
Vi kan henvise GPIO-pinnene til PI, enten med pin-nummer om bord eller etter deres funksjonsnummer. Som 'PIN 29' på tavlen er 'GPIO5'. Så vi forteller her at enten skal vi representere nålen her med '29' eller '5'.
IO.setmode (IO.BCM)
Vi setter inn 8 pinner som inngangspinner. Vi vil oppdage 8 bit ADC-data ved hjelp av disse pinnene.
IO.oppsett (4, IO.IN) IO.oppsett (17, IO.IN) IO.oppsett (27, IO.IN) IO.oppsett (22, IO.IN) IO.oppsett (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
I tilfelle tilstanden i selene er sant, vil utsagnene i løkken utføres en gang. Så hvis GPIO-pin 19 går høyt, vil utsagnene i IF-sløyfen utføres en gang. Hvis GPIO-pinnen 19 ikke går høyt, vil ikke utsagnene i IF-sløyfen bli utført.
hvis (IO.input (19) == True):
Nedenfor brukes kommandoen som evig sløyfe, med denne kommandoen vil setningene i denne sløyfen utføres kontinuerlig.
Mens 1:
Ytterligere forklaring på koden er gitt i kodeseksjonen nedenfor.
Etter å ha skrevet programmet er det på tide å utføre det. Før vi utfører programmet, kan vi snakke om hva som skjer i kretsen som et sammendrag. Den første LM35-sensoren oppdager romtemperaturen og gir en analog spenning ved utgangen. Denne variable spenningen representerer temperaturen lineært med + 10mV per ºC. Dette signalet mates til ADC0804-brikken, denne brikken konverterer den analoge verdien til digital verdi med 255/200 = 1,275 teller per 10mv eller 1,275 teller for 1 grad. Denne tellingen tas inn av PI GPIO. Programmet konverterer tellingen til temperaturverdi og viser den på skjermen. Den typiske temperaturen lest av PI er vist nedenfor, Derfor har vi denne Raspberry Pi temperaturovervåker.