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 [] und treten Sie heute bei!
In diesem Projekt werden wir Motoren, Tasten und Thermistoren verwenden, um einen manuellen + automatischen intelligenten Ventilator zu bauen, dessen Windgeschwindigkeit einstellbar ist.
Für dieses Projekt benötigen wir folgende Komponenten.
Es ist sicherlich praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:
Name | ARTIKEL IN DIESEM KIT | LINK |
---|---|---|
Raphael Kit | 337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG | KAUF-LINK |
---|---|
cpn_gpio_board |
|
cpn_breadboard |
|
cpn_wires |
|
cpn_resistor |
|
cpn_power_module |
- |
cpn_thermistor |
|
cpn_l293d |
- |
cpn_adc0834 |
- |
cpn_button |
|
cpn_motor |
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 |
Schritt 1: Bauen Sie den Schaltkreis.
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.
Schritt 2: Wechseln Sie in den Ordner des Codes.
cd ~/raphael-kit/python
Schritt 3: Starten.
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.
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.
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
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 2.2.2_py
.
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.
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:
- Ständiges Auslesen des Tastenzustands und der aktuellen Temperatur.
- Jeder Tastendruck erhöht die Stufe um +1 und gleichzeitig wird die Temperatur aktualisiert. Der Level reicht von 1~4.
- 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.
- Der Motor ändert die Drehgeschwindigkeit entsprechend dem Level.