‘Arduino’のエントリ

今,「Make: Electronics」を読んでいるのだが,その中で,ユニバーサルプレートの表裏で線を交差させることはできない。穴を経由してショートするから。と書いてあった。あれ,そういえば,と以前作ったボードを見ると,表裏で交差させたので問題がある。実際には線はプレートから少し浮いているのでショートはしていないんだけど,あまりよくない状態ってことですね。

普通の本だと交差するところはラッパー線を使う,くらいしか書いていなくて,表通せばいいじゃん,って思ったのだが,この本はやってはいけないことがいろいろ書いてあって勉強になる。

スマホでラジコンを操作しながらラジコン視点が見えるようにしてみた。iPod Touchで撮影した動画をWindows Mobileに飛ばして見ている様子をAndroidで撮影するという夢の共演。

前回の通り,Windows 10 MobileからArduinoラジコンをBluetooth経由で操作している。で,今回はラジコンに設置したiPod Touchからビデオ画像をWi-Fiでとばして,Windows 10 Mobileのアプリにリアルタイム表示した。ラジコン視点の画像が手元に表示されて割と楽しい。

このままだとWi-Fiにつながってないと遊べないが,SIM搭載したAndroidをテザリングモードにしてWi-Fiルータ化すれば,外でも同じ事ができる。スマホを3種類持ち歩くことになるけど。

とりあえずラジコン部分はこれで完成。iPod Touchからの画像はRGB生データで取得できるので,この情報をうまく使えば自律操作ができる。そこが最終目標。

前回,ラジコンを作るところまでいったが,操作するのはWindowsのPCだった。やっぱり操作するのはスマホの方がいいな,と思ってAndroidアプリを作ることを考えていたんだけど,そういえばWindows 10 Mobileがあった。てことで操作アプリをUWPしてみた。

Windows版では今まで通りSPPを使用してCOMポートのシリアル通信でBluetoothに繋いで,さくっと移植完了。でもWindows 10 MobileではCOMポートが何番か調べられないなあ,と思っていたらモバイルではSPPを使えないっぽい。てことでここを参考にRFCOMMでアクセスするように変更。Socketにするだけでやることは同じですね。

こんな感じ。Windows 10 MobileはWindowsで普通にデバッグできるからすごく楽。

201606192159

201606192159

新しいはんだごての力を得て,自作Arduinoシールドが完成。

シールドの設計図。分かりにくいが,Drv1とDrv2がモータードライバTA7291P x2で,U5とU6がBluetoothモジュールRN42をXBEE変換したものを2.54mmピッチに変換したもの。基板作り自体初めてなのでこれでも3回くらい設計をやり直している。これで完璧,と思って部品を置いてみたら部品同士が当たってショートしちゃう,とか,パズルみたいだった。

2016052901

※回路に重要な問題があるので後の日記を参照のこと。

シールドの部品面。モーターなどの線はピンソケットにして取り外せるようにしておいた。線自体はジャンパーワイヤーを切ったものをはんだでつなげて熱収縮チューブで保護することでさくっと刺せるように。

2016052902

シールドのはんだ面。新しいはんだごての力を借りてようやくこんな感じ。まだまだ修行しないと。設計上線がクロスする箇所は絶縁したコードを使うのが普通っぽいけど,表面を経由したり表の抵抗を経由したりで回避した。

2016052903

ラジコン化したもの。前の実装では表と裏の部品が相互に邪魔して配置に制約があったのだが,ユニバーサルプレートを2枚重ねにしてネジが競合しないようにしたことで自由に配置できるようになった。ちなみに金属のやつは撮影用のiPod Touchを置くスペース(仮)。

2016052904

表詳細
2016052905

裏詳細
2016052906

Arduino。今までブレッドボードで動かしていたモーターとBluetoothをシールド化すべく,設計をした。少し線を付け始めたのだが,どうもソケットが溶けたりハンダが酸化したりする。いろいろ調べてみたところ,WEBはんだ付け講座ではんだごての選び方が乗っていて参考になった。使っていたのは太洋電気の入門セットなのだが,初心者こそ高い道具を,ということでHAKKOのFX-600に買い換え。その後しばらく練習したところ,かなり快適。古いのはランドにちょっと付けているといろいろダメージが残ってしまっていたが,新しいのは大丈夫。

アキバで買ってきた測距モジュール「GP2Y0A21YK」とサーボ「SG92R」とユニバーサルアームを使ってラジコンをバージョンアップ。サーボに測距モジュールを付けて回せるようにした。ついでに今後のためにiPodを設置する場所を用意。測距モジュールから測定した左右の障害物情報をBluetoothで,iPodから取得した画像をWi-FiでPCに送りつけて,PC側で前後左右に車を自律制御するというのが目標。途中からArduinoでロボット工作をたのしもうを参考にやっているが,だいたいPart1+αができた。

はっぱさんとアキバでArduinoワークショップ。前回までのワークショップで,電子工作が本格的になってきたため作業スペースを確保しないと進められないという課題がでていた。その後,ベーマガイベントはんだづけカフェというのを知り,今度行ってみようという話になっていた。ここは無料の電子工作スペースで,はんだづけを中心とした電子工作ができる。というところでとりあえず行ってみたのだが,さすがに無料だけあってスペースが確保できず。

まあその辺りは予想していたので,もう一箇所調べておいたAssemblageに行ってみた。こちらは有料だからか閉店間近だからかゆったり工作できた。

とりあえずはっぱさんにラジコンを見てもらい,はっぱさんのArduinoシールド作りを見学。せっかくだから私も秋月電子で購入した測距モジュールのピンソケットはんだづけをしてみる。さすがにはんだ環境は快適。次の目標はこれを使って障害物を検知するところかな。

はっぱさんと第4回Arduino Workshopを開催。といってもここまでくると外での作業は難しいので情報交換だけなのだが。で,電子工作マガジン2015年夏号内のBasicマガジンにはっぱさんのIchigoJamプログラムが掲載されていることが判明。素晴らしい。ベーマガページも大幅増量で,これは別冊化からの独立の流れで復活もあるか?

BasicマガジンはBasic投稿プログラムを載せていた雑誌で,1982年創刊2003年休刊。私の幼稚園以来の愛読書,2回ほどPC98プログラムを掲載してもらったこともある雑誌で,この雑誌がなければウェザタイはなかったし,職業も違いそう。今度イベントがあるようなのでチケットトライしてみようかな。

IchigoJamは,自作Basicマイコンと言えばいいのか。自作と言ってもチップのハンダ付けからやるレベルの自作なんだけど,メモリ4KBでBasicを組むという8bitマイコンもびっくりの内容。当時使ってたPC6001でも16KBだった。ではっぱさんのプログラムを見ていて当時を思い出したのだが,少ないメモリで動作し,雑誌掲載のために短く組むテクニックをいろいろ思い出した。電子工作マガジンで小学生がこのテクニックを使っていたんだけど,既にそこまでの投稿レベルになってるのか。

  • 命令は省略形を使う。PRINTは5バイトもくうので「?」で1バイトにする
  • 同じ理由で変数は短くする
  • IF文は遅いので極力論理式を使う。true:-1,false:0を計算式に組み込む。分かりやすい例でいうと「x = x + 128 * (x > 127)」とか。
  • 行数が多いといろいろ不利なのでマルチステートメントを使う。できるだけ1行に詰め込むってことですね。

あとはどうしようもなくなったらマシン語を埋め込むとかPEEK/POKEでシステムのメモリを直接読み書きするとかですかね。全体的に,C言語でこんなことしたら怒られる感じですね。

そういえば調べようと思って忘れていた。前回の日記でラジコンを作ったときに,モータへの電源は6Vを入れている。これは,TA7291Pの電圧降下が2.5Vくらいあるらしいという情報を見てとりあえず6Vにしたのだが,本当のところどうなのかをテスターで計ってみた。結果,TA7291Pへの入力をPWMで最大出力255にしたときに2.9Vだった。ダブルギアボックスの説明では3Vで動かせと書いてあるので丁度いいようだ。ていうか3.1Vも降下してるけど何か変なのかなあ。

Arduinoでラジコンを作った。

前回,車とダブルギアボックスを使って車が動くようになったのだが,これだと左右の前輪がつながっているのでうまく曲がらない。そこで,ボールキャスターを使って左右に曲がるようにした。

さらに,BluetoothモジュールRN-42を使ってPCから操作できるようにした。

表裏はこんな感じ。

2015051701

2015051702

構成としては以下の通り。

  • タミヤのユニバーサルボード,タイヤセット,ボールキャスター,ダブルギアボックスで基本の車を作成
  • 単4電池とボックスでモータの電源を確保,6P電池とジャンパピン付きスナップでArduino用の電源を確保
  • モータードライバTA7291Pを2個使って,モーター,Arduino電源,モータ電源を接続
  • RN-42 Bluetooth 2mmピッチ変換モジュールXBee用2.54mmピッチ変換基板でブレッドボードに載せる

RN42については,買ったものがXBee用の2mmピッチだったので,2.54mmピッチに変換。秋月電子の変換ボードは3.3Vレギュレータ付きなので,電源は5Vそのままつなげるが,ArduinoからRN42へのシリアル通信は3.3Vに変換しないといけないので適当に抵抗で電圧を落とす必要がある。はんだ付けも多少慣れたけど2mmピッチは小さすぎて辛い。

2015051704

RN42の使い方はWebを探すと先人が情報を残してくれているが,Macのコンソールが一番楽そうなのでMacから繋いでみる。RN42を配線して電圧をかけると赤LEDが点滅し,それだけでMac上でBluetoothデバイスとして見つかる。ペアリングすると赤LEDが点灯するので,コンソールから「screen /dev/tty.RNBT-DF42-RNI-SPP 115200」を実行。キーボードで通信ができる。

回路図。Fritzingを使用して作図。ごちゃごちゃするのでGND省略してるけど,適当にArduinoのGNDか電池のマイナスにつなぐ。

2015051705

プログラム。どうしてもハード部分がメインになるのでソフト部分は超適当だけど,上げておこう。

int rpositive = 9;
int rnegative = 6;
int lpositive = 11;
int lnegative = 3;
int led = 13;
int lspeed = 0;
int rspeed = 0;
char inByte = 0;

void setup()
{
  Serial.begin(115200);
  pinMode(lpositive, OUTPUT);
  pinMode(lnegative, OUTPUT);
  pinMode(rpositive, OUTPUT);
  pinMode(rnegative, OUTPUT);
  pinMode(led, OUTPUT);

  analogWrite(lpositive, 0);
  analogWrite(lnegative, 0);
  analogWrite(rpositive, 0);
  analogWrite(rnegative, 0);
}

void loop()
{
  if (Serial.available() > 0)
  {
    inByte = Serial.read();
    if (inByte == 'w')
    {
      // forward
      lspeed += 50;
      rspeed += 50;
      Serial.println('f'); 
    }
    else if (inByte == 's')
    {
      // backward
      lspeed -= 50;
      rspeed -= 50;
      Serial.println('b'); 
    }
    else if (inByte == 'a')
    {
      // left
      lspeed += 50;
      rspeed -= 50;
      Serial.println('l'); 
    }
    else if (inByte == 'd')
    {
      // right
      lspeed -= 50;
      rspeed += 50;
      Serial.println('r'); 
    }
    else if (inByte == 'z')
    {
      // stop
      lspeed = 0;
      rspeed = 0;
      Serial.println('s'); 
    }

    if(lspeed > 200)
    {
      lspeed = 200;
    }
    if(rspeed > 200)
    {
      rspeed = 200;
    }
    if(lspeed < -200)
    {
      lspeed = -200;
    }
    if(lspeed < -200)
    {
      lspeed = -200;
    }

    if(lspeed >= 0)
    {
      analogWrite(lpositive, lspeed);
      analogWrite(lnegative, 0);
    }
    else
    {
      analogWrite(lpositive, 0);
      analogWrite(lnegative, -lspeed);
    }
    if(rspeed >= 0)
    {
      analogWrite(rpositive, rspeed);
      analogWrite(rnegative, 0);
    }
    else
    {
      analogWrite(rpositive, 0);
      analogWrite(rnegative, -rspeed);
    }
    
    if(lspeed != 0 || rspeed != 0)
    {
      digitalWrite(led, HIGH);
    }
    else
    {
      digitalWrite(led, LOW);
    }

    delay(100);
  }
}

次はスマホからBluetooth接続できるようにしてスマホから操作するかな。

昨日買ってきたパーツで車を動かしてみた。タミヤのダブルギアボックス,モータードライバTA7291P 2個をつないで,1.5V単4電池4本でモーターの電源を確保。Arduinoは9Vの角形乾電池とジャンパーピン変換で電源を確保。これで左右のタイヤの方向を変えて曲がることができるようになり,USBを使わなくなったので動かしやすくなった。

この前はタンクを買ったのだが,結局タミヤのユニバーサルボードとタイヤセットを合わせることで,自由度があがりそうだったのでそちらに乗り換えた。裏表に部品を実装できるようになったので配線が楽。

2015051101

2015051102

はっぱさんとArduinoワークショップの三回目を開催。アキバでBluetoothやモーターの足りない部品を揃えた。

その中で,はっぱさんがIchigoJamを見つけて購入。ボードを組み立ててテレビにつなぐとBASICプログラムを実行できるというもの。ベーマガに投稿していた我々としては見逃せない。マニュアルを見つつ二人で懐かしがっていると,電子工作マガジンにBasic Magazine復活の噂を見つけてこちらは私も購入。2ページだけだけど復活している。しかも投稿プログラムまで募集しているとは。こういった方面で盛り上がるのはいいですね。

昨日買ってきた「タミヤ タンク工作基本セット」を使ってモーター制御を試してみた。タンクのモーターにモーター制御IC「TA7291SG」をつなぐ。ここにArduinoの電源をつなぐとArduinoが壊れるので別途モーター用の電源がいるのだが,3V電池じゃ出力不足という情報があり,ACアダプタから延ばしたUSBから電源を取ることに。「ブレッドボード用ミニBメスUSBコネクタDIP化キット」を購入してきたので初のはんだ体験。はんだというと鉛のイメージだったんだけど最近は鉛じゃないんですね。

2015041301

とりあえずやってみたがうまく付けられてるのかな。まあ出力は5Vがちゃんと取れていたので大丈夫だろう。

で,Arduinoからモーター制御IC用電源と,PWMで制御入力を入れて,プログラムをちゃちゃっと入力。

サイズ大きいけど動画も見られます。なんか出力不足なのか遅いけど,前後に動くようになった。次はモーター2個にして左右に曲がれるようにしたり,Bluetoothでスマホからラジコンみたいに動かしたい。

これで来週の情報処理試験エンベデッドも準備OKだ。きっと。。

はっぱさんとArduino勉強会の2回目。前回はLEDの実験だったが,今回はモーターがテーマ。動くものができると楽しいですよね。

アキバに部品を見に行くのが目的だったが,山手線が動いていない関係で新橋で下車。ついでなのでタミヤのプラモデルファクトリーへ行ってみる。20数年ぶりのミニ四駆とか,工作キット,プラモデルなどなんでもあって飽きない。

その後アキバに行ってはっぱさんいきつけの部品屋めぐり。いきあたりばったりだったが一通りモーターを動かせる部品を購入。したところで時間切れ。Bluetoothまではいけなかった。

Pajyarouさんと浅草橋の新春けもケットへ。我々には内容が分からないのが残念だが,こういう雰囲気はいいですね。とりあえずもげぇたん本はなさそうということだけは分かった。

今回のはFlash関連の話で行ったのだが,Denasuの活動も少しずつ外に向かっているのを感じて楽しい。

それはそれとして,アキバが近かったので白色LEDを始めとする基本部品を買ってきた。配線がおかしいのか,全部つなげても白にならなかったので,とりあえず青色LEDのキャプチャを載せておく。

2015011801

以前買ってきてそのままだったArduinoを使って何かしようということで,はっぱさんとLEDをチカチカさせてみた。経験者であるはっぱさんと実習したことでだいたいのことが分かったので,部品をそろえて面白いことをやってみたい。

2015011101

2015011102

今日は,はっぱさんが持っている赤+緑LEDとタクトスイッチx2で,片方のスイッチで赤がだんだん明るくなり,もう片方のスイッチで緑がだんだん明るくなるようにして,赤緑黄を自在に光らせられるようにした。これだけでもかなり楽しい。ちなみにはっぱさんがやっていたのは10年以上前なので青色LEDはさすがにない。