### 4.3.1 Smart Temperature Control Fan #### 4.3.1.1 Overzicht ![Img](./media/top1.png) Wanneer de binnentemperatuur de vooraf ingestelde standaardwaarde overschrijdt, schakelt de slimme ventilator in om de kamer af te koelen tot een comfortabele temperatuur. Daarnaast toont het OLED-scherm in real-time de huidige binnentemperatuur en de bedrijfsstatus van de ventilator, waardoor gebruikers intuïtieve feedback krijgen over de temperatuurregeling. ![Img](./media/bottom1.png) #### 4.3.1.2 Componentkennis ![Img](./media/2top.png) **Microbit Temperatuursensor** ![Img](./media/j501.png) De micro:bit hoofdprint is eigenlijk niet uitgerust met een speciale temperatuursensor, maar gebruikt de nRF52833 chip voor temperatuurmeting. Daardoor is de gemeten waarde veel dichter bij de temperatuur van de processor, waardoor er enige afwijking ten opzichte van de omgevingstemperatuur kan optreden. Het detectiebereik is -40 ~ 105℃. **OLED Display** ![Img](./media/A636.png) OLED-technologie heeft aanzienlijke voordelen zoals rijke kleurweergave, hoog contrast en brede kijkhoek, wat zorgt voor duidelijke en levendige beelden, vooral zeer goed in zwarttinten. Elke pixel van het OLED-scherm zendt zelf licht uit zonder achtergrondverlichting, waardoor het relatief weinig stroom verbruikt. Met zijn kleine formaat (0,96 inch), hoge resolutie (128×64 pixels) en laag stroomverbruik is het zeer geschikt voor draagbare apparaten. ⚠️ **Opmerking:** In dit project is de OLED-module aangesloten met SDA op pin P20 en SCL op pin P19. **Parameters:** - Bedrijfsspanning: DC 3.3V-5V - Werkstroom: 30mA - Interface: pin headers afstand 2.54mm - Communicatiemodus: I2C-communicatie - Interne driverchip: SSD1306 - Resolutie: 128×64 - Kijkhoek: groter dan 150° **130 Motor** ![Img](./media/cou710.png) Op de 130-motormodule bevindt zich een DC-motor die werkt op basis van elektromagnetische inductie en Lorentzkracht. Hij bestaat voornamelijk uit een stator, een rotor en een commutator. De stator genereert een vast magnetisch veld, terwijl de rotor (anker), samengesteld uit spoelen, een magnetisch veld genereert wanneer deze wordt bekrachtigd. Wanneer stroom via de koolborstels en commutator de rotorspoel bereikt, wisselt het magnetische veld van de rotor met dat van de stator en ontstaat er een Lorentzkracht die de rotor doet draaien. Tijdens deze draaiing schakelt de commutator de stroomrichting, waardoor de rotor continu onder invloed van een kracht in dezelfde richting blijft en de rotatie behouden blijft. Door elektromagnetische inductie en Lorentzkracht zet de DC-motor elektrische energie om in mechanische energie. Door de uitstekende snelheidsregeling en het hoge aanloopkoppel worden DC-motoren veel gebruikt in elektrisch gereedschap, voertuigen en huishoudelijke apparaten. ![j124](./media/j124.png) De 130-motor kan in snelheid geregeld worden met PWM. Bij gebruik moeten twee pinnen worden aangesloten voor aansturing. Hij is geschikt voor toepassingen waar de ventilatorsnelheid moet worden aangepast, zoals computerkoeling en industriële productie. Hij is klein, licht en gemakkelijk te installeren, waardoor hij zeer praktisch is. **Schematische weergave:** ![Img](./media/cou712.png) De HR1124S-chip helpt bij het aansturen van de motor. Echter, de motor vraagt een grote stroom en kan niet door een transistor aangestuurd worden, laat staan rechtstreeks door een IO-poort. Zodra er spanning op beide uiteinden van de motor wordt gezet, kan deze gaan draaien. De draairichting van de motor varieert met de spanningsrichting. Binnen het nominale spanningsbereik geldt: hoe hoger de spanning, hoe sneller de motor draait. Omgekeerd: hoe lager de spanning, hoe langzamer de motor draait, of in sommige gevallen kan hij helemaal niet draaien. Er zijn twee bedieningsmodi: door hoge en lage niveaus (aan/uit besturing), en door PWM (snelheidsregeling). **Parameters:** - Werkspanning: DC 5V - Bedrijfstroom: (Max)400mA@5V - Maximale vermogen: 2W - Rotatiesnelheid: (16000+10%) tpm@5V ![Img](./media/2bottom.png) #### 4.3.1.3 Vereiste componenten | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 hoofdboard ×1 | micro:bit uitbreidingsbord ×1 | OLED display ×1 | |![Img](./media/motor.png) |![Img](./media/usb.png) |![Img](./media/4pin.png)| | 130-motor ×1 | micro USB-kabel ×1 | 4-pins draad ×2 | |![Img](./media/fan.png) |![Img](./media/batterycase.png)| ![Img](./media/AAbattery.png)| | ventilator ×1 | batterijhouder ×1 | AA-batterijen(**zelf mee te nemen**) ×6 | #### 4.3.1.4 Bedradingsdiagram ⚠️ **Let bij het bedraden op de kleur van de draden.** | 130 motor | draadkleur | micro:bit shield pin | micro:bit board pin | | :-------: | :--------: | :------------------: | :-----------------: | | G | black | G | G | | V | red | V2 | V | | IN+ | blue | 2 | P2 | | IN- | green | 16 | P16 | | OLED display | draadkleur | micro:bit shield pin | micro:bit board pin | | :----------: | :--------: | :------------------: | :-----------------: | | GND | black | G | G | | VCC | red | V2 | V | | SDA | blue | 20 | P20 | | SCL | green | 19 | P19 | ![Img](./media/couj1.png) #### 4.3.1.5 Code Flow ![Img](./media/flow-chart-01.png) #### 4.3.1.6 Testcode ⚠️ **Tip 1: Voordat je de code naar de Microbit-board downloadt, importeer je het bibliotheekbestand “oled_ssd1306\.py” verwijzend naar ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tip 2: De drempelwaarde 28 in de if()-voorwaarde kan worden aangepast aan de daadwerkelijke situatie.** **Complete code:** ```Python """ Theme: smart temperature control fan Function: OLED displays the temperature value and the microbit temperature sensor controls the on and off of the fan Compiling IDE: MU 1.2.0 Author: https://docs.keyestudio.com """ # importeer gerelateerde bibliotheken from microbit import * from oled_ssd1306 import * display.show(Image.HAPPY) # LED-matrix toont een vrolijk patroon # initialiseer en maak OLED leeg initialize() clear_oled() while True: clear_oled() # maak OLED leeg Temperature = temperature() # Lees microbit temperatuursensor add_text(0, 0, "Temperature:") # Geef de tekenreeks weer op de overeenkomstige positie van OLED add_text(13, 0, str(Temperature) + " C") # Geef de temperatuur weer op de overeenkomstige positie van OLED if Temperature >= 28: # wanneer Temperatuur >= 28℃, draait de ventilator add_text(0, 2, "Fan on") # Geef de tekenreeks weer op de overeenkomstige positie van OLED pin2.write_analog(500) # zet P2-pin naar analoog 500 pin16.write_analog(0) # zet P16-pin naar analoog 0 else: # anders: ventilator werkt niet add_text(0, 2, "Fan off") # Geef de tekenreeks weer op de overeenkomstige positie van OLED pin2.write_analog(0) # zet P2-pin naar analoog 0 pin16.write_analog(0) # zet P16-pin naar analoog 0 sleep(1000) ``` ⚠️ **Tip 3: De code gebruikt C in plaats van ℃, omdat ℃ vervormd weergegeven wordt op het OLED.** ![Img](./media/line1.png) **Korte uitleg:** ① Importeer de libraries van microbit en oled_ssd1306. ```Python from microbit import * from oled_ssd1306 import * ``` ② De Microbit 5×5 LED-matrix toont ![Img](./media/ab3.png). ```Python display.show(Image.HAPPY) # LED-matrix toont een vrolijk patroon ``` ③ Initialiseer de OLED-pixels en maak het OLED-scherm leeg. ```Python initialize() # initialiseer oled clear_oled() # maak oled leeg ``` ④ Lees de temperatuurwaarde en toon deze op het OLED. ```Python Temperature = temperature() # Lees microbit temperatuursensor add_text(0, 0, "Temperature:") # Geef de tekenreeks weer op de overeenkomstige positie van OLED add_text(13, 0, str(Temperature) + " C") # Geef de temperatuur weer op de overeenkomstige positie van OLED ``` ⑤ Voorwaardelijke instructie: if()...else... Wanneer de door de sensor gedetecteerde temperatuur groter dan of gelijk aan 28℃ is, toont het OLED "Fan on" en draait de ventilator. Anders toont het OLED "Fan off" en werkt de ventilator niet. ```Python if Temperature >= 28: # wanneer Temperatuur >= 28℃, draait de ventilator add_text(0, 2, "Fan on") # Geef de tekenreeks weer op de overeenkomstige positie van OLED pin2.write_analog(500) # zet P2-pin naar analoog 500 pin16.write_analog(0) # zet P16-pin naar analoog 0 else: # anders: ventilator werkt niet add_text(0, 2, "Fan off") # Geef de tekenreeks weer op de overeenkomstige positie van OLED pin2.write_analog(0) # zet P2-pin naar analoog 0 pin16.write_analog(0) # zet P16-pin naar analoog 0 ``` ⑥ Pauzeer 1000ms (1s). ```Python sleep(1000) ``` #### 4.3.1.7 Testresultaat ![Img](./media/4top.png) Na het aansluiten en inschakelen via de micro USB-kabel, verbind je de externe voeding (6 AA-batterijen) om voldoende stroomvoorziening te garanderen, en klik op “Flash” om de code naar de micro:bit te downloaden. ![Img](./media/A123.png) Na het uploaden van de testcode, druk op de resetknop aan de achterkant van de micro:bit. ![Img](./media/A455.png) De on-board 5×5 LED-matrix toont ![Img](./media/ab3.png), en het OLED-scherm toont in real-time de temperatuur en de ventilatorstatus. Wanneer de temperatuur boven 28℃ komt, draait de ventilator. Anders werkt de ventilator niet. ![Img](./media/dongtu-1.gif) ⚠️ **Opmerking: De code gebruikt C in plaats van ℃, omdat ℃ vervormd wordt weergegeven op het OLED.** ⚠️ **Opmerking: De blokken (building blocks) in het experiment zijn niet inbegrepen in deze kit.** (**Tip:** Als er geen resultaat zichtbaar is, druk dan op de resetknop van de micro:bit.) ![Img](./media/4bottom.png)