夏ですね。まだ6月だというのに、真夏のような暑さです。
という訳で、ダイソーの扇風機にリズム風とランダム風(揺らぎ風?)を実装してみました。
ちょっとしたハンダ付けだけで割と簡単に制作できるので、電子工作初心者さんにもおすすめできる内容だと思います。
改造に使った100均扇風機
改造に使った100均扇風機は写真のものです。
首が上下に位置決めできるのと、USBで給電できるので、机に置いて使うのには非常に良いアイテムだと思います。
が、唯一の問題は直風当たりまくりなところ。
そこでSeeeduino Xiaoを使って、リズム風とランダム風が出せるように改造してみました。
改造方法概要
改造の方法は至って単純です。
モーターに還流ダイオードをつけた後、NchMOSFETを通してXIAOからPWM制御でモーターの回転数を調整しています。
分解&ハンダ付け
まずは裏面を剥がします
中身、DCブラシレスモーターなのですが、気にせずPWMしてしまいます。
下の写真はフライホイールダイオードをつけたところ。
続けてMOSFETを付けたら、回路側はほぼ完成です。
裏面の出来上がりはこんな感じ。xiaoをピンヘッダで外せるようにしたら、裏蓋に入らなくなってしまいました・・・。グルーガンで固定しておしまい、という完全に妥協状態です。
xiaoに直ハンダ付けすれば裏蓋はめれるようにもできるサイズなので、お好みで実装してみてください。
プログラム解説
リズム風のプログラム
リズム風は3秒したら徐々に風量を上げて、最大風量で3秒回した後、徐々に風量を落とし、3秒停止、また徐々に風量を上げる、という内容にしました。プログラムは下記です。
void rhythmAir(){
int i = 0;
for (i = minAirFlow; i < 255; i = i + 1)
{
analogWrite(fanPin, i);
delay(10);
}
delay(3000);
for (i = 255; i > minAirFlow; i = i - 1)
{
analogWrite(fanPin, i);
delay(10);
}
analogWrite(fanPin, 0);
delay(3000);
}
ランダム風のプログラム
リズム風でも、ずっと当たっていると良くなさそうなので作ったのがランダム風です。
ランダム風はインターバル時間、最大風量、徐々に風量を上げる時間、最大風量の時間、徐々に風量を下げる時間、をそれぞれrand()関数で可変しています。(雑なプログラムですみません)
void randomAir(){
unsigned long startTime = 0;
unsigned long rizeOrFallTime = 0;
int currentAirFlow = 0;
int maxAirFlow = 0;
unsigned long rizeDulationMillis = 0;
unsigned long fullAirFlowMillis = 0;
unsigned long fallDulationMillis = 0;
unsigned long intervalMillis = 0;
maxAirFlow = 100 + rand() % (155);
rizeDulationMillis = ((1 + rand() % (6)) * 1000);
fullAirFlowMillis = 1000 + rand() % (3000);
fallDulationMillis = ((1 + rand() % (6)) * 1000);
intervalMillis = 2000 + rand() % (17000);
startTime = millis();
rizeOrFallTime = startTime + rizeDulationMillis;
Serial.printf("rizeDulationMillis = %lu\n", rizeDulationMillis);
while (millis() < rizeOrFallTime){
currentAirFlow = minAirFlow + (maxAirFlow - minAirFlow+1) * ((millis() - startTime)*1000 / rizeDulationMillis)/1000;
Serial.printf("currentAirFlow = %d maxAirFlow = %d rizeDulationMillis = %lu rate = %lu\n", currentAirFlow, maxAirFlow, rizeDulationMillis, ((millis() - startTime)*1000 / rizeDulationMillis));
analogWrite(fanPin, currentAirFlow);
}
Serial.printf("fullAirFlowMillis = %lu\n", fullAirFlowMillis);
delay(fullAirFlowMillis);
startTime = millis();
rizeOrFallTime = startTime + fallDulationMillis;
while (millis() < rizeOrFallTime)
{
currentAirFlow = maxAirFlow - (maxAirFlow - minAirFlow+1) * ((millis() - startTime)*1000 / fallDulationMillis)/1000;
Serial.printf("currentAirFlow = %d maxAirFlow = %d fallDulationMillis = %lu rate = %lu\n", currentAirFlow, maxAirFlow , fallDulationMillis, 1000 - ((millis() - startTime) * 1000 / fallDulationMillis));
analogWrite(fanPin, currentAirFlow);
}
analogWrite(fanPin, 0);
Serial.printf("intervalMillis = %lu\n", intervalMillis);
delay(intervalMillis);
}
seeeduino xiaoを使ったプログラム全体は下記に保存してあります。(PlatformIO用です)
ご興味あれば使ってみてください。
まとめ:ダイソーの扇風機にリズム風&自然風をつけてみた
以上、ダイソーの扇風機にリズム風&ランダム風をつけてみた改造記事でした。
ランダムな風が出せるようになったので、かなり使いやすくなりました。
夏本番に入る前に、皆様も試してみてはいかがでしょうか♪