No.66


  arduinoで遊ぶ

  さわるな!Box

2020年.8月掲載

いまさらArduino入門

 ステイホーム期間をきっかけに、以前から気になっていた Arduino(アルデュイーノ)に手を出しました。「素人の学生でもデジタルなものを作れるようにする」という開発の趣旨がすばらしい。
  ハードウェアとして小さなAVRマイコン(マイクロコントローラ)のチップを使ったArduinoボードが提供されていて、ソフトウェアとしてはArduino IDEが無償配布されています。完全なオープンソースです。ハードウェアについても、同じ構成でパーツを集めて自作も可能であり、安価なコピーのボード製品も自由に製造が許されています。
 AVRマイコンチップはもともと安価であるとしても、CPU(AVR)、メモリー(AVR内)、クロック、USBインターフェースも付いていて、I/Oピンが並んでいるコンピュータボードが、公式でも3000円ていど、コピー品なら1000円以内で買えるのですから、驚きです。
 今回の工作では、最も普及したArduino Uno ver.3 を小形化したArduino Nanoを使いました。写真のようにブレッドボードに差し込んで使えます。USBはmini-Bタイプです。ただし、正規品でなくコピー品です。1枚が約500円でした。







スケッチの例

 1 #include <Servo.h>       

 2    Servo servo1;
 3
 4    void setup()
 5   {
 6    servo1.attach(9);
 7   }
 8 
 9   void loop()
10  {
11   servo1.write(90);
12      delay(500);
13      servo1.write(0);
14      delay(500);

15   }

さわるな!Box

  入力に応じて何か動く物を作りたい。そこで、YouTubeで見たことのあるおもちゃ、 DON'T TOUCH BOX!!!  を作ろうと思いました。
 箱の全面にスイッチがあり、そこには「さわるな!」と書いてある。スイッチを入れてみると、フタが開き、サル(本作品ではクマのプー)が、顔出し手を出して、スイッチを切って戻る。こういうおもちゃです。

                 何とか動きましたYouTube動画

 入力信号は前面のトグルスイッチのONです。プーの頭部はフタにぶら下げて置けばよいので、出力は、フタの開け閉め用とプーの腕用、2つのサーボモーターを動かすことです。スイッチを押す腕は180°近く動かす必要があります。どんなタイミングでどんな動きをさせるのか、プログラミングで決まります。

Arduinoのプログラミング

  Arduino ではプログラミングをスケッチ と呼びますが、スケッチは、ほぼC++と呼ばれる言語で書かれます。PCのArduino IDE上で、スケッチを作成して、送信ボタンを押すと、文法上の誤りがなければ、自動でコンパイル(マシン語に変換)され、USBケーブルを通してArduino本体に書き込まれます。

 例えば、サーボモーターを角度90°、0°と往復させるように動かすスケッチのコードは左のような感じです。

第1行は標準のサーボライブラリの使用を宣言する文です。サーボモータへの信号はパルスの幅によって角度を伝える方式(PWM)なので、そのパルス信号を作り出す細かい命令をまともに書くとスケッチは長々と煩雑になります。その部分を裏で自動的に作り出してくれるのがサーボライブラリーです。
  良く使われるお決まりの処理については、ライブラリとしてIDEが標準で備えており、簡単に呼び出して使用できるので便利です。新たなデバイスを使うためのライブラリを追加することもできます。

第2行はサーボの使用を宣言して、servo1と名前をつけています。

第4〜7行はループの前に1回だけ行う処理をするお決まりの部分です。
この例ではサーボ信号を9ピンに出すという設定をしています。

第9〜15行はお決まりの無限ループです。 から } までを無限に繰り返します。セッアップと無限ループというのが、Arduinoの構成です。無限ループ内がプログラムの本体になります。
この例では
 サーボを90°の位置に動かし、
 1000分の500秒間待つ、
 サーボを0°の位置に動かし、
 1000分の500秒間待つ、

  こんな具合に、このような命令を組み立てて行きます。最終的には、前面のスイッチがONにされたら、@フタに頭突きをする、Aフタを少し開けて止める Bスイッチを押して、引っ込む Cスイッチまで手を伸ばして寸止めする のどれかをランダムに、やったりやらなかったりする、というプログラムとしてみました。

  初心者の私は、次のページを度々参考にさせていただいています。他にもコードのマニュアルやスケッチ例がインターネットに多数上がっているので、部分部分をコピペによって大半を作れてしまったりします。
           https://garretlab.web.fc2.com/arduino_reference/



star 前面のスイッチはArduinoの1つのピンにつながっているだけで、電源スイッチではありません。電源スィッチは箱の背面にあります。また、プログラム更新のためのUSBコネクタ用の穴が側面にあります。あり合せの箱が小さかったので、内部はぎりぎりの狭さになってしまいました。プーさんのぬいぐるみは無残に頭部のみチョン切られて、中綿も抜かれて痩せています。

star サーボはTOWER PROのSG92R を使いました。delayの時間はサーボが動き終えるのを待つ時間を考慮して調整しました。電源は6Vですが、電圧不足になってくると、動くタイミングが悪くなったりします。

star この工作では信号ピンとして、サーボ用にPWM出力用のデジタルピン2つ、スイッチ入切を入力するディジタルピン1つを使いました。アナログ入力のピンを使っていません。
 1つのアナログ入力ピンを使うと、電圧を10ビットの解像度で取り込むことができるので、ArduinoはA/Dコンバーターとして使えるので、測定器にもなります。ただ、結果をPCで表示するより、何かか動くものに出力した方が面白い。次回は、そのような工作にしようと思います。

 おもしろ実験メニュ

分類順メニュへ