改造:ダイソーのUSB扇風機にリズム風&ランダム風をつけてみた

DAISOの扇風機売り場

夏ですね。まだ6月だというのに、真夏のような暑さです。

という訳で、ダイソーの扇風機にリズム風とランダム風(揺らぎ風?)を実装してみました。

ちょっとしたハンダ付けだけで割と簡単に制作できるので、電子工作初心者さんにもおすすめできる内容だと思います。

改造に使った100均扇風機

改造に使った100均扇風機は写真のものです。
首が上下に位置決めできるのと、USBで給電できるので、机に置いて使うのには非常に良いアイテムだと思います。

が、唯一の問題は直風当たりまくりなところ。

そこでSeeeduino Xiaoを使って、リズム風とランダム風が出せるように改造してみました。

改造方法概要

改造の方法は至って単純です。

モーターに還流ダイオードをつけた後、NchMOSFETを通してXIAOからPWM制御でモーターの回転数を調整しています。

分解&ハンダ付け

まずは裏面を剥がします

改造:ダイソーの扇風機にリズム風&ランダム風をつけてみた1
裏面を分解したところ。(蓋がはめ込み式なので、基本的にバキッと壊さないと剥がせません)

中身、DCブラシレスモーターなのですが、気にせずPWMしてしまいます。
下の写真はフライホイールダイオードをつけたところ。

改造:ダイソーの扇風機にリズム風&ランダム風をつけてみた2
フライホイールダイオードをつける(Diは部屋に転がっていた適当なもの)

続けてMOSFETを付けたら、回路側はほぼ完成です。

改造:ダイソーの扇風機にリズム風&ランダム風をつけてみた3
MOSFETを取り付けたところ

裏面の出来上がりはこんな感じ。xiaoをピンヘッダで外せるようにしたら、裏蓋に入らなくなってしまいました・・・。グルーガンで固定しておしまい、という完全に妥協状態です。

xiaoに直ハンダ付けすれば裏蓋はめれるようにもできるサイズなので、お好みで実装してみてください。

改造:ダイソーの扇風機にリズム風&ランダム風をつけてみた4
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用です)
ご興味あれば使ってみてください。

まとめ:ダイソーの扇風機にリズム風&自然風をつけてみた

ランダム風が出るように改造したUSB扇風機

以上、ダイソーの扇風機にリズム風&ランダム風をつけてみた改造記事でした。

ランダムな風が出せるようになったので、かなり使いやすくなりました。

夏本番に入る前に、皆様も試してみてはいかがでしょうか♪

ぼのかば

最初にプログラムしたのは相撲ロボット用のZ80アセンブリ(Aki-80)。
以後,PICアセンブリ>PIC C と渡り歩く。

好きなICのタイプは8pinDIP。

一応、電気科卒
*ブログ内の情報はMacOSX上での操作に基づきます。

作例
PICを少々。