- ADC0804 en Raspberry Pi:
- LM35 temperatuursensor:
- Vereiste componenten:
- Circuit en werkuitleg:
- Programmering Toelichting:
We hebben grotendeels alle basiscomponenten die met Raspberry Pi communiceren, behandeld in onze Raspberry Pi Tutorial-serie. We hebben alle tutorials op een eenvoudige en gedetailleerde manier behandeld, zodat iedereen, of hij nu met Raspberry Pi heeft gewerkt of niet, gemakkelijk van deze serie kan leren. En nadat je alle tutorials hebt doorlopen, kun je een aantal projecten op hoog niveau bouwen met Raspberry Pi.
Dus hier ontwerpen we de eerste applicatie op basis van de vorige tutorials. De eerste basistoepassing is een leeskamertemperatuur van Raspberry Pi. En u kunt de metingen op de computer volgen.
Zoals besproken in eerdere tutorials, zijn er geen ADC-kanalen intern in Raspberry Pi. Dus als we analoge sensoren willen aansluiten, hebben we een ADC-conversie-eenheid nodig. En in een van onze tutorials hebben we een ADC0804-chip met Raspberry Pi gekoppeld om een analoge waarde te lezen. Dus ga er doorheen voordat u deze kamertemperatuur-thermometer bouwt.
ADC0804 en Raspberry Pi:
ADC0804 is een chip die is ontworpen om analoog signaal om te zetten in 8 bit digitale gegevens. Deze chip is een van de populaire series ADC. Het is een 8-bits conversie-eenheid, dus we hebben waarden of 0 tot 255 waarden. De resolutie van deze chip verandert op basis van de referentiespanning die we kiezen, we zullen er later meer over praten. Hieronder is de pinout van ADC0804:
Een ander belangrijk ding hier is, de ADC0804 werkt op 5V en levert dus output in een logisch signaal van 5V. In 8-pins uitvoer (die 8 bits vertegenwoordigt), biedt elke pin + 5V-uitvoer om logica'1 'weer te geven. Het probleem is dus dat de PI-logica + 3.3v is, dus je kunt geen + 5V-logica geven aan de + 3.3V GPIO-pin van PI. Als je + 5V aan een GPIO-pin van PI geeft, raakt het bord beschadigd.
Dus om het logische niveau van + 5V te verlagen, zullen we een spanningsdelercircuit gebruiken. We hebben het Voltage Divider Circuit eerder besproken, onderzoeken het voor verdere verduidelijking. Wat we zullen doen is, we gebruiken twee weerstanden om + 5V logica te verdelen in 2 * 2,5V logica. Dus na deling geven we + 2.5v logica aan PI. Dus wanneer logica '1' wordt gepresenteerd door ADC0804, zien we + 2.5V op de PI GPIO-pin, in plaats van + 5V.
LM35 temperatuursensor:
Voor het aflezen van de kamertemperatuur hebben we een sensor nodig. Hier gaan we de LM35 temperatuursensor gebruiken. De temperatuur wordt gewoonlijk gemeten in "Celsius" of "Fahrenheit". "LM35" -sensor levert output in graden Celsius.
Zoals weergegeven in de afbeelding, is LM35 een driepins transistorachtig apparaat. De pinnen zijn genummerd als, PIN1 = Vcc - Power (aangesloten op + 5V)
PIN2 = Signaal of Uitgang (verbonden met ADC-chip)
PIN3 = aarde (verbonden met aarde)
Deze sensor levert een variabele spanning aan de uitgang, gebaseerd op temperatuur. Voor elke temperatuurstijging van +1 graden Celsius is er een + 10mV hogere spanning op de uitgangspen. Dus als de temperatuur 0◦ Celsius is, is de output van de sensor 0V, als de temperatuur 10◦ Celsius is, is de output van de sensor + 100mV, als de temperatuur 25◦ Celsius is, is de output van de sensor + 250mV.
Vereiste componenten:
Hier gebruiken we Raspberry Pi 2 Model B met Raspbian Jessie OS. Alle basisvereisten voor hardware en software zijn eerder besproken, u kunt het opzoeken in de Raspberry Pi-introductie, behalve dat we nodig hebben:
- Verbindende pinnen
- 1KΩ weerstand (17 stuks)
- 10K pot
- 0.1 µF condensator
- 100 µF condensator
- Condensator van 1000 µF
- ADC0804 IC
- LM35 temperatuursensor
- Broodplank
Circuit en werkuitleg:
De aansluitingen die gemaakt zijn voor het aansluiten van Raspberry op ADC0804 en LM35, worden weergegeven in het onderstaande schakelschema.
De LM35-uitgang heeft veel spanningsschommelingen; dus een condensator van 100uF wordt gebruikt om de output af te vlakken, zoals weergegeven in de afbeelding.
De ADC heeft altijd veel ruis, deze ruis kan de prestaties sterk beïnvloeden, daarom gebruiken we 0.1uF condensator voor ruisfiltratie. Zonder dit zullen er veel fluctuaties aan de output zijn.
De chip werkt op een RC (Resistor-Capacitor) oscillatorklok. Zoals te zien is in het schakelschema , vormen C2 en R20 een klok. Het belangrijkste om hier te onthouden is dat de condensator C2 kan worden gewijzigd in een lagere waarde voor een hogere ADC-conversie. Bij hogere snelheden neemt de nauwkeurigheid echter af. Dus als de toepassing een hogere nauwkeurigheid vereist, kiest u de condensator met een hogere waarde en voor een hogere snelheid kiest u de condensator met een lagere waarde.
Zoals eerder verteld, levert de LM35 + 10mV voor elke Celsius. De maximale temperatuur die kan worden gemeten door de LM35 is 150º Celsius. We hebben dus een maximum van 1,5 V op de LM35-uitgangsklem. Maar de standaard referentiespanning van ADC0804 is + 5V. Dus als we die referentiewaarde gebruiken, zal de resolutie van de output laag zijn omdat we maximaal (5 / 1.5) 34% van het digitale outputbereik zouden gebruiken.
Gelukkig heeft de ADC0804 een verstelbare Vref-pin (PIN9), zoals weergegeven in het Pin-diagram hierboven. Dus we zullen de Vref van de chip instellen op + 2V. Om Vref + 2V in te stellen, hebben we een spanning van + 1V (VREF / 2) nodig op PIN9. Hier gebruiken we 10K pot om de spanning op PIN9 aan te passen naar + 1V. Gebruik de voltmeter om de juiste spanning te krijgen.
We hebben eerder de LM35-temperatuursensor gebruikt om de kamertemperatuur te lezen met Arduino en met AVR-microcontroller. Controleer ook de vochtigheids- en temperatuurmeting met Arduino
Programmering Toelichting:
Zodra alles is aangesloten volgens het schakelschema, kunnen we de PI inschakelen om het programma in PYHTON te schrijven.
We zullen het hebben over enkele commando's die we gaan gebruiken in het PYHTON-programma, We gaan het GPIO-bestand uit de bibliotheek importeren, met onderstaande functie kunnen we GPIO-pinnen van PI programmeren. We hernoemen ook "GPIO" naar "IO", dus in het programma zullen we telkens wanneer we naar GPIO-pinnen willen verwijzen het woord 'IO' gebruiken.
importeer RPi.GPIO als IO
Soms, wanneer de GPIO-pinnen, die we proberen te gebruiken, andere functies uitvoeren. In dat geval zullen we waarschuwingen ontvangen tijdens het uitvoeren van het programma. Onderstaand commando vertelt de PI om de waarschuwingen te negeren en door te gaan met het programma.
IO.setwarnings (False)
We kunnen de GPIO-pinnen van PI verwijzen, hetzij op pincode aan boord, hetzij op functienummer. Net als 'PIN 29' op het bord is 'GPIO5'. Dus we vertellen hier dat we de pin hier met '29' of '5' gaan weergeven.
IO.setmode (IO.BCM)
We stellen 8 pinnen in als invoerpinnen. We detecteren 8 bit ADC-gegevens door deze pinnen.
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)
Als de voorwaarde tussen de accolades waar is, worden de instructies in de lus één keer uitgevoerd. Dus als de GPIO-pin 19 hoog wordt, worden de instructies in de IF-lus één keer uitgevoerd. Als de GPIO-pin 19 niet hoog wordt, worden de instructies in de IF-lus niet uitgevoerd.
if (IO.input (19) == True):
Het onderstaande commando wordt gebruikt als forever loop, met dit commando worden de statements in deze loop continu uitgevoerd.
Terwijl 1:
Verdere uitleg van de code wordt gegeven in de sectie Code hieronder.
Na het schrijven van het programma is het tijd om het uit te voeren. Laten we, voordat we het programma uitvoeren, in een samenvatting bespreken wat er in het circuit gebeurt. De eerste LM35-sensor detecteert de kamertemperatuur en levert een analoge spanning aan de uitgang. Deze variabele spanning geeft de temperatuur lineair weer met + 10mV per ºC. Dit signaal wordt naar de ADC0804-chip gestuurd, deze chip converteert de analoge waarde naar digitale waarde met 255/200 = 1,275 count per 10mv of 1,275 count voor 1 graad. Deze telling wordt opgenomen door de PI GPIO. Het programma zet de telling om in temperatuurwaarde en geeft deze weer op het scherm. De typische temperatuur die door PI wordt gelezen, wordt hieronder weergegeven, Vandaar dat we deze Raspberry Pi temperatuurmonitor hebben.