ソリッドステートリレーを使った1/fゆらぎ扇風機:注目デバイスで組み込み開発をアップグレード(14)(2/2 ページ)
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第14回は、ソリッドステートリレーとArduino、一般的な扇風機を組み合わせて1/fゆらぎ扇風機を作る。
“1/fゆらぎ”のプログラム
リスト1は、1/fゆらぎを生成する関数によって扇風機がオンになるまでの時間とオフにするまでの時間を制御して、1/fゆらぎを扇風機で実現するためのアルゴリズムのコードになります。オンの時間がオフの時間に依存することなく、それぞれ個別の変数を使っています。
ただし、以降のコードの説明ではオンの時間とオフの時間が依存関係にあるアルゴリズムについても提示します。とにかく1/fゆらぎを理論通りにアルゴリズムで実現するのも大切なことですが、要は人が気持ちいいかどうかが最終的な判断基準だと思いますので、読者のみなさんでコードをいろいろといじってみて、自分流の心地良さを探求してください。
なお、リスト1はArduino IDEで開発したコードです。ここからの説明はArduinoでの開発経験が前提になっています。
void setup() { randomSeed(analogRead(0)); } void loop() { int onFan,offFan; onFan = fluct(onFan); delay(onFan*10); digitalWrite(13,1); offFan = fluct(offFan); delay(offFan*10); digitalWrite(13,0); } int fluct(int x) { if (x < 0.5) x = x + 2 * x * x; else x = x - 2 * (1.0 - x) * (1.0 - x); if (x < 0.05 || x > 0.95) x = random(100, 900); return (x); }
1〜4行目はsetup関数でリセットが一度だけ実行される関数です。ここでは0番のアナログ入力値を基に乱数の初期設定をしています。この値が毎回振れると、より良い乱数を取得できます。例えば、このポートからリード線を垂らしておけば、周辺のノイズを拾って良い乱数の種になります。ただこのポートはインピーダンスが高いのでサージなどを拾うとポートが壊れてしまうおそれがありますので、そこは気を付けてください。
6〜15行目はloop関数で、ここに書かれているコードは定期的に繰り返し実行されます。8行目ではこの関数で用いる変数を定義しています。onFanは扇風機をオンにするまでの時間、offFanは扇風機をオフにするまでの時間です。9行目で1/fゆらぎ乱数を求めて、onFanに代入しています。fluctは1/fゆらぎ乱数を生成する関数です。
10行目ではその値を10倍して扇風機をオンにするまでの時間としています。11行目で13番ピンのデジタルピンにソリッドステートリレーがつながっており、digitalWrite(13,1)で1を書き込みますので、ソリッドステートリレーの先につながった扇風機が回転します。12行目からはオフのフェーズです。オフの時間をfluct関数から求めます。13行目でその値に10を掛けた時間待った後、14行目で扇風機を止めます。
17行目からのfluct関数は1/fゆらぎ値を生成する関数です。1つ前のfluct関数が生成した値に依存して次のfluct関数の値を生成します。このプログラムでは50〜950の整数値を生成します。このアルゴリズムの理論的な解説は本稿では割愛しますが、ネット上で検索すればさまざまな知見が得られると思います。
おわりに
今回は、気持ちよさと不思議をエレクトロニクスで「結んだ」という感覚を持ちました。不思議なことだから気持ちいいのか、そもそも気持ちいいというのはどういうことかを探求する、探求してみたい、などと筆者は思いました。また、そこにエレクトロニクスがどう関わっていけるのか、関心は尽きません。
もう1つ気づいたことは、最終的に動かす扇風機には羽があって質量があって、また回転数によって空気抵抗は変わるだろうし、将来PID制御とは(比例/積分/微分)などにも興味を持ってもらえるきっかけになったとすればうれしいです。
図4が完成形です。筆者の作業台も映りこんでいますね。いつもここで下らないものを作ったり記事を書いたりしています。もし「あれはなんだ」と疑問をお持ちの読者がいらっしゃいましたら、ぜひMONOist編集部までご連絡ください。そのようなきっかけで次の記事ネタになったりすることも多々ありますのでよろしくお願いします。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「注目デバイスで組み込み開発をアップグレード」バックナンバー
- ≫連載「オリジナルCPUでバイナリコード入門」バックナンバー
- ≫連載「Black Hatでハードウェアハック!」バックナンバー
- ツェナーダイオードを使って物理乱数を生成する
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第12回は、物理現象を基にした「物理乱数」を、ツェナーダイオードのノイズから生成してみる。 - クリスタルイヤフォンは電子技術者の聴診器
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第12回は、筆者が入院中に興味を持った「聴診器」から着想を得たクリスタルイヤフォンの活用法を紹介する。 - ゲルマラジオで考えるダイオードのはなし
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第10回は、無電源でAMラジオを聞けるゲルマニウムラジオを元ネタに、ダイオードについて考えてみる。 - 定番タイマーIC「NE555」の無安定モードを深掘りする
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第9回は、第8回で取り上げた定番タイマーIC「NE555」を発振器として使う無安定モードについて深掘りする。 - 定番タイマーIC「NE555」のはなし
注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。第8回は、定番タイマーICである「NE555」について紹介する。