- ADC0804 och Raspberry Pi:
- LM35 temperatursensor:
- Komponenter som krävs:
- Krets- och arbetsförklaring:
- Programmeringsförklaring:
Vi har mest täckt alla grundläggande komponenter som gränssnitt med Raspberry Pi i vår Raspberry Pi Tutorial Series. Vi har täckt alla handledningar på ett enkelt och detaljerat sätt, så att vem som helst, oavsett om han har arbetat med Raspberry Pi eller inte, enkelt kan lära av denna serie. Och efter att ha gått igenom alla tutorials kommer du att kunna bygga några projekt på hög nivå med Raspberry Pi.
Så här designar vi den första applikationen baserat på tidigare handledning. Den första grundläggande applikationen är en läsrumstemperatur av Raspberry Pi. Och du kan övervaka avläsningarna på datorn.
Som diskuterats i tidigare handledning finns det inga ADC-kanaler som tillhandahålls internt i Raspberry Pi. Så om vi vill ansluta några analoga sensorer behöver vi en ADC-omvandlingsenhet. Och i en av våra handledning har vi kopplat ADC0804-chip till Raspberry Pi för att läsa ett analogt värde. Så gå igenom det innan du bygger denna rumstemperaturtermometer.
ADC0804 och Raspberry Pi:
ADC0804 är ett chip utformat för att konvertera analog signal till 8-bitars digital data. Detta chip är en av de populära ADC-serierna. Det är en 8bit konverteringsenhet, så vi har värden eller 0 till 255 värden. Upplösningen på detta chip ändras baserat på den referensspänning vi väljer, vi kommer att prata mer om det senare. Nedan är Pinout av ADC0804:
Nu är en annan viktig sak här, ADC0804 arbetar vid 5V och så ger den utdata i 5V logisk signal. I 8-stiftsutgång (representerande 8bits) ger varje stift + 5V-utgång för att representera logik'1 '. Så problemet är att PI-logiken är + 3.3v, så du kan inte ge + 5V-logik till + 3.3V GPIO-stiftet på PI. Om du ger + 5V till någon GPIO-stift av PI, skadas kortet.
Så för att minska logiknivån från + 5V kommer vi att använda spänningsdelarkretsen. Vi har diskuterat Voltage Divider Circuit tidigare undersökt det för ytterligare förtydligande. Vad vi ska göra är att vi använder två motstånd för att dela + 5V-logik i 2 * 2,5V-logik. Så efter division kommer vi att ge + 2,5v logik till PI. Så när logik '1' presenteras av ADC0804 ser vi + 2.5V vid PI GPIO-stiftet, istället för + 5V.
LM35 temperatursensor:
Nu för att läsa rumstemperatur behöver vi en sensor. Här ska vi använda LM35 temperatursensor. Temperaturen mäts vanligtvis i "Celsius" eller "Fahrenheit". “LM35” -sensorn ger utdata i grader Celsius.
Som visas i figuren är LM35 en trestiftig transistorliknande enhet. Stiften är numrerade som, PIN1 = Vcc - Ström (ansluten till + 5V)
PIN2 = Signal eller utgång (ansluten till ADC-chip)
PIN3 = Jord (ansluten till jord)
Denna sensor ger variabel spänning vid utgången, baserat på temperatur. För varje +1 celsius temperaturökning kommer det att finnas + 10mV högre spänning vid utgångsstiftet. Så om temperaturen är 0◦ Celsius kommer sensorns utgång att vara 0V, om temperaturen är 10◦ Celsius kommer sensorns uteffekt att vara + 100mV, om temperaturen är 25◦ Celsius kommer sensorns utgång att vara + 250mV.
Komponenter som krävs:
Här använder vi Raspberry Pi 2 Model B med Raspbian Jessie OS. Alla grundläggande hårdvaru- och mjukvarukrav har tidigare diskuterats, du kan slå upp det i Raspberry Pi Introduktion, annat än vad vi behöver:
- Anslutningsstift
- 1KΩ motstånd (17 delar)
- 10K kruka
- 0,1 µF kondensator
- 100 µF kondensator
- 1000 µF kondensator
- ADC0804 IC
- LM35 temperatursensor
- Brödbräda
Krets- och arbetsförklaring:
Anslutningarna som görs för att ansluta hallon till ADC0804 och LM35 visas i kretsschemat nedan.
LM35-utgången har många spänningsvariationer; så en 100uF kondensator används för att jämna ut utgången, som visas i figuren.
ADC har alltid mycket brus, detta brus kan i hög grad påverka prestandan, så vi använder 0.1uF kondensator för brusfiltrering. Utan detta kommer det att finnas många fluktuationer vid produktionen.
Chipet fungerar på RC (Resistor-Capacitor) oscillatorklocka. Som visas i kretsschemat bildar C2 och R20 en klocka. Det viktiga att komma ihåg här är kondensatorn C2 kan ändras till ett lägre värde för högre ADC-omvandlingshastighet. Men med högre hastighet kommer precisionen att minska. Så om applikationen kräver högre noggrannhet, välj kondensator med högre värde och välj kondensator med lägre värde för högre hastighet.
Som tidigare sagt ger LM35 + 10mV för varje celsius. Den maximala temperaturen som kan mätas med LM35 är 150 ºC. Så vi har högst 1,5 V vid LM35-utgångsterminalen. Men standardreferensspänningen för ADC0804 är + 5V. Så om vi använder det referensvärdet kommer upplösningen på utdata att vara låg eftersom vi skulle använda maximalt (5 / 1,5) 34% av det digitala utmatningsområdet.
Lyckligtvis har ADC0804 en justerbar Vref-stift (PIN9) som det visas i dess stiftdiagram ovan. Så vi kommer att sätta chipets Vref till + 2V. För att ställa in Vref + 2V måste vi ange en spänning på + 1V (VREF / 2) vid PIN9. Här använder vi 10K potten för att justera spänningen vid PIN9 till + 1V. Använd voltmätaren för att få den exakta spänningen.
Vi har tidigare använt LM35 temperatursensor för att läsa rumstemperaturen med Arduino och med AVR Microcontroller. Kontrollera också fukt- och temperaturmätning med Arduino
Programmeringsförklaring:
När allt är anslutet enligt kretsschemat, kan vi sätta PÅ PI för att skriva programmet i PYHTON.
Vi kommer att prata om några kommandon som vi ska använda i PYHTON-programmet, Vi ska importera GPIO-filer från biblioteket, nedanstående funktion gör att vi kan programmera GPIO-stift av PI. Vi döper också om "GPIO" till "IO", så i programmet när vi vill hänvisa till GPIO-stift kommer vi att använda ordet "IO".
importera RPi.GPIO som IO
Ibland, när GPIO-stiften, som vi försöker använda, kan göra några andra funktioner. I så fall får vi varningar när vi kör programmet. Kommandot nedan ber PI att ignorera varningarna och fortsätta med programmet.
IO.setwarnings (False)
Vi kan hänvisa GPIO-stift på PI, antingen med stiftnummer ombord eller med deras funktionsnummer. Precis som 'PIN 29' på tavlan är 'GPIO5'. Så vi säger här antingen att vi kommer att representera nålen här med '29' eller '5'.
IO.setmode (IO.BCM)
Vi ställer in 8 stift som ingångsstift. Vi kommer att upptäcka 8 bitars ADC-data med dessa stift.
IO.setup (4, IO.IN) IO.setup (17, IO.IN) IO.setup (27, IO.IN) IO.setup (22, IO.IN) IO.setup (5, IO.IN) IO.setup (6, IO.IN) IO.setup (13, IO.IN) IO.setup (19, IO.IN)
Om villkoret i hängslen är sant kommer uttalandena inuti slingan att utföras en gång. Så om GPIO-stiftet 19 blir högt kommer uttalandena i IF-slingan att köras en gång. Om GPIO-stiftet 19 inte går högt kommer uttalandena i IF-slingan inte att utföras.
if (IO.input (19) == True):
Nedan kommandot används som alltid loop, med detta kommando kommer uttalandena inuti denna loop att köras kontinuerligt.
Medan 1:
Ytterligare förklaring av kod ges i kodavsnittet nedan.
Efter att ha skrivit programmet är det dags att köra det. Innan programmet körs kan vi prata vad som händer i kretsen som en sammanfattning. Den första LM35-sensorn känner av rumstemperaturen och ger en analog spänning vid dess utgång. Denna variabla spänning representerar temperaturen linjärt med + 10mV per ºC. Denna signal matas till ADC0804-chipet, detta chip konverterar det analoga värdet till digitalt värde med 255/200 = 1,275 räknat per 10mv eller 1,275 räknat för 1 grad. Detta antal tas in av PI GPIO. Programmet konverterar räkningen till temperaturvärdet och visar det på skärmen. Den typiska temperaturen läst av PI visas nedan, Därför har vi denna Raspberry Pi temperaturmonitor.