なでしこでPICマイコン制御


日本語プログラミング言語「なでしこ」を使って制御できるPICマイコンボードがあります。これを使うと,センサ入力の仕方を勉強したり,Lチカやモータドライブの制御等ができます。ひょっとしたら,「なでしこ」で制御をしたいと思っている人が(一人くらいは…)いると思うので,そんな万が一のためにメモをまとめます。

この記事は、なでしこv1 Windows版で実行できるようにしています。他のバージョンでは動きません。

なでしこで計測・制御

制御ボードの準備

まだ1つしか出ていませんが(それでも貴重ですが…),PICマイコンボードと,それに添付するDLLファイルがあれば,なでしこで制御ができます。

入力は,センサ入力ポートが3つ。
出力は,ボード上のLEDとスピーカ(ブザーが鳴ります),出力端子4つ(約5V),モータドライブ1個です。

とりあえずLチカ!

制御ボードを使うときの「Hello, World!」みたいなものですが,とりあえずLEDをON/OFFさせます。

board1.nako
オンの間
  LEDオン。
  1秒待つ。
  LEDオフ。
  1秒待つ。
ここまで。

これで,ボード上のLEDを点灯・消灯させることができます。
出力1端子にLEDを差しこんで,Lチカもできます。

board2.nako
オンの間
  出力1オン。
  1秒待つ。
  出力1オフ。
  1秒待つ。
ここまで。

明るさによって反応を変える

ボードの入力端子1にCdS(光センサ)を差しこんで,センサ1測定という命令を使うと,CdSの測定値を取得できます。このボードは明るいと最小値0,暗いと最大値1023で測定値を返します。

board3.nako
明るさラベルとはラベル。

オンの間
  明るさ=センサ1測定。  // #1
  明るさラベルのテキスト=明るさ。

  もし,明るさ>600ならば  // #2
    LEDオン。
  違えば
    LEDオフ。
  ここまで。
  0.5秒待つ。
ここまで。

#1では,変数明るさに,測定値を代入しています。#2で,明るさ>600(周囲が暗い)ならば,LEDを点灯させるようにしています。これは,夜間に自動点灯するライトの動作に似ています。

より細かく反応を変える

もちろん別のセンサも使えますが,CdSが一番単純で分かりやすいので,これを応用して,自動車の衝突防止アラームを作ってみます。

board4.nako
明るさラベルとはラベル。

オンの間
  明るさ=センサ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につないで制御してみました。

board5.nako
明るさラベルとはラベル。

オンの間
  明るさ=センサ1測定。
  明るさラベルのテキスト=明るさ。
  0.1秒待つ。

  もし,明るさ>500ならば
    出力2オン。    // #1
    2秒待つ。
  違えば
    出力2オフ。
  ここまで。
  1秒待つ。
ここまで。

動作している様子はこちらの動画で。出力2オン出力2オフで,モータドライブを制御しています。

最後に

こうやってサンプルを並べると,やっぱり命令が分かりやすいなー。さらに,あるサンプルの一部の命令を置きかえるだけで,次のステップへ進むことができます。プログラムの構造が変わらないことが,ひと目で分かる。日本語で作る「なでしこ」ならではの分かりやすさのような気がします。

このボートは,残念ながらボードのメモリにプログラムを記憶できないため,常にパソコンとボードを接続している必要がありますが,それでも日本語で制御できるボードがあるのは,とても面白いと思います。

参考