Arduino - 利用 pwm 來控制一般 pc 風扇
最近因為工作關係遇到一個需求需要控制風扇的轉速與相關應用,於是正式踏入 Arduino 研究領域,因為本身是非電子科出身,許多相關基本電學基礎及電子學均缺乏,也藉此從零開始學起,包含基礎電子電路、歐姆定律、電阻、電容、二極體、電晶體、麵包板、洞洞板、烙鐵焊接、vcc、gnd、gpio、直流電、交流電、直流馬達、步進馬達、伺服馬達、各類感測器 sensor 模組等,不過基本電學、電子學、電工、工業室內配線、工業配線等有太多專業知識,是需要不斷的去學習了解的,在此就不一一介紹,回過頭來思考本次專案,我們將利用 Arduino uno 板來連接 pc 風扇並控制其轉速,這邊可能需要注意,pc 風扇有分為 cpu 風扇、機殼風扇,pin腳有4pin及3pin,如果只想要讓風扇轉動,3pin即可,僅需在 Arduino 5v pin 腳位(vcc電源)及 gnd(接地) pin 腳位插上電線(通常是杜邦線),那麼風扇就可以轉動,但無法控制轉速,於是我們來研究 4pin 風扇,這四個 pin 腳會包含 vcc、gnd、sensor、pwm等,其中sensor 我們不需要只需要 pwm、vcc、gnd詳細說明如下
Arduino uno *1
4pin fan *1
可變電阻 *1
麵包板 *1
顯波器 *1
杜邦線 *13
程式碼如下
int fan = 9; //設定 Arduino 風扇腳位在 9 pin
void setup() {
// 初始化傳輸速率設定為9600
Serial.begin(9600);
pinMode(fan, OUTPUT); //定義 pinmode 為 pin 9 OUTPUT 輸出
}
void loop() {
// 讀取輸入 on analog pin 0:
int pot = analogRead(A0); //設定A0 值為讀取類比訊號
int fan_speed = pot * (255 / 1023.0); //這個公式將會計算風扇速度的pwm輸出介於 0-255
analogWrite(fan,fan_speed); //我們設定 9 pin 為 pwm 風扇速度輸出
Serial.println(fan_speed); //利用 Serial.println函數可以在序列監控視窗中輸出風扇速度的值
delay(1000); // 我希望每秒鐘可以延遲印出值
}
實驗結果:
不同廠牌的風扇 pwm 轉速會不同,實際改接 12v 變壓器也會有影響轉速。
參考網址
https://technoobsite.wordpress.com/2016/01/23/fan-speed-control-with-arduino-using-a-potentiometer/
Arduino uno *1
4pin fan *1
可變電阻 *1
麵包板 *1
顯波器 *1
杜邦線 *13
程式碼如下
int fan = 9; //設定 Arduino 風扇腳位在 9 pin
void setup() {
// 初始化傳輸速率設定為9600
Serial.begin(9600);
pinMode(fan, OUTPUT); //定義 pinmode 為 pin 9 OUTPUT 輸出
}
void loop() {
// 讀取輸入 on analog pin 0:
int pot = analogRead(A0); //設定A0 值為讀取類比訊號
int fan_speed = pot * (255 / 1023.0); //這個公式將會計算風扇速度的pwm輸出介於 0-255
analogWrite(fan,fan_speed); //我們設定 9 pin 為 pwm 風扇速度輸出
Serial.println(fan_speed); //利用 Serial.println函數可以在序列監控視窗中輸出風扇速度的值
delay(1000); // 我希望每秒鐘可以延遲印出值
}
實驗結果:
不同廠牌的風扇 pwm 轉速會不同,實際改接 12v 變壓器也會有影響轉速。
參考網址
https://technoobsite.wordpress.com/2016/01/23/fan-speed-control-with-arduino-using-a-potentiometer/
您好!想請問你4線式的pwm風扇如果單純接上電源要如何回傳轉速到ARDUINO裡並顯示出來?有程式碼嗎?可以寄給我嗎?vu04leo@gmail.com 最近在研究
回覆刪除