Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirsi?
Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni l’accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni e Concorsi Festivi: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
Ventilatore Intelligente
Questo progetto Arduino regola automaticamente la velocità del ventilatore per mantenere la temperatura entro un intervallo adeguato. Inoltre, gli utenti possono entrare in modalità manuale tramite un pulsante per far funzionare il ventilatore alla massima velocità.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Elite Explorer Kit |
300+ |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE COMPONENTI |
LINK ACQUISTO |
|---|---|
- |
|
- |
|
- |
Collegamenti
Nota
Per proteggere il Power Pack del Modulo di Alimentazione, caricalo completamente prima di utilizzarlo per la prima volta.
Schema Elettrico
Codice
Nota
Puoi aprire il file
06_smart_fan.inonel percorsoelite-explorer-kit-main\fun_project\06_smart_fandirettamente.Oppure copia questo codice nell’Arduino IDE.
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}
Come funziona?
Ecco una spiegazione passo-passo del codice:
Definizioni di Costanti e Variabili:
Usa
#defineper definire i pin per vari collegamenti hardware.TEMP_THRESHOLDè definito come 25°C, che è la soglia di temperatura per avviare il ventilatore.manualMode: Una variabile booleana che indica se è in modalità manuale.setup():Imposta la modalità per i pin rilevanti (output, input, input con pull-up). Inizialmente impostato su modalità automatica, quindi
LED_AUTOè acceso mentreLED_MANUALè spento.loop():Monitora lo stato del pulsante. Quando il pulsante viene premuto, cambia modalità e cambia lo stato del LED. In modalità manuale, il ventilatore funziona alla massima velocità. In modalità automatica, il codice legge prima il valore di tensione dal sensore di temperatura e lo converte in un valore di temperatura. Se la temperatura supera la soglia, la velocità del ventilatore viene regolata in base alla temperatura.
voltageToTemperature():Questa è una funzione ausiliaria utilizzata per convertire il valore di tensione dal sensore di temperatura in un valore di temperatura (in Celsius). La funzione utilizza la formula standard per un termistore per stimare la temperatura. Il valore restituito è in gradi Celsius.