Skip to content

Latest commit

 

History

History
291 lines (218 loc) · 8.95 KB

4.1.10_smart_fan_python.rst

File metadata and controls

291 lines (218 loc) · 8.95 KB

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!

4.1.10 Intelligenter Ventilator

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

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

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

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis.

image

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

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.

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.

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(MotorEnableGPIO.LOW)
        return 0
    if level>=4:
        level = 4
    GPIO.output(MotorEnableGPIO.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:

  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