日本語プログラミング言語「なでしこ」を使って制御できるPICマイコンボードがあります。これを使うと,センサ入力の仕方を勉強したり,Lチカやモータドライブの制御等ができます。ひょっとしたら,「なでしこ」で制御をしたいと思っている人が(一人くらいは…)いると思うので,そんな万が一のためにメモをまとめます。
この記事は、なでしこv1 Windows版で実行できるようにしています。他のバージョンでは動きません。
なでしこで計測・制御
制御ボードの準備
まだ1つしか出ていませんが(それでも貴重ですが…),PICマイコンボードと,それに添付するDLLファイルがあれば,なでしこで制御ができます。
入力は,センサ入力ポートが3つ。
出力は,ボード上のLEDとスピーカ(ブザーが鳴ります),出力端子4つ(約5V),モータドライブ1個です。
とりあえずLチカ!
制御ボードを使うときの「Hello, World!」みたいなものですが,とりあえずLEDをON/OFFさせます。
オンの間
LEDオン。
1秒待つ。
LEDオフ。
1秒待つ。
ここまで。
これで,ボード上のLEDを点灯・消灯させることができます。
出力1端子にLEDを差しこんで,Lチカもできます。
オンの間
出力1オン。
1秒待つ。
出力1オフ。
1秒待つ。
ここまで。
明るさによって反応を変える
ボードの入力端子1にCdS(光センサ)を差しこんで,センサ1測定
という命令を使うと,CdSの測定値を取得できます。このボードは明るいと最小値0,暗いと最大値1023で測定値を返します。
明るさラベルとはラベル。
オンの間
明るさ=センサ1測定。 // #1
明るさラベルのテキスト=明るさ。
もし,明るさ>600ならば // #2
LEDオン。
違えば
LEDオフ。
ここまで。
0.5秒待つ。
ここまで。
#1では,変数明るさ
に,測定値を代入しています。#2で,明るさ>600(周囲が暗い)ならば,LEDを点灯させるようにしています。これは,夜間に自動点灯するライトの動作に似ています。
より細かく反応を変える
もちろん別のセンサも使えますが,CdSが一番単純で分かりやすいので,これを応用して,自動車の衝突防止アラームを作ってみます。
明るさラベルとはラベル。
オンの間
明るさ=センサ1測定。
明るさラベルのテキスト=明るさ。
0.1秒待つ。
もし,明るさ>600ならば // #1 とても近いとき
LEDオン。
音長(1)。発音(2)。
違えば,もし,明るさ>200ならば // #2 やや近いとき
LEDオン。
音長(1)。発音(1)。
違えば // #3 離れているとき
LEDオフ。
1秒待つ。
ここまで。
ここまで。
動作している様子はこちらの動画で。
音長(n)
で,ブザーが鳴る長さをn秒にしています。発音(n)
で,ブザーの音の高さをnにしています。#1のときはやや高い音が,#2の時はやや低い音が鳴ります。
こうすることで,
- 離れているとき(#3)は,LEDは消灯し,音も鳴らない。
- やや近づいたとき(明るさが600~200のとき,#2)は,LEDが点灯して低い音が鳴る。
- とても近いとき(明るさが600~1023のとき,#1)は,LEDが点灯して高い音が鳴る。
という動作になります。
モータドライブを制御する
出力端子2はモータドライブになっています。外部の回路(3V程度)までならON/OFF制御できます。
試しに,外部回路としてLEDとオルゴールICを出力端子2につないで制御してみました。
明るさラベルとはラベル。
オンの間
明るさ=センサ1測定。
明るさラベルのテキスト=明るさ。
0.1秒待つ。
もし,明るさ>500ならば
出力2オン。 // #1
2秒待つ。
違えば
出力2オフ。
ここまで。
1秒待つ。
ここまで。
動作している様子はこちらの動画で。出力2オン
と出力2オフ
で,モータドライブを制御しています。
最後に
こうやってサンプルを並べると,やっぱり命令が分かりやすいなー。さらに,あるサンプルの一部の命令を置きかえるだけで,次のステップへ進むことができます。プログラムの構造が変わらないことが,ひと目で分かる。日本語で作る「なでしこ」ならではの分かりやすさのような気がします。
このボートは,残念ながらボードのメモリにプログラムを記憶できないため,常にパソコンとボードを接続している必要がありますが,それでも日本語で制御できるボードがあるのは,とても面白いと思います。