4.1 Project: Verlichtingssysteem

Laten we beginnen met ons eerste project, het verlichtingssysteem.


Een LED laten oplichten is een van de meest fundamentele KidsBlock-oefeningen.

Deze startles is ontworpen voor beginners om hardware- en softwareprogrammering op het ESP32-ontwikkelbord te begrijpen en basiskennis van circuits en programmering onder de knie te krijgen.

img

Daarom is onze tutorial eenvoudig. En dit intrigerende project kan worden toegepast in daadwerkelijke scenario’s thuis of op kantoor.

In dit project leert u de basisaansluitingen en instellingen van het ESP32-ontwikkelbord in de grafische programmering van KidsBlock. Bovendien worden u enkele functies gepresenteerd, zoals het aan-/uitzetten van een LED via het uitgangsniveau van een digitale pin of met een knop.

Al met al is dit een instapniveau-tutorial om de basis te leggen voor latere KidsBlock-programmeerpraktijken.


4.1.1 Stroomdiagram

image-20230607175228556


4.1.2 Een LED laten oplichten

Beschrijving:

LED, kort voor Light Emitting Diode, is een solid-state halfgeleider die elektrische energie omzet in zichtbaar licht, daarom wordt het ook wel solid-state verlichting genoemd.

Wanneer stroom door een LED gaat, licht deze op.

Diverse LED’s:

img


LED-module is een apparaat om uit te voeren, waarvan de helderheid en het knipperen kunnen worden geregeld. Voor gebruik hoeft u deze alleen rechtstreeks aan te sluiten op digitale uitgangspinnen op het ontwikkelbord.

img


Werkingsprincipe:

Wanneer S op een hoog niveau is, komt de Q1-triode in geleiding en gaat de VCC-spanning door de LED om deze te laten oplichten.

img

Parameters:

  • Spanning: 3~5V

  • Stroom: ≤1.5mA

  • Vermogen: 0.07W


Bedradingsschema:

Sluit de LED-module aan op io27.

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

img


Testcode:

  • Open Kidsblock en kies het juiste apparaat en de juiste poort.

img

  • Sleep image19 van image20 naar het codebewerkingsgebied. Codeblokken worden alleen uitgevoerd als ze in dit gebied zijn.

img

  • Met dit blok wordt de code uitgevoerd wanneer het ontwikkelbord opstart.

img

  • Sleep in image21forever “ en plak het onder het vorige blok. Blok “ forever “ geeft een lus aan.

img

  • Sleep een “LED pin output”-blok van image22 en plak het in “ forever “. Stel de pin in op IO27 en het uitgangsniveau op HIGH, zodat de LED-pin continu een hoog niveau zal uitvoeren.

img

img

  • Voeg een vertraging van 1 seconde toe. Dupliceer het “LED pin output”-blok, maar stel de uitvoer in op LOW en voeg ook een vertraging toe. Dan zal de LED in circulatie aan- en uitgaan.

img

Testresultaat:

De LED knippert per seconde, omdat io27 op het ESP32-bord afwisselend elke seconde een hoog en laag niveau uitvoert. Bovendien kunnen diverse interactieve toepassingen ook worden gerealiseerd via een LED, zoals ademende LED, waterstroomlichten en knipperend politielicht.

Vermogensniveau

Resultaat

HIGH

LED aan

LOW

LED uit


Uitbreiding: Ademende LED

Beschrijving:

IO-interfaces van MCU (zoals ESP32) geven alleen digitale signalen (hoog of laag niveau) uit. Bijvoorbeeld, in het vorige experiment (een LED laten oplichten), zijn de digitale uitgangen alleen HIGH (3.3V) en LOW (0V).

Als MCU een hoog niveau van 3.3V of een laag niveau van 0V uitvoert, moet de ingangsspanning tussen 0~3.3V liggen. Daarom is PWM (Pulse Width Modulation) nodig om verschillende spanningswaarden uit te voeren, wat “analoge uitvoer” wordt genoemd.

img


Kennis:

Wat is PWM?

PWM bevat drie elementen: Frequentie (Hz), Periode, Duty Cycle (%).

  • PWM Frequentie (f): het aantal keren dat het signaal binnen één seconde van hoog naar laag en terug naar hoog verandert. Over het algemeen is Frequentie het aantal PWM-perioden in een seconde.

  • PWM Periode (T): Periode = 1 / Frequentie (T=1/f, en 1 betekent 1 seconde). Bijvoorbeeld: f = 50Hz, dus T = 20ms, wat inhoudt dat er 50 perioden per seconde zijn.

  • PWM Duty Cycle: de tijdsverhouding van HIGH tot de gehele Periode. Als Periode = 10ms en 8ms de pulsbreedtetijd is, neemt het lage niveau 2ms in beslag, dus de Duty Cycle = 8/(8+2) = 80%.

img

Conclusie: Bij een geschikte signaalfrequentie verandert PWM de effectieve uitgangsspanning door de duty cycle in één periode te veranderen. Simpel gezegd, binnen een gespecificeerde tijd, hoe meer hoog niveau de IO-poort uitvoert, hoe groter de PWM-waarde is, en hoe lichter de LED zal zijn.

img

Testcode:

img

  • Definieer een variabele item en wijs deze toe aan 0.

img

  • Sleep een “forever”-blok en plak er een “repeat”-blok in. Stel het aantal herhalingen in op 255.

img

  • Sleep een “variable mode”-blok in “repeat” en stel de modus in op “ ++ “, wat betekent dat item na elke uitvoering met 1 zal toenemen.

img

  • Zoek het blok om PWM in te stellen, dat zich bevindt in image23 zoals hieronder weergegeven, zodat u alleen de corresponderende pin en analoge waarde hoeft in te stellen om PWM uit te voeren.

img

  • Stel de LED-pin in:

img

  • Kanaal instellen: (totaal 16 kanalen: inclusief 0~15)

img

  • Stel de PWM-uitvoerwaarde in op item, die automatisch met 1 zal toenemen van 0 naar 255. PWM-uitvoer is 0~255, dus we stellen het aantal herhalingen in op 255.

img

  • Voeg een vertraging van 0,01s toe, zodat de LED geleidelijk oplicht in plaats van plotseling.

img

  • Dupliceer het “herhaal”-blok als volgt, maar stel de modus in op “--”, wat de variabele item elke keer verlaagt. En de LED zal geleidelijk dimmen.

img

Testresultaat

LED licht geleidelijk op en dimt; het ademt gelijkmatig.

img


4.1.4 Een Knop

Beschrijving

Knopmodule is een apparaat voor invoer. De MCU leest het vermogensniveau om te detecteren of de knop is ingedrukt.

img


Schematisch Diagram:

img

Parameters:

  • Spanning: 3~5V

  • Stroom: ≤1.1mA

  • Vermogen: ≤5.5mW


Het principe van de knopmodule is een circuit dat door deze knop wordt bestuurd.

  • Wanneer de knop wordt ingedrukt, bevindt het circuit zich in een gesloten toestand, zodat stroom via de knop naar GND gaat, waardoor de digitale ingangspin een laag niveau detecteert.

  • Wanneer de knop wordt losgelaten, wordt het circuit onderbroken en neemt het pin-niveau toe door een pull-up weerstand, waardoor de digitale pin een hoog niveau detecteert.


Bedradingsschema:

Sluit de knopmodule aan op io5

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

img


Testcode

  • Initialiseer eerst de seriële poort en stel de baudrate in op 115200.

img

  • Stel de pin in op IO5 en de modus op invoer. Wat volgt is een “voor altijd”-blok.

img

  • Lees het vermogensniveau van digitale pin 5. Als het 1 is, print 1. Anders, print 0.

img

Volledige code:

img

Testresultaat

Open de seriële monitor en stel de bijbehorende baudrate in.

Wanneer de knop wordt losgelaten, is de waarde 1; als u de knop indrukt, wordt deze 0.

img

In KidsBlock kunnen we de status van de digitale ingangspin uitlezen door te programmeren om te detecteren of de knop is ingedrukt. Zo kunnen tal van interactieve toepassingen worden gerealiseerd via een knopmodule, zoals LED aan/uit en aanpassing van de helderheid van het display.


Uitbreiding: Zelfvergrendelende Knop

Een zelfvergrendelende knop springt niet omhoog wanneer u deze indrukt zonder vast te houden, en hij springt nooit omhoog tenzij u hem opnieuw indrukt. Hij werkt als een schakelaar. Voor gewone knoppen kan een dergelijke functie worden gerealiseerd via MCU en software.

Testcode

  • Definieer twee variabelen: item als de gelezen knopwaarde en button als de waarde die door de knop is verschoven.

img

  • Wijs de gelezen knopwaarde toe aan item.

img

  • Bepaal of de knop is ingedrukt. Zo ja, verschuif de waarde van button en print deze.

img

  • Vertraag 0,01s om de knopjitter te elimineren.

    • Als een gesloten toestand wordt gedetecteerd bij de knop, wordt een vertraging uitgevoerd om Front Porch Jitter te elimineren. Over het algemeen ligt de vertraging binnen 5ms~10ms (mechanische eigenschappen bepalen). Nadat de jitter verdwenen is, controleer de knopstatus opnieuw. Als het gesloten toestandniveau nog steeds wordt gehandhaafd, wordt bevestigd dat er een knop is ingedrukt.

    • Wanneer een losgelaten knop wordt gedetecteerd, moet er ook een vertraging van 5ms~10ms plaatsvinden om de Back Porch Jitter te verwijderen, zodat het programma voor de knop kan worden uitgevoerd.

  • Wanneer de knop wordt ingedrukt (de fysieke pin leest 0), schakelt de variabele button naar 1 (systeemstatus: AAN). Druk er nogmaals op, button schakelt naar 0 (systeemstatus: UIT), afwisselend.

Opmerking: De fysieke knoppin leest 0 wanneer ingedrukt en 1 wanneer losgelaten (vanwege de interne pull-up weerstand). De variabele button is een afzonderlijke software-toggle die tussen 0 en 1 schakelt telkens wanneer een druk wordt gedetecteerd. Verwar de ruwe pinwaarde niet met de statusvariabele button.

Volledige code:

img

Testresultaat

Upload de code en open de seriële monitor.

Wanneer u de knop één keer indrukt, wordt 1 weergegeven. Als u de knop voor de tweede keer indrukt, wordt de waarde 0. Nu heeft een gewone knop de functie van een zelfvergrendelende knop.

img


4.1.3 Verlichtingsregeling

Beschrijving

In de bovenstaande basiseperimenten hebben we een zelfvergrendelende knop omgebouwd om de LED te bedienen. Een zelfvergrendelende knop is geschikt voor alle situaties waarin een bepaalde toestand moet worden gehandhaafd, bijvoorbeeld wanneer de LED lange tijd moet branden, is de ESP32 ontwikkelingskaart vereist voor sommige bewerkingen.

In dit experiment zullen we de ESP32 PLUS-kaart gebruiken om u te begeleiden bij het implementeren van een verlichtingssysteem en het simuleren van real-life scènes om licht via de knop te bedienen.


Bedradingsschema:

Sluit de knop aan op io5 en de LED op io27

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

img


Testcode:

Codestroom:

img

Volledige code:

Gebaseerd op de code voor de zelfvergrendelende knop, voegen we “LED pin output”-blokken toe.

img

Testresultaat:

Wanneer u de knop één keer indrukt, gaat de LED branden; als u nogmaals drukt, gaat de LED uit. Deze bewerking is een lus, wat overeenkomt met het verlichtingsprincipe in de realiteit.


In dit hoofdstuk hebben we gedemonstreerd hoe te programmeren en te besturen via KidsBlock, en we hebben de basisprincipes geleerd, evenals enkele software- en hardwareconcepten in experimenten zoals de zelfvergrendelende knop en het verlichtingscontrolesysteem.

Deze zijn essentieel voor een goede KidsBlock-ontwikkelaar. Vervolgens zullen we u begeleiden om meer toepassingen en vaardigheden te blijven verkennen, of u nu een beginner of een veteraan bent. We hopen dat u geniet van het plezier en de uitdagingen tijdens het leren van KidsBlock. Laten we verder gaan!


4.1.5 Veelgestelde vragen

V: LED gaat niet branden na het uploaden van de code.

A: Controleer of de pin die in de code is gedefinieerd, overeenkomt met die in uw bedrading. Als ze incompatibel zijn, pas deze dan aan, verwijzend naar de code.


V: De knop werkt soms wel en soms niet.

A: Pas de vertraging van de jitter-eliminatie aan naar een geschikte waarde.