4.7 Project: Temperatuurregelsysteem
In dit project laten we zien hoe u een temperatuur- en vochtigheidssensor, ventilator en LCD1602-display kunt gebruiken om een intelligent temperatuur- en vochtigheidsregelsysteem samen te stellen.
Het systeem meet de omgevingstemperatuur en -vochtigheid en regelt de ventilator om indien nodig af te koelen. Wanneer de temperatuur de ingestelde drempel overschrijdt, schakelt de ventilator automatisch in om de omgevingstemperatuur onder de ingestelde waarde te brengen. Ondertussen worden de huidige temperatuur- en vochtigheidswaarden weergegeven op de LCD1602.
Daarom realiseert het een automatische aanpassing van de omgevingstemperatuur en -vochtigheid, wat perfect is voor projecten die deze functies vereisen.

4.7.1 Stroomdiagram

4.7.2 Temperatuur- en Vochtigheidssensor
Beschrijving:
De DHT11 temperatuur- en vochtigheidssensor geeft digitale signalen af. Het past principes van analoge signaalverwerving en -conversie toe, evenals temperatuur- en vochtigheidsdetectietechnologie, zodat het langdurige stabiliteit en hoge betrouwbaarheid biedt. Bovendien integreert de sensor een zeer nauwkeurige resistieve vochtigheidssensor en een resistieve thermosensitieve temperatuursensor, en is deze verbonden met een 8-bits krachtige MCU.

DHT11 Communicatiemiddelen:
DHT11 communiceert via een monobus (een enkele bus) die gegevens uitwisselt en controleert.
Monobus verzendt Databit:
Gegevensformaat van monobus: verzend elke keer 40 bit gegevens, en de hoogste bit eerst.
8 bit vochtigheid geheel getal + 8 bit vochtigheid decimaal getal + 8 bit temperatuur geheel getal + 8 bit temperatuur decimaal getal + bit pariteit.
OPMERKING: Decimale waarde van vochtigheid is gelijk aan 0.
Pariteitsbit:
8 bit vochtigheid geheel getal + 8 bit vochtigheid decimaal getal + 8 bit temperatuur geheel getal + 8 bit temperatuur decimaal getal.
8 bit pariteit is gelijk aan de laatste 8 bits van het resultaat.
Tijdsdiagram:

OPMERKING:
De host leest altijd de temperatuur- en vochtigheidswaarden van de laatste meting van de DHT11. Daarom, als het interval tussen twee metingen lang is, detecteer dan twee keer achter elkaar en gebruik het tweede resultaat.
Voor meer details, bezoek de officiële website van ASAIR: http://www.aosong.com/products-21.html
Bedradingsschema:
Sluit de temperatuur- en vochtigheidssensor aan op io17.
Let op: Sluit geel aan op S (Signaal), rood op V (Voeding) en zwart op GND. Draai ze niet om!

Testcode:
Initialiseer de seriële poort en de sensor.

De seriële monitor print en ververst de vochtigheids- en temperatuurwaarden per seconde.

Volledige code:

Testresultaat:

Open de seriële monitor en u ziet de huidige temperatuur- en vochtigheidswaarde.

4.7.3 LCD 1602 Module
Beschrijving:
LCD 1602 heeft een standaard 14-pins (zonder achtergrondverlichting) of 16-pins (met achtergrondverlichting) interface, waardoor de pinnen van de MCU worden bespaard. De display-IC realiseert I2C-besturing.

I2C Seriële Communicatie:
I2C-communicatie, voluit bekend als Inter-Integrated Circuit (IIC) of Two-Wire Interface (TWI), is een veelgebruikt dual-bus (een host en een slave) communicatieprotocol, ontwikkeld door Phillips Semiconductor (overgenomen door US NXP Semiconductors).
Het grootste voordeel is dat slechts twee draden de gegevensoverdracht voltooien, wat de circuits aanzienlijk vereenvoudigt. In totaal kan de I2C-bus 127 knooppunten parallel verbinden, dus het ondersteunt meerdere hosts en slaves.
Over het algemeen is externe voeding niet nodig voor slaves, aangezien de I2C-bus de stroom naar hen zal overbrengen:

De I2C-bus verzendt gegevens via 8-bits gegevensoverdracht. Gewoonlijk bestaat één-byte-data uit negen kloksignalen, waarvan acht gegevens verzenden en de laatste het einde van de overdracht markeert.
Bovendien ondersteunt de I2C-bus multi-byte gegevensoverdracht door het bovenstaande proces continu te herhalen.
Het I2C-protocol bestaat in principe uit:
Startsignaal: Voor de overdracht verzendt de zender een startsignaal om de ontvanger te informeren over het startpunt.
Adres: Het informeert de ontvanger naar wie de gegevens worden verzonden.
Gegevens: Het wordt elke keer één byte en bit voor bit verzonden.
Eindsignaal: Wanneer de overdracht is voltooid, beëindigt de zender de gegevens met een eindsignaal om de ontvanger te informeren dat het proces is afgelopen.
Tijdsdiagram van serieel protocol:
Voor meer details, bezoek de officiële website: https://www.nxp.com/


Wij bieden u een bibliotheekbestand Wire.h voor het I2C-protocol, waarin functies direct kunnen worden aangeroepen om te communiceren met I2C/TWI-apparaten.
Voor details over de bibliotheek, raadpleeg:
https://www.arduino.cc/reference/en/language/functions/communication/wire/
Bedradingsschema:
Sluit de LCD aan op de I2C BUS zoals hieronder weergegeven.
Let op: Sluit geel aan op S (Signaal), rood op V (Voeding) en zwart op GND. Draai ze niet om!

Testcode:
Initialiseer het I2C-adres van de LCD en schakel de achtergrondverlichting in.

Stel de LCD-cursorpositie in op de X- en Y-as (X-as geeft maximaal 16 tekens weer, en Y-as geeft maximaal 2 kolommen weer).

Voer de afdrukinhoud in (niet meer dan 16 tekens, anders is het niet compleet).

Volledige code:

Testresultaat:
LCD1602 schakelt zijn achtergrondverlichting in en toont “ HELLO WORLD 0 “ en “ HELLO WORLD 1 “.

4.7.4 Ventilator Module
Beschrijving:
130 Motor kan de snelheid aanpassen via PWM. Hierbij zijn twee pinnen nodig om aan te sluiten voor de besturing.
De module is geschikt voor meerdere toepassingen, zoals computerkoeling en industriële productie. Bovendien is hij compact en eenvoudig te installeren, wat zeer praktisch is.

Schematisch Diagram:

Bedradingsschema:
Sluit de motor aan op io18 en io19.
Let op: Sluit geel aan op S (Signaal), rood op V (Voeding) en zwart op GND. Draai ze niet om!

Testcode:
Stel ventilatorpin INA in

Stel de voedingsniveau-status van INA in, die de draairichting van de ventilator bepaalt.

Stel ventilatorpin INB in.

Stel de analoge uitgang bij INB in, die de rotatiesnelheid bepaalt.
Wanneer INA hoog is, hoe lager de analoge uitgang bij INB is, hoe sneller de ventilator zal draaien.
Wanneer INA laag is, hoe groter de analoge uitgang bij INB is, hoe sneller de ventilator zal draaien.

Testresultaat:
De 130 motor draait afwisselend elke 2 seconden links en rechts.

OPMERKING:
Er zijn intermitterende stops tijdens het veranderen van de draairichting. Deze voorkomen een te hoge stroom op het moment van omkering. Anders kan een geforceerde reset optreden als gevolg van onvoldoende stroomtoevoer op het ontwikkelbord.
4.7.5 Temperatuurregelsysteem
Beschrijving:
Hierin lezen we de waarde van de DHT11 temperatuur- en vochtigheidssensor via monobus-communicatie, en de waarden worden weergegeven op het LCD. Als de waarden de ingestelde drempel overschrijden, zal de ventilator inschakelen voor ontvochtiging en koeling om de dieren en planten op de boerderij te beschermen. Opmerkelijk is dat dit systeem eenvoudig te installeren is met meerdere functies, zoals snelheidsregeling via PWM en gegevensoverdracht via monobus.
Over het algemeen is het een praktisch systeem dat boeren helpt de realtime status te monitoren en te controleren om de productie-efficiëntie te verbeteren.
Bedradingsschema:
Sluit de temperatuur- en vochtigheidssensor aan op io17.
Sluit de motor (ventilator) module aan op io18 en io19
Sluit LCD1602 aan op BUS I2C.
Let op: Sluit geel aan op S (Signaal), rood op V (Voeding) en zwart op GND. Draai ze niet om!

Testcode:
Codestroom:

Code:
Initialiseer LCD om een adres in te stellen en het display te wissen. Schakel de achtergrondverlichting in en stel de cursorpositie in:

Initialiseer de DHT11-sensor en kies een bijbehorende pin. Definieer twee variabelen als temperatuur- en vochtigheidswaarden.

Wijs in de lus de gedetecteerde waarden respectievelijk toe aan de twee variabelen.

Geef de waarden weer op het LCD.

Bepaal de temperatuur- en vochtigheidswaarde. Als de temperatuur hoger is dan 29° of de vochtigheid meer dan 80 bedraagt, zal de ventilator draaien.

Volledige code:

Testresultaat:
Wanneer de temperatuur 29°C bereikt, zal de ventilator inschakelen om warmte af te voeren. Wanneer deze lager is dan 29°C, zal de ventilator uitschakelen (de ventilator simuleert alleen warmteafvoer, dus het effect is niet goed), wat energie bespaart voor de boerderij.
4.7.6 Veelgestelde vragen
#V: Is de temperatuur- en vochtigheidssensor waterdicht?
A: Nee. Het detecteert de omgevingstemperatuur en -vochtigheid (in de lucht), dus plaats het niet in water.
#V: ESP32-bord wordt gereset wanneer de ventilator draait.
A: Wanneer de ventilator draait, is er meer stroom nodig dan bij andere sensoren, vandaar dat spanning en stroom in het circuit kunnen fluctueren. Vooral op het moment van ventilatoromkering kunnen de fluctuaties te zwaar zijn, wat resulteert in een reset als gevolg van extreem lage spanning en stroom in het ESP32-ontwikkelbord.