.. note::
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
- **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!
.. _4.1.10_py:
4.1.10 Intelligenter Ventilator
================================
.. note::
.. image:: ../img/mcp3008_and_adc0834.jpg
:width: 25%
:align: left
Abhängig von Ihrer Kit-Version identifizieren Sie bitte, ob Sie **ADC0834** oder **MCP3008** haben, und fahren Sie mit dem entsprechenden Abschnitt fort.
Einführung
-----------------
In diesem Projekt werden wir Motoren, Tasten und Thermistoren verwenden, um einen manuellen + automatischen intelligenten Ventilator zu bauen, dessen Windgeschwindigkeit einstellbar ist.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir folgende Komponenten.
.. image:: ../img/list_Smart_Fan.png
:align: center
Es ist sicherlich praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Name
- ARTIKEL IN DIESEM KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Sie können sie auch einzeln über die untenstehenden Links kaufen.
.. list-table::
:widths: 30 20
:header-rows: 1
* - KOMPONENTENBESCHREIBUNG
- KAUF-LINK
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_resistor`
- |link_resistor_buy|
* - :ref:`cpn_power_module`
- \-
* - :ref:`cpn_thermistor`
- |link_thermistor_buy|
* - :ref:`cpn_l293d`
- \-
* - :ref:`cpn_adc0834`
- \-
* - :ref:`cpn_button`
- |link_button_buy|
* - :ref:`cpn_motor`
- |link_motor_buy|
Schaltplan
------------------------
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO18 Pin 12 1 18
GPIO27 Pin 13 2 27
GPIO22 Pin 15 3 22
GPIO5 Pin 29 21 5
GPIO6 Pin 31 22 6
GPIO13 Pin 33 23 13
============ ======== ======== ===
.. image:: ../img/Schematic_three_one4.png
:align: center
Experimentelle Verfahren
-----------------------------
**Schritt 1:** Bauen Sie den Schaltkreis.
.. image:: ../img/image245.png
.. note::
Das Strommodul kann eine 9V-Batterie mit der 9V-Batteriehalterung aus dem Kit verwenden. Setzen Sie den Jumper des Strommoduls in die 5V-Busleisten des Breadboards.
.. image:: ../img/image118.jpeg
:align: center
**Schritt 2**: Wechseln Sie in den Ordner des Codes.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Schritt 3**: Starten.
.. raw:: html
.. code-block::
sudo python3 4.1.10_SmartFan.py
Wenn der Code ausgeführt wird, starten Sie den Ventilator durch Drücken der Taste. Jedes Mal, wenn Sie drücken, wird die Geschwindigkeitsstufe um 1 erhöht oder verringert. Es gibt **5** Geschwindigkeitsstufen: **0~4**. Wenn auf die 4. Geschwindigkeitsstufe eingestellt ist und Sie die Taste drücken, stoppt der Ventilator mit einer Windgeschwindigkeit von **0**.
Wenn sich die Temperatur um mehr als 2℃ erhöht oder verringert, wird die Geschwindigkeit automatisch um 1 Stufe schneller oder langsamer.
Code
--------
.. note::
Sie können den untenstehenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Aber zuerst müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` gehen. Nach dem Ändern des Codes können Sie ihn direkt ausführen, um den Effekt zu sehen.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
import ADC0834
import math
# Set up pins
MotorPin1 = 5
MotorPin2 = 6
MotorEnable = 13
BtnPin = 22
def setup():
global p_M1,p_M2
ADC0834.setup()
GPIO.setmode(GPIO.BCM)
GPIO.setup(MotorPin1, GPIO.OUT)
GPIO.setup(MotorPin2, GPIO.OUT)
p_M1=GPIO.PWM(MotorPin1,2000)
p_M2=GPIO.PWM(MotorPin2,2000)
p_M1.start(0)
p_M2.start(0)
GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(BtnPin, GPIO.IN)
def temperature():
analogVal = ADC0834.getResult()
Vr = 5 * float(analogVal) / 255
Rt = 10000 * Vr / (5 - Vr)
temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))
Cel = temp - 273.15
Fah = Cel * 1.8 + 32
return Cel
def motor(level):
if level == 0:
GPIO.output(MotorEnable, GPIO.LOW)
return 0
if level>=4:
level = 4
GPIO.output(MotorEnable, GPIO.HIGH)
p_M1.ChangeDutyCycle(level*25)
return level
def main():
lastState=0
level=0
markTemp = temperature()
while True:
currentState =GPIO.input(BtnPin)
currentTemp=temperature()
if currentState == 1 and lastState == 0:
level=(level+1)%5
markTemp = currentTemp
time.sleep(0.5)
lastState=currentState
if level!=0:
if currentTemp-markTemp <= -2:
level = level -1
markTemp=currentTemp
if currentTemp-markTemp >= 2:
level = level +1
markTemp=currentTemp
level = motor(level)
def destroy():
GPIO.output(MotorEnable, GPIO.LOW)
p_M1.stop()
p_M2.stop()
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()
**Code-Erklärung**
.. code-block:: python
def temperature():
analogVal = ADC0834.getResult()
Vr = 5 * float(analogVal) / 255
Rt = 10000 * Vr / (5 - Vr)
temp = 1/(((math.log(Rt / 10000)) / 3950) + (1 / (273.15+25)))
Cel = temp - 273.15
Fah = Cel * 1.8 + 32
return Cel
``temperture()`` funktioniert, indem es Thermistor-Werte, die vom **ADC0834** gelesen werden, in Temperaturwerte umwandelt. Weitere Details finden Sie unter :ref:`2.2.2_py`.
.. code-block:: python
def motor(level):
if level == 0:
GPIO.output(MotorEnable, GPIO.LOW)
return 0
if level>=4:
level = 4
GPIO.output(MotorEnable, GPIO.HIGH)
p_M1.ChangeDutyCycle(level*25)
return level
Diese Funktion steuert die Drehgeschwindigkeit des Motors. Der Bereich des **Hebels**: **0-4** (Stufe **0** stoppt den arbeitenden Motor). Eine Stufenanpassung entspricht einer **25%** Änderung der Windgeschwindigkeit.
.. code-block:: python
def main():
lastState=0
level=0
markTemp = temperature()
while True:
currentState =GPIO.input(BtnPin)
currentTemp=temperature()
if currentState == 1 and lastState == 0:
level=(level+1)%5
markTemp = currentTemp
time.sleep(0.5)
lastState=currentState
if level!=0:
if currentTemp-markTemp <= -2:
level = level -1
markTemp=currentTemp
if currentTemp-markTemp >= 2:
level = level +1
markTemp=currentTemp
level = motor(level)
Die Funktion **main()** enthält den gesamten Programmvorgang, wie folgt dargestellt:
1) Ständiges Auslesen des Tastenzustands und der aktuellen Temperatur.
2) Jeder Tastendruck erhöht die Stufe um **+1** und gleichzeitig wird die Temperatur aktualisiert. Der **Level** reicht von **1~4**.
3) Während der Ventilator arbeitet (die Stufe ist **nicht 0**), wird die Temperatur überwacht. Eine Änderung von **+2℃** führt zur Erhöhung oder Verringerung der Stufe.
4) Der Motor ändert die Drehgeschwindigkeit entsprechend dem **Level**.
Phänomen-Bild
------------------------
.. image:: ../img/image246.png
:align: center