Bemerkung

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 [ hier ] und treten Sie heute bei!

Smarter Ventilator

Dieses Arduino-Projekt passt die Geschwindigkeit des Ventilators automatisch an, um die Temperatur in einem geeigneten Bereich zu halten. Zusätzlich können Benutzer über einen Knopf in den manuellen Modus wechseln und den Ventilator mit maximaler Geschwindigkeit betreiben.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Elite Explorer Kit

300+

Elite Explorer Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

Arduino Uno R4 WiFi

-

Steckbrett

KAUFEN

Jumperkabel

KAUFEN

Widerstand

KAUFEN

LED

KAUFEN

Knopf

KAUFEN

Thermistor

KAUFEN

Gleichstrommotor

KAUFEN

TA6586 - Motorsteuerungs-Chip

-

Stromversorgungsmodul

-

Verdrahtung

../_images/06_smart_fan_bb.png

Schaltplan

../_images/06_smart_fan_schematic.png

Code

Bemerkung

  • Sie können die Datei 06_smart_fan.ino direkt unter dem Pfad elite-explorer-kit-main\fun_project\06_smart_fan öffnen.

  • Oder kopieren Sie diesen Code in die Arduino IDE.

06_smart_fan.ino
 1/*
 2  This code controls a DC motor fan based on temperature readings from a thermistor. 
 3  It includes a manual override feature using a button. In automatic mode, the fan speed 
 4  is controlled according to the temperature. In manual mode, the fan runs at full speed. 
 5  LEDs are used to indicate the current mode (auto or manual).
 6
 7  Board: Arduino Uno R4 
 8  Component: LED, button, thermistor, and DC motor.
 9*/
10
11// Pin assignments
12#define MOTOR_PIN 9         // PWM compatible pin for DC motor
13#define TEMP_SENSOR_PIN A0  // Analog pin for thermistor
14#define BUTTON_PIN 2        // Digital pin for button
15#define LED_AUTO 3          // Digital pin for AUTO mode LED
16#define LED_MANUAL 4        // Digital pin for MANUAL mode LED
17
18#define TEMP_THRESHOLD 25  // Temperature threshold for fan activation in Celsius
19
20bool manualMode = false;
21
22void setup() {
23
24  Serial.begin(9600);
25
26  // Set pin modes
27  pinMode(MOTOR_PIN, OUTPUT);
28  pinMode(TEMP_SENSOR_PIN, INPUT);
29  pinMode(BUTTON_PIN, INPUT_PULLUP);
30  pinMode(LED_AUTO, OUTPUT);
31  pinMode(LED_MANUAL, OUTPUT);
32
33  // Initialize LEDs
34  digitalWrite(LED_AUTO, HIGH);  // Auto mode is the default
35  digitalWrite(LED_MANUAL, LOW);
36}
37
38void loop() {
39  static bool lastButtonState = HIGH;  // Last state of the button
40
41  // Check for button press
42  bool currentButtonState = digitalRead(BUTTON_PIN);
43  if (currentButtonState == LOW && lastButtonState == HIGH) {
44    manualMode = !manualMode;  // Toggle mode
45    // Update LEDs based on mode
46    if (manualMode) {
47      digitalWrite(LED_AUTO, LOW);
48      digitalWrite(LED_MANUAL, HIGH);
49    } else {
50      digitalWrite(LED_AUTO, HIGH);
51      digitalWrite(LED_MANUAL, LOW);
52    }
53    delay(200);  // Debounce delay
54  }
55  lastButtonState = currentButtonState;
56
57  // Fan control logic
58  if (manualMode) {
59    analogWrite(MOTOR_PIN, 255);  // Full speed in manual mode
60  } else {
61    float voltage = analogRead(TEMP_SENSOR_PIN) * 5.0 / 1023.0;
62    float temperature = voltageToTemperature(voltage);  // Convert voltage to temperature
63    if (temperature > TEMP_THRESHOLD) {
64      // Scale fan speed based on temperature
65      analogWrite(MOTOR_PIN, map(temperature, TEMP_THRESHOLD, 40, 100, 255));
66    } else {
67      analogWrite(MOTOR_PIN, 0);  // Turn off the fan
68    }
69  }
70}
71
72
73// Convert voltage reading from thermistor to temperature in Celsius
74float voltageToTemperature(float voltage) {
75  // Define constants
76  const float referenceResistor = 10000;  // the 'other' resistor
77  const float beta = 3950;                // Beta value (Typical Value)
78  const float nominalTemperature = 25;    // Nominal temperature for calculating the temperature coefficient
79  const float nominalResistance = 10000;  // Resistance value at nominal temperature
80
81  // Convert the reading to resistance
82  float Rt = referenceResistor * (5.0 - voltage) / voltage;
83
84  // Use the Beta parameter equation to calculate temperature in Kelvin
85  float tempK = 1 / (((log(Rt / nominalResistance)) / beta) + (1 / (nominalTemperature + 273.15)));
86
87  // Convert to Celsius
88  float tempC = tempK - 273.15;
89
90  // Print temperature in Celsius to the Serial Monitor
91  Serial.print("Temp: ");
92  Serial.print(tempC);
93  Serial.println(" degree Celsius");
94
95  // Convert to Fahrenheit
96  // float tempF = tempC * 1.8 + 32;
97
98  return tempC;
99}

Wie funktioniert des?

Hier ist eine schrittweise Erklärung des Codes:

  1. Konstanten- und Variablendefinitionen:

    Verwenden Sie #define, um die Pins für verschiedene Hardwareverbindungen zu definieren. TEMP_THRESHOLD ist als 25°C definiert, was die Temperaturschwelle für den Start des Ventilators ist. manualMode: Eine boolesche Variable, die angibt, ob sich das Gerät im manuellen Modus befindet.

  2. setup():

    Stellen Sie den Modus für relevante Pins ein (Ausgang, Eingang, Eingang mit Pull-up). Anfangs auf automatischen Modus eingestellt, sodass LED_AUTO leuchtet, während LED_MANUAL ausgeschaltet ist.

  3. loop():

    Überwachen Sie den Zustand des Knopfs. Wenn der Knopf gedrückt wird, wechselt er den Modus und ändert den Status der LED. Im manuellen Modus arbeitet der Ventilator mit maximaler Geschwindigkeit. Im automatischen Modus liest der Code zuerst den Spannungswert vom Temperatursensor und wandelt ihn in einen Temperaturwert um. Wenn die Temperatur die Schwelle überschreitet, wird die Geschwindigkeit des Ventilators anhand der Temperatur eingestellt.

  4. voltageToTemperature():

    Dies ist eine Hilfsfunktion, die verwendet wird, um den Spannungswert vom Temperatursensor in einen Temperaturwert (in Celsius) umzuwandeln. Die Funktion verwendet die Standardformel für einen Thermistor, um die Temperatur zu schätzen. Der Rückgabewert ist in Grad Celsius.