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+

Elite Explorer Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE COMPONENTI

LINK ACQUISTO

Arduino Uno R4 WiFi

-

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistenza

ACQUISTA

LED

ACQUISTA

Pulsante

ACQUISTA

Termistore

ACQUISTA

Motore DC

ACQUISTA

TA6586 - Chip Driver del Motore

-

Modulo di Alimentazione

-

Collegamenti

Nota

Per proteggere il Power Pack del Modulo di Alimentazione, caricalo completamente prima di utilizzarlo per la prima volta.

../_images/06_smart_fan_bb.png

Schema Elettrico

../_images/06_smart_fan_schematic.png

Codice

Nota

  • Puoi aprire il file 06_smart_fan.ino nel percorso elite-explorer-kit-main\fun_project\06_smart_fan direttamente.

  • Oppure copia questo codice nell’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}

Come funziona?

Ecco una spiegazione passo-passo del codice:

  1. Definizioni di Costanti e Variabili:

    Usa #define per 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.

  2. setup():

    Imposta la modalità per i pin rilevanti (output, input, input con pull-up). Inizialmente impostato su modalità automatica, quindi LED_AUTO è acceso mentre LED_MANUAL è spento.

  3. 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.

  4. 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.