### 4.3.1 Smart Temperature Control Fan #### 4.3.1.1 Überblick ![Img](./media/top1.png) Wenn die Raumtemperatur den voreingestellten Grenzwert überschreitet, schaltet sich der intelligente Ventilator ein, um den Raum auf eine angenehme Temperatur abzukühlen. Außerdem zeigt das OLED-Display die aktuelle Raumtemperatur und den Betriebszustand des Ventilators in Echtzeit an und bietet dem Benutzer eine anschauliche Rückmeldung zur Temperaturregelung. ![Img](./media/bottom1.png) #### 4.3.1.2 Bauteilkenntnisse ![Img](./media/2top.png) **Microbit Temperatursensor** ![Img](./media/j501.png) Das micro:bit Hauptboard ist tatsächlich nicht mit einem dedizierten Temperatursensor ausgestattet, sondern verwendet den nRF52833-Chip zur Temperaturerfassung. Daher ist der gemessene Wert näher an der Temperatur des Prozessors, sodass es Abweichungen zur Umgebungstemperatur geben kann. Sein Messbereich liegt bei -40 ~ 105℃. **OLED Display** ![Img](./media/A636.png) Die OLED-Technologie bietet deutliche Vorteile wie reichhaltige Farbwiedergabe, hohen Kontrast und weite Betrachtungswinkel und liefert klare und lebendige Bilder, besonders bei Schwarz. Jeder Pixel des OLED-Displays strahlt selbst Licht aus, es wird keine Hintergrundbeleuchtung benötigt, wodurch der Stromverbrauch relativ gering ist. Mit seiner kleinen Größe (0,96 Zoll), hohen Auflösung (128×64 Pixel) und niedrigem Stromverbrauch eignet es sich sehr gut für Wearables. ⚠️ **Hinweis:** In diesem Projekt ist das OLED-Modul so angeschlossen, dass die SDA-Schnittstelle an Pin P20 und SCL an Pin P19 angeschlossen ist. **Parameter:** - Betriebsspannung: DC 3.3V-5V - Betriebsstrom: 30mA - Schnittstelle: Stiftleiste, Raster 2.54mm - Kommunikationsmodus: I2C communication - Interner Treiberchip: SSD1306 - Auflösung: 128×64 - Betrachtungswinkel: größer als 150° **130 Motor** ![Img](./media/cou710.png) Auf dem 130-Motor-Modul befindet sich ein Gleichstrommotor, der auf elektromagnetischer Induktion und Lorentzkraft basiert. Er besteht hauptsächlich aus einem Stator, einem Rotor und einem Kommutator. Der Stator erzeugt ein festes Magnetfeld, während der Rotor (Anker), bestehend aus Spulenwicklungen, beim Erregen ein Magnetfeld erzeugt. Wenn Strom über die Bürsten und den Kommutator in die Rotorwicklung gelangt, interagiert das Magnetfeld des Rotors mit dem Magnetfeld des Stators und erzeugt eine Lorentzkraft, die den Rotor in Rotation versetzt. Während dieser Rotation ändert der Kommutator die Stromrichtung, wodurch der Rotor kontinuierlich in dieselbe Richtung eine Kraft erfährt und die Drehung aufrechterhalten wird. Durch elektromagnetische Induktion und Lorentzkraft wandelt der Gleichstrommotor elektrische Energie in mechanische Energie um. Aufgrund seiner ausgezeichneten Drehzahlregelung und seines hohen Anlaufmoments werden Gleichstrommotoren häufig in Elektrowerkzeugen, Fahrzeugen und Haushaltsgeräten eingesetzt. ![j124](./media/j124.png) Der 130-Motor kann per PWM geregelt werden. Im Einsatz müssen zwei Pins zur Steuerung verbunden werden. Er eignet sich für Anwendungsszenarien, in denen die Lüfterdrehzahl angepasst werden muss, wie z. B. Computerkühlung und industrielle Produktion. Er ist klein, leicht und einfach zu montieren, wodurch er sehr praktisch ist. **Schaltplan:** ![Img](./media/cou712.png) Der HR1124S-Chip unterstützt die Ansteuerung des Motors. Allerdings benötigt der Motor einen hohen Strom und kann nicht von einem Transistor, geschweige denn direkt von einem IO-Port, betrieben werden. Sobald an beiden Enden des Motors Spannung anliegt, kann er in Drehung versetzt werden. Die Drehrichtung des Motors hängt von der Polung der Spannung ab. Innerhalb des Nennspannungsbereichs gilt: Je höher die Spannung, desto schneller die Drehzahl; je niedriger die Spannung, desto langsamer die Drehzahl oder in manchen Fällen keine Drehung. Es gibt zwei Steuerungsarten: über High- und Low-Pegel (Drehen/Stopp) und über PWM (Drehzahlregelung). **Parameter:** - Betriebsspannung: DC 5V - Betriebstrom: (Max)400mA@5V - Maximale Leistung: 2W - Drehzahl: (16000+10%) U/min@5V ![Img](./media/2bottom.png) #### 4.3.1.3 Benötigte Komponenten | ![Img](./media/microbitV2.png)| ![Img](./media/ExpansionBoard.png) |![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 | |![Img](./media/motor.png) |![Img](./media/usb.png) |![Img](./media/4pin.png)| | 130 motor ×1 | micro USB cable ×1 | 4 pin wire ×2 | |![Img](./media/fan.png) |![Img](./media/batterycase.png)| ![Img](./media/AAbattery.png)| | fan ×1 | battery holder ×1 | AA-Batterie(**selbst bereitgestellt**) ×6 | #### 4.3.1.4 Verkabelungsdiagramm ⚠️ **Achten Sie beim Verkabeln auf die Kabelfarbe.** | 130 motor | wire color | 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 | wire color | 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 Codeablauf ![Img](./media/flow-chart-01.png) #### 4.3.1.6 Testcode ⚠️ **Tipp 1: Bevor Sie den Code auf das Microbit-Board herunterladen, importieren Sie bitte die Bibliotheksdatei “oled_ssd1306\.py” gemäß ** “[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) ⚠️ **Tipp 2: Der Schwellwert 28 in der if()-Bedingung kann je nach tatsächlicher Situation angepasst werden.** **Vollständiger 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 """ # import related libraries from microbit import * from oled_ssd1306 import * display.show(Image.HAPPY) # LED matrix displays a happy pattern # initialize and clear oled initialize() clear_oled() while True: clear_oled() # clear OLED Temperature = temperature() # Read microbit temperature sensor add_text(0, 0, "Temperature:") # Display the character string in the corresponding position of OLED add_text(13, 0, str(Temperature) + " C") # Display temperature in the corresponding position of OLED if Temperature >= 28: # when Temperature >= 28℃, fan rotates add_text(0, 2, "Fan on") # Display the character string in the corresponding position of OLED pin2.write_analog(500) # set P2 pin to analog 500 pin16.write_analog(0) # set P16 pin to analog 0 else: # or fan does not work add_text(0, 2, "Fan off") # Display the character string in the corresponding position of OLED pin2.write_analog(0) # set P2 pin to analog 0 pin16.write_analog(0) # set P16 pin to analog 0 sleep(1000) ``` ⚠️ **Tipp 3: Der Code verwendet C anstelle von ℃, da ℃ auf dem OLED fehlerhaft dargestellt wird.** ![Img](./media/line1.png) **Kurze Erklärung:** ① Importiere die Bibliotheken microbit und oled_ssd1306. ```Python from microbit import * from oled_ssd1306 import * ``` ② Die Microbit 5×5-LED-Matrix zeigt ![Img](./media/ab3.png). ```Python display.show(Image.HAPPY) # LED-Matrix zeigt ein fröhliches Muster ``` ③ Initialisiere die OLED-Pixels und lösche das OLED. ```Python initialize() # initialisiere OLED clear_oled() # lösche OLED ``` ④ Lese den Temperaturwert und zeige ihn auf dem OLED an. ```Python Temperature = temperature() # Lese micro:bit Temperatursensor add_text(0, 0, "Temperature:") # Zeige die Zeichenkette an der entsprechenden Position auf dem OLED an add_text(13, 0, str(Temperature) + " C") # Zeige die Temperatur an der entsprechenden Position auf dem OLED an ``` ⑤ Verzweigung: if()...else... Wenn die vom Sensor gemessene Temperatur größer oder gleich 28℃ ist, zeigt das OLED "Fan on" an und der Ventilator dreht sich. Andernfalls zeigt das OLED "Fan off" an und der Ventilator läuft nicht. ```Python if Temperature >= 28: # when Temperature >= 28℃, fan rotates add_text(0, 2, "Fan on") # Display the character string in the corresponding position of OLED pin2.write_analog(500) # set P2 pin to analog 500 pin16.write_analog(0) # set P16 pin to analog 0 else: # or fan does not work add_text(0, 2, "Fan off") # Display the character string in the corresponding position of OLED pin2.write_analog(0) # set P2 pin to analog 0 pin16.write_analog(0) # set P16 pin to analog 0 ``` ⑥ Verzögerung 1000 ms (1 s). ```Python sleep(1000) ``` #### 4.3.1.7 Testergebnis ![Img](./media/4top.png) Nach dem Verdrahten und Anschließen über das micro USB-Kabel sowie dem Verbinden mit einer externen Stromquelle (6 AA-Batterien) zur Sicherstellung einer ausreichenden Stromversorgung, klicken Sie auf “Flash”, um den Code auf das micro:bit Board zu laden. ![Img](./media/A123.png) Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit. ![Img](./media/A455.png) Die on-board 5×5-LED-Matrix zeigt ![Img](./media/ab3.png), und das OLED-Display zeigt Temperatur und Lüfterstatus in Echtzeit an. Wenn die Temperatur über 28℃ liegt, dreht sich der Ventilator. Andernfalls läuft der Ventilator nicht. ![Img](./media/dongtu-1.gif) ⚠️ **Hinweis: Der Code verwendet C anstelle von ℃, da ℃ auf dem OLED fehlerhaft dargestellt wird.** ⚠️ **Hinweis: Die Bauklötze im Experiment sind nicht in diesem Kit enthalten.** (**Tipp:** Wenn kein Ergebnis angezeigt wird, drücken Sie bitte die Reset-Taste des micro:bit Boards.) ![Img](./media/4bottom.png)