暑いので、PCから抜いたFANで扇風機を作ろうと、、、
手元にあったのが、9cmのDC FAN 4ピンでPWMで制御可能との事
PINハイは下記と通り。
PWM端子はプルアップされており、12Vがそのまま出てきました。
Arduinoを壊すといけないので、Trをつけて駆動。
という事で、Arduinoの古いスケッチを漁る。
確かボリュームでPWM制御を作った記憶がある。
ありました。下記の感じでできます。
これは、PWMの周期を変える事が目的のソースコードです。
PWM周期を変えなければもっと簡単だと思います。
最初5kHz周期にしてみたが、FANの風の感じが荒く。。。
50Hzにしたら細かい制御ができるような気がします。
#include <avr/io.h>
#define PWMPin 10
#define dimmerPIN A0
#define LEDPin 13
unsigned int frq = 50; // 周波数
float duty = 0.0; // 指定したいデューティ比
int dimmerValue = 0;
int oldValue = 0;
int ledValue = 0;
int dledpin = 0;
void setup() {
pinMode(PWMPin, OUTPUT);
pinMode(LEDPin, OUTPUT);
pinMode(dimmerPIN, INPUT);
// モード指定
TCCR1A = 0b00100001;
TCCR1B = 0b00010010;
// TOP値指定
OCR1A = (unsigned int)(1000000 / frq);
Serial.begin(9600);
digitalWrite(LEDPin, LOW);
}
void setpwm(int advalue){
if(advalue <= 115) duty = 0;
else if(advalue >= 908) duty = 1;
else duty = ((float)advalue-115)/8/100;
Serial.print("Duty ");
Serial.println(duty);
OCR1B = (unsigned int)(1000000 / frq * duty);
delay(100);
}
void loop() {
int i;
for(i=0;i<=4;i++)
{
dimmerValue = dimmerValue + analogRead(dimmerPIN);
delay(20);
}
dimmerValue = dimmerValue/5;
if( dimmerValue == oldValue){
dimmerValue = 0;
}
else {
oldValue = dimmerValue;
setpwm(dimmerValue);
Serial.println("Change dimmerValue");
Serial.println(dimmerValue);
dimmerValue = 0;
}
delay(100);
}