日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于Arduino的自动调速风扇

發(fā)布時間:2024/3/26 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Arduino的自动调速风扇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好久沒有更新了,家里實在太亂,最近趁著618活動,買了一堆收納抽屜和置物架,把家里徹底收拾了一下,然后客廳就成了這個奇葩樣子,注孤生的節(jié)奏了。

話不多說,夏天到了,天氣逐漸熱起來,風扇成了必不可少的消暑利器。

本文主要介紹兩種基于Arduino的風扇自動調速方案,使用的是5V的USB風扇,物美價廉還省電。

方案一是通過舵機控制旋鈕變壓器實現調速,方案二通過脈沖寬度調制(PWM)實現調速。

方案一:旋鈕變壓器

材料清單

名稱數量淘寶單價
Arduino UNO115
USB風扇調速器16
DH11溫濕度傳感器14
SG90S舵機17.5
紅外接收模塊加遙控器13.3

所用零件均可在淘寶買到,價格時有波動。

思路是通過DH11溫濕度傳感器測量溫度,根據溫度控制舵機的角度,舵機的轉軸與USB風扇調速器的旋鈕連接,帶動旋鈕轉動,進而控制風扇的輸入電壓,實現轉速控制。

此外,增加了紅外控制,用于遠程開關風扇,切換模式。

接線

代碼

需要紅外控制模塊DH11溫濕度傳感器的庫,代碼及庫的下載鏈接在文末。

3種紅外信號分別對應全開、全關和自動模式。

自動模式會根據室溫調節(jié)風扇的轉速。

#include <dht.h> //調用dh11溫濕度傳感器的庫 #include <IRremote.h> //調用紅外控制的庫 #include <Servo.h> //調用舵機控制的庫dht DHT; Servo servo;#define RECV_PIN 9 //定義紅外接收器針腳 IRrecv irrecv(RECV_PIN); decode_results results;#define dataPin 10 //定義溫濕度傳感器針腳 int servoPin = 7; //定義舵機針腳 char value; //紅外接收器接收的數值 float t; //溫濕度傳感器測量的溫度數值 int a = 0; int b = 0; //a、b用于切換模式void setup() {irrecv.enableIRIn();servo.attach(servoPin);servo.write(0);delay(1000);servo.detach();//Serial.begin(9600); }void loop() {if (irrecv.decode(&results)) {if (results.value == 16753245) {a = 1;}if (results.value == 16736925) {a = 0;b = 0;}if (results.value == 16769565) {a = 0;b = 1;}irrecv.resume();}if (a == 0 && b == 0) {servo.attach(servoPin);servo.write(0);delay(1000);servo.detach(); //關閉風扇}if (a == 0 && b == 1) {servo.attach(servoPin);servo.write(180);delay(1000);servo.detach(); //打開風扇}if (a == 1) {int readData = DHT.read11(dataPin);t = DHT.temperature;if (t <= 26) {servo.attach(servoPin);delay(1);servo.write(0);delay(500);servo.detach(); //自動模式低于26度關風扇}else if (t > 26 && t <= 28) {servo.attach(servoPin);delay(1);servo.write(60);delay(500);servo.detach(); //自動模式26-28度一檔}else if (t > 28 && t <= 30) {servo.attach(servoPin);delay(1);servo.write(120);delay(500);servo.detach(); //自動模式28-30度二檔}else if (t > 30 && t <= 40) {servo.attach(servoPin);delay(1);servo.write(180);delay(500);servo.detach(); //自動模式高于30度全開}//Serial.println(t);delay(1000);} }

方案二:脈沖寬度調制(PWM)

脈沖寬度調制(pulse width modulation)通過快速打開和關閉電源來調整發(fā)送到電子設備的平均電壓值。

平均電壓取決于占空比占空比是指在一個脈沖循環(huán)內,通電時間相對于總時間所占的比例。

可以通過Arduino的脈寬調制輸出連接L298N電機驅動模塊,并通過控制脈寬調制輸出來控制電機的速度。

通過下圖可以看出,輸入電壓為12V,當占空比為0.25時,平均電壓值為3V;當占空比為0.5時,平均電壓值為6V。

材料清單

名稱數量淘寶單價
Arduino UNO115
L298N電機控制模塊16
DH11溫濕度傳感器14

所用零件均可在淘寶買到,價格時有波動。

仍然是通過DH11溫濕度傳感器測量溫度,然后根據溫度計算占空比,改變L298N電機控制模塊的平均輸出電壓,實現轉速控制。

接線

代碼

需要L298N電機控制模塊DH11溫濕度傳感器的庫,代碼及庫的下載鏈接在文末。

通過map函數將室溫轉換為占空比。

motorSpeed = map(t, tempMin, tempMax, speedMin, speedMax);

以本文為例

motorSpeed = map(t, 28, 50, 30, 100);

上文已經交代,占空比是指在一個脈沖循環(huán)內,通電時間相對于總時間所占的比例。

即溫度從28變化到50,占空比從0.3變化到1。

#include <Robojax_L298N_DC_motor.h> //調用L298N模塊的庫 #include <dht.h> //調用dh11溫濕度傳感器的庫dht DHT; #define IN1 2 #define IN2 4 #define ENA 3 //必須是帶有~符號的PWM針腳const int CCW = 2; //反轉 const int CW = 1; //正轉 const int motorDirection = CW; #define motor1 1 Robojax_L298N_DC_motor motor(IN1, IN2, ENA, true);#define dataPin 10 //定義溫濕度傳感器針腳 float t; //溫濕度傳感器測量的溫度數值const float tempMin = 28.0; //溫度下限 const int speedMin = 30; //轉速下限 const float tempMax = 50.0; //溫度上限 const int speedMax = 100; //轉速上限int motorSpeed; //根據溫度計算出的轉速void setup() {motor.begin(); }void loop() {tempToSpeed();motor.rotate(motor1, motorSpeed, motorDirection);delay(500); }void tempToSpeed() {float readData = DHT.read11(dataPin);t = DHT.temperature;motorSpeed = map(t, tempMin, tempMax, speedMin, speedMax);if (t < tempMin){motorSpeed = 0;motor.brake(1); //溫度低于下限停止}if (t > tempMax){motorSpeed = 100; //溫度高于上限全開} }

代碼及庫下載的鏈接

  • 方案一代碼
    提取碼:vgwz
  • 方案二代碼
    提取碼:akgf
  • 紅外控制模塊庫
    提取碼:ldhx
  • DH11溫濕度傳感器庫
    提取碼:9x70
  • L298N電機控制模塊庫
    提取碼:8vek

本人菜鳥,發(fā)現錯誤,歡迎指出,謝謝大家。

總結

以上是生活随笔為你收集整理的基于Arduino的自动调速风扇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。