‘電子工作’のエントリ

せっかくシンガポールにいるのでどこかに行かないとってことでシンガポールの電気街、Sim Lim Square、Sim Lim Towerへ。

Sim Lim Squareは1つのビルに電気店がたくさん入った場所。こっちは普通にスマホとかが売っている店なんだけど、すごいたくさん店がある。

もう一つのSim Lim Towerは面白かった。もう少しコアな店というか、パーツ店が集まった感じ。1店電子工作向けの店があったのでじっくり見てみた。日本と同じような感じでタミヤ製品もあったり。

ようやくホテル暮らしからウィークリーマンション暮らしへレベルアップ。てことで最小限のものを買いそろえた。まずはネットワーク。マンションのネットワークを契約できないので自分でなんとかする必要がある。通信量を(ほとんど)気にしないようにするには、UQ WiMAXくらいしかない。てことでヨドバシカメラマルチメディア梅田へ行ってみた。ヨドバシカメラで契約すると月々の料金が高いって言われてるようだけど、私には、店員さんにいろいろ聞けるのとすぐ使えるというメリットの方が大きい。どうでもいいけど、ヨドバシカメラは23店舗中11店制覇。みんなで札幌行ったときも一人ヨドバシカメラ行ったしね。

てか、ヨドバ梅田なんだけど、巨大。横浜とかアキバくらいの規模だといいなあ、って軽い感じで行ったのだが、圧倒的に大きい。城。そしてUQ WiMAX売り場の店員さんに、基本的なことは説明しないで良さそうですね、って一目で決めつけられたのはなんでだろう。で、家で調べてたときはSpeed Wi-Fi NEXT W05かな、って思ってたんだけど、マンションで固定回線の代わりに使いたいって相談したらSpeed Wi-Fi HOMEはどう? って勧められた。速度がW04相当で少し遅いが、電波をつかみやすいのとACアダプタさしっぱなしで問題なし。何その私にピッタリなやつ、って感じで即契約。758Mbpsなんて出るわけないし。

そのWiMAX、マンションが14Fなのでどうかな、って思ってたんだけど、まあまあ使えそう。Huluでそこそこ画質の動画は余裕で見える。


せっかく大阪まで行ってヨドバだけってのももったいないので、ついに日本橋へ。なんば駅から少しあるくと通称オタロードへ。そして隣の道に行くと電気っぽいお店が。マルツと千石電商があったので覗いてみた。アキバほど密集している感じはない、というかアキバがごちゃごちゃしてるんだけど、オタっぽいところと電気っぽいところは分離されてる感じ?

というわけで、大阪はベーマガイベントとヨドバシカメラと日本橋に行ったのでもう主要なところは見終わったかな。

生活用品も多少買いそろえたので、次はPCデスクとチェア。元の家から輸送しようか、新たに買ってしまうか。

第一回第二回に引き続き、大阪南港ATCで開催されたALL ABOUT ベーマガIISP in 大阪に参加してきた。

元々、大阪の人に譲るためチケット争奪には加わらなかったのだが、しばらく売り切れにはならなかったのでポチっと。その後7月から関西に住むことになったので、にわか地元民として堂々と参加。本当申し込んでおいてよかった。

会場は前回までとちょっと変わって会議室。今回は後ろの座席だったけど、前の方は今までにないくらい出演者に近かったはず。ちなみに座席番号が「A-64」みたいな形になっていて、椅子に番号が付いてなかったので若干分かりづらそうだった。「座席はLOCATE 0, 63 です」みたいになっていれば、あそこが 0, 0 だな、みたいに全員瞬時に理解できるのに、と思った。

グッズ

前回のイベントで、電波新聞社が正式にサポートするという宣言をされていた通り、今回は電波新聞社が主催。ということで、前回の会場で売ってたら収拾がつかなくなってそうなグッズの充実っぷり。私も今は一時拠点で荷物を増やせない環境なのだが、Tシャツとかステッカーを入手。ヘルメッツさんのラズパイケースなんかもPC-6001だったら買っていたところだ。

マイコンソフトコーナー

東京ではなかったので楽しみだったマイコンソフトコーナー。今時ゼビウスのアンドアジェネシスを倒して拍手が起きるイベントって何なの、って感じだけど、そこがよかった。小学生の頃、家にPC-6001版のタイニーゼビウスがあってやっていた記憶があるのだが、Wikipediaによるとその後にX1に移植されてようやくタイニーが取れた? ってことなんだろうか。展示コーナーにタイニーゼビウス mkIIが置いてあって眺めたり。

まとめ

今回のイベントはどちらかというとゲームよりで、プログラムな話題はそれほど多くはなかった。もちろんトークの内容は前回までとほとんどかぶらず、ゲームの話も面白かった。毎回トークの内容が違うのはさすがで、20年の時間を感じるところ。ただ、プログラマ日記としてはあまり書くことがない感じかな。

今回会場を抑えめにしてマイコンソフトコーナーを持ってきたみたいに、投稿プログラムを解説するコーナーをメインにしたミニイベントとか、90年代中心のミニイベントとかあるといいなあ、みたいなことを思ったり。

今月は関西移住で生活がいっぱいいっぱいになって開発ができてなかったのだが、今回のイベントでまたモチベーションを高められた。いろいろ作りたいものがたまっているので開発を再開しよう。まずはウェザタイオフラインonラズパイだけど、ラズパイと電子工作の部品が手元にない。いつ一時拠点に持ってこれるのか。

その他

同時開催のメイカーズバザールも行ってみた。んだけど、物販開始まで20分くらいしか時間がなかったので、とりあえずオリジナル製品ゾーンを一通り見て回ったくらい。

本来は今日は大阪に泊まって明日日本橋とか見て回りたかったんだけど、いつでもいけるようになったので今日はそのまま帰宅。でんでんタウンはまた今度。

有楽町よみうりホールで行われた「ALL ABOUT マイコンBASICマガジンⅡ」に参加してきた。今日を逃がすと日記を書くのが1週間後になって思い出せなくなるので、寝る前にまとめておく。前回同様ネタバレは避けてね、ということなので感想中心に。

ちなみに、私が使っていたのはPC-6001、ぴゅう太、ファミリーベーシックV1/V3、その後一気にPC-9821で、ベーマガは82~90年と94~00年くらいの読者っていう前提で。

このイベントは1982~2003まで刊行していたマイコンBasic Magazineの同窓会イベントで、2年前に初回のイベントが行われている。そのときの感想は2年前の日記を参照。

全般

チケットは一応VIP席をトライしてみたんだけど、開始後即クリックしてもとれず、PC-6001ユーザらしくA席を確保。前日までに国会図書館で予習復習をしようかと思ってたんだけど、ウェザタイ開発を優先して手元にある数冊を読み込むだけにした。

今回の構成も前回同様のトークショー、ただしスタープログラマとサウンドチームは分割して4部構成となり、結局13時から19時半で6時間半になっていた。密度が濃いので長い感覚はなかったけど、帰ってきても日記を書く時間が足りない。

運営面では、前回はお金をかけられない分手作り感満載の演出にしていたけど、今回は整理券行列に1時間並ばなかったり、パイプ椅子じゃなくてちゃんとした椅子になっていたり、何か欲しくなったらすぐにビックカメラへ行けるように配慮されていたり、かなり改善、じゃなくて手作りじゃない風の演出になっていた。

オープニング

恒例のP6音声合成から始まってムービー。そのうち動画が配信されると思うけど、いろんなネタが仕込まれていて、一応私が初見で分かったのは最初に飛んでいたのがPC-6001だったり、ラーメンライス持ってたり(ライスっぽくなかった気もするけど)、未だに意味はよく分からないシテオクとか、そのくらい。

ベーマガ編集部 再集結!

ここはやっぱりつぐよしさん。前回のイベントの「夢を壊さないために出演しない」が見事にフリになっていた。完全に、ああ、そういうことか、そうこともあるよね、って思った。

スタープログラマー VS. ○○プログラマー

(私は)前回のイベントではちょっと印象が薄かったのだが、今回はこのセッションが一番面白かった。特にファミベのよっしんさんの作品。あんな文字化けみたいなプログラムを掲載してたんだ。で、爆速。あれだけマシン語だとファミベというか普通のファミコンソフトと同じな気が。あえてバッテリーバックアップではなくテープレコーダーからロードというのもよい。うちにもあったけど、なんか音量を下げられないか下げてはいけないかなんかで、スピーカーを塞ぎながら使っていた記憶が。

最後の森巧尚さんの言葉はかなり心にくるものがあった。今の人は自分で作るよりよいものに溢れているけど、ちょっとやってみれば面白さにハマっていくっていうような話だったかな。子供の頃に強制的にあらゆることをやらせてみれば、その中から興味があるものが見つかるかも知れないし、ちょっとでもやったことがあれば将来やりたくなったときに役立つので、プログラミング必修はいいと思う。けど試験対策みたいなのじゃなくて、自分で作ったものが動く楽しみを伝えられるといいですね。

でも私のときは中学でロゴライターのプログラミングをやったような気がするけど、あれは必修じゃなかったのかな。初心者向けの内容だったから勝手にチーム作ってカーレースを実装していたら、先生から言語リファレンス渡されて、これあげるから自由に遊べ、って言われたのを思い出した。いい先生。

DEMPAサウンドチーム クロストーク、​スーパーソフトコーナー プレイバック

ここは正直私はよく分からない内容が多い。ペーパーアドベンチャーとかパソコンレスキューとかのコーナーは分かるけど、ゲームの世代が違う。ぷよぷよやブランディッシュなどの98ゲームならある程度分かるんだけど。

エンディング

最後、公式Twitterでずっと捜索していた何か、最大のサプライズ、ということで何だろう、と思っていたら、バトルオブ本の当日販売だった。ちょうど91~92年はベーマガから離れてロゴライターくらいしかしてなかったのでバトルオブストIIは知らないのだが、バトルオブぷよぷよはかなり面白かったので1冊購入。

これはガンガン宣伝して、ってことだったので表紙を置いておこう。

今回のイベント、前回参加できなかった人向けでもあるので、前回と内容が被るのかな、と思ったけど、そんなこともなく、さらにいろんな裏話を聞くことができた。また、前回、今後に向けたメッセージがあまりないな、と感じたけど、今回は最後の山下章さんや編集長の挨拶にもあるように、まだまだ新しいことをやっていきましょう、新しい世代につないでいきましょうということで、その辺もよかった。

次があるとしたらどうなんでしょうね。個人的には90年代中心の話題ってのを見てみたいけど、読者が限られてしまうのかな。ともあれ、今回も素晴らしいイベント、ありがとうございました。

はっぱさんとラズパイワークショップ。ラズパイ版ウェザタイと赤外線通信の進捗を報告。どちらも順調に進んでいるのでそろそろ合わせて動かすか、ってところ。なんだけど、Windows 10 IoTでPWMが動かないかも、という情報が。PWMが動かないと赤外線通信がかなり難しくなる。一応調べてみたら何かしらの追加ライブラリはありそうな感じもするけど、代替案としてAndroid Thingsでやるという案もある。そろそろAndroidでの動作も確認したいしということでAndroidで動かしてみた。

まだキーボード入力を実装していないのでちゃんとは動かないし、初めてスマホの縦画面で動かしたので画面もおかしなところが多いけど、一応動いているっぽい。さすがxamarin.forms。

ウェザタイ on ラズパイ。通信対戦ができるようになった。

デスクトップ版のWTとも対戦ができる。ってことはモバイル版とデスクトップ版との対戦も可能ってことで。ただ、どうもローカルPCクライアントからUWPのサーバには接続できないっぽい。製品版では別に構わないけどデバッグはめんどくさい。

はっぱさんとMaker Faire 2017 Tokyo1日目へ行ってきた。会場が2つに分かれていたけど規模は去年と同じくらい? 一通り回るだけで5時間くらいかかったのでかなり疲れた。

ロボットの展示がかなり多く感じたが、たくさん並んでしまうと何が違うのか分かりにくくなるのがもったいない感じがした。逆にキッズコーナーは各展示でいろんなバリエーションがあって面白い。まあやっぱり一番興味深いのはエレクトロニクスコーナーで、例えば今ちょうどWindows IoTをやっているのでLattePandaはちょっと気になったりした。出展者一覧になさそうなので製品ページへリンク。あと個人的には、denha’s channel ピタゴラスイッチ的なマシーンとかカサネタリウム 変わったプロッタ? なんかが印象に残った。

ウェザタイIoTで出展できるといいなあ。

しばらくXamarin.Forms使ってみて分かってきたこと。

1. F5を押してもビルドされない問題

F5を押すとすぐに実行されてしまうので、手動でビルド、デプロイ、実行していたが、Configuration ManagerでUWPプロジェクトのビルドとデプロイにチェックが入っていないためだった。デフォルトでオフになっているのかな。

2. Release版だと例外が発生する問題

Shared ProjectのMainPageを起動するときにSystem.PlatformNotSupportedException: ‘Arg_PlatformNotSupported’ 例外などが発生。Releaseで動かした場合だけなんだけど、そのまま例外をスルーすると動くっぽい。なんだろう。

3. Xamlのインテリセンスが死ぬ

一番困ってるのがこれ。たまに動くんだけど、何かしているといつのまにかインテリセンスが死んでいる。UWPプロジェクトを選択しているときはインテリセンスが正常に動いたことがない。”ContentPage was not found”みたいなのが出てインテリセンスの選択肢がほとんどない。Android/iOSプロジェクトを選択していると動くことも多いけど、いつの間にかインテリセンスのウィンドウが出なくなる。一応そんなときはAndroidやiOSのプロジェクトから共有プロジェクトの参照を消してビルド、もう一回共有プロジェクトの参照を追加してビルドすると出るようになったりする。かも?

Raspberry Piでウェザタイを動かす計画。一通りロジックは移植し終わったのて、画面も少し作ってみた。

2週間前の状態がこれ。モバイルバッテリー付けて持ち運べるようになった。

今はこれ。キーボードを付ければ打ち込める。

キーボード関連等、Windows依存の実装があるが、そこさえ作ってしまえば同じアプリがRaspberry Pi上のWindows 10 IoT、Windowsストア (UWP)、Android、iOSで動くので、一石四鳥といえる。Xamarin MacってのもあるっぽいけどMacでも動いたりするかなあ。

対戦機能も、Windowsストアならサーバ・ホスト両方できそうかな。Androidとかでも、少なくともゲストはできる見込み。

で、折角のラズパイなのでハードウェアも動くはず、ってことでお決まりのLEDを試す。キーボードを押すとON/OFFする。

ここまで下準備ができてくると、やりたかったあの企画も近づいてくる。ある程度できたらイメージを載せてみよう。

はっぱさんとラズパイワークショップ。近場によい感じの作業スペースがあったのでそこで情報交換をした。MacでどうやったらWindows 10 IoT開発ができるかが争点だったが、なんとか別PCでWindows 10 IoTまでインストールまで持っていければあとはMacでのVisual Studioで開発できるのでは、という推測をしつつSDカードカードを購入。

→結局MacのVisual StudioではUWPプロジェクトは作れなかった。

そしてそろそろ必要になってきたってことでマクセルのモバイルバッテリーを購入。3Aまでいけるのでラズパイも余裕。

モバイルバッテリーを取り付けた様子。これで完全にワイヤフリーになった。

とりあえずウェザタイをラズパイで動かすのが当面の目標だが、せっかくやるならモバイル対応も同時にできるとよい。ってことで前からやりたかったXamarin.Formsを試してみる。

Visual Studio 2017でクロスプラットフォームプロジェクトを作るとShared ProjectとUWP/Android/iOS用のプロジェクトができる。とりあえずWindows 10 IoTで動かすためにUWPを中心に。PCで実験してからラズパイに持って行けるのがすごく便利。

クロスプラットフォームのやり方はいろいろあって、まずはWPFでも使っていたPortable Class Library(PCL)はそのまま使える。で、WPF用の共通プロジェクトはShared Projectにして、ifdefでなんとかするかな。PCLでインターフェースを定義、プラットフォーム依存プロジェクトで実装を定義、でDependency Injectionでやるのが綺麗らしいけど、クラス数が多すぎてめんどい。

Shared Projectはそれ自体はDLLでもスタティックライブラリでもなくて、各プロジェクトに勝手にマージされるイメージっぽい。それはいいとして、ifdefのdefine値は各プラットフォームで定義されていると思ってたんだけどそういうわけではない、んですかね。とりあえず自分で各プロジェクトに_UWP__とか定義した。

XAMLの方のクロスプラットフォームはどうかというと、本を読んでいるとXamarin Formsで共通にするかプラットフォーム依存でそれぞれ作るかの2択で、やれることはそんなに変わらないように見えた。なので当然Xamarin Formsでやるんでしょ? って感じだったが、実際やってみると・・・これはプラットフォーム依存の方が楽かも、って思える。コーディング中に画面イメージが出ないのはまあ仕方ないとして、何かちょっとでも変なコードを書くとインテリセンスが動かなくなったり、とにかく不安定。まあ、何をするとおかしくなるのかを学習しながら作っていけばなんとかなる、のか? あと、コード変更した後いちいちBuild&Deployを手動でやらないと新しいバイナリでデバッグできないのは何か設定とかないのかな。

少し心配だったGPIO周り。XamarinのUWPで動くかな、と思っていたが普通にUWPのプロジェクトからGPIOのライブラリは参照できた。最終的に動くのはXamarinがエミュレーションしたものではなくてUWPそのものなのかな?

ひとまずUWP on Xamarin.Formsで作った最初の画面。

Raspberry Piでウェザタイもどきを動かそうとしているのだが、Windows 10 IoTを使えばC#が使えるということで実験。

MSのページに従ってWindows 10 IoT Core DashboardからSDカードにイメージを転送して起動。するのだが、しばらく起動中のままになり、最終的にBAD SYSTEM CONFIG INFOでブルースクリーンになる。その後起動するとBCDがおかしいエラーで何もできなくなる。何度かSDカードを作り直すがダメ。ネットを調べるとアンペアが足りないとか出てくるが、Surfaceの充電器のUSBポートでもダメ。

余談だが、一度Windows IoTを入れるとSDカードに大量のパーティションができる。どうやってフォーマットすればいいのか分からないのでパーティションを全削除したらWindowsから認識されなくなった。これはXperiaにつないだらフォーマットしてくれた。

で、結局SDカードとの相性がだめだったようで、TOSHIBAの16GBはダメでELECOMの16GBで起動したらちゃんと起動した。

→追記。TOSHIBAのSDカードがクラス4だったからだと推定。SDカードがすぐ欲しかったのでコンビニで買ってきたらクラス4だった。ELECOMは電器屋でちゃんと?買ったものなので当然クラス10。

公式7インチタッチスクリーンだと画面が逆になってしまうのを直すため、Windows 10 IoT Core Dashboardからデバイスポータルを起動。が、インストール時に設定したパスワードが通らない。どうもあのパスワードではなく「p@ssw0rd」らしい。パスワードは変更しておいて、デバイスポータルからようやく画面を反転。

次。PCからリモートで操作する方法を探してみると、Windowsストアアプリがあるらしい。Windows IoT Remote Clientでリモートデスクトップのように操作できた。これでなんとか使い始められそう。

WT3.2の開発もほぼ完了。ということでラズパイの環境を整備。秋葉原で買ってきたラズパイ用7インチタッチLCDとケースを取り付けてみた。

LCDの電源もラズパイから取れるし、一体型で持ち運びもOK。何より裏蓋も取り外し可能ってことでなかなか使い勝手が良い。

裏で動いているウェザタイonラズパイプロジェクトを開始しよう。

久々にはっぱさんとアキバへ。今回の目的はしばらく前から気になっていたBEEP秋葉原店。路上にベーマガっぽい絵が描かれていて、地下の店に入るとレトロなPC、ゲーム、本がいっぱい置いてある。MSXやx68があったり、昔PC6001でやっていたタイニーゼビウスのテープが置いてあったり、PCやファミコンなどのゲームもいろいろ。ただ、見ていて楽しいんだけど、さすがに買っても遊べないので買う物はあまり・・・。ベーマガも結構置いてあったけど、国会図書館で読めるからなあ。本気で通っている人はアーケード基板とか家で遊べるようにしてたりするんですかね。

もう一つの目的のRaspberry Pi。とりあえずArduinoのときに買うのを保留にしていたカメラモジュールを買ってみた。どのくらい使えるか分からないけど試してみよう。

ちょっと前にRaspberry Piを買っていたのでいじってみる。

Raspberry Piは小さいコンピュータで、SDカードに入れたOSを起動できる。また、電子部品を付けられるピンがあるので電子工作ができる。本当はArduinoにWi-Fiとカメラを付けてラジコンをパワーアップさせたかったんだけど、モーター2個とBluetoothを付けた時点で他の部品をつけられなくなってしまったので、最初からWi-Fiが付いていてカメラ用端子の付いているRaspberry Piを試そうかと。

Raspberry PiとSDカードを買ってきて、HDMIでディスプレイ、USBでマウスとキーボードをつなぐ。PC側でRaspbian(デフォルトのLinux)をSDカードに入れて準備完了。あとはRaspberry Piを起動してOSをインストール。パスワードを設定したりWi-Fiの設定をして、そこからはPCからSSHで操作できるようになった。

なんだけど、家ではWi-Fiルータ、外でテザリングでつなごうとすると、どうしてもDHCPになってつなぎにくい。ディスプレイをつないでifconfigとかはかなり面倒。てことでまず最初のプログラムとして、Raspberry Piを起動したらIPアドレスをWebに通知するようにしてみた。初Pythonだけど、いろんなコピペなのであまりよく分かってはいない。

# coding: utf-8
import urllib2
import subprocess

url = 'http://xxxxx/cgi-bin/xxxxx.cgi?ip='
cmd = "hostname -I"
ip = subprocess.check_output(cmd,shell=True)
urllib2.urlopen(url + ip)

あとは、Raspberry Piを起動すると勝手にpiユーザでログインするみたいなので、piユーザの.bashrcに以下を入れてみた。

python /home/pi/xxx.py &

Web側はとりあえずCGIにしたが、自作のライブラリをいろいろ使っているのでここには載せきれない。もらったIPアドレスをファイルに書き込んで、標準出力に出すだけのものをさくっと作った。

これでIPアドレスが分かるようになったので、ディスプレイもマウスとキーボードも使う必要がなくなった。便利。

はっぱさんとMaker Faire Tokyo 2016に行ってきた。

初めてなので混雑を避けて2日目の午後1時くらいに行ったのだが,丁度良い混雑具合で暑くもなく良い感じだった。イベント系はスルーして展示だけ一通り見て回ったのだが,とにかく膨大で疲れた。行く前は,まあコミケな感じでサークルとか個人とかで作ったものを売ってるのかな,と思ってたけど,実際は,大学の研究室とか,工学部学園祭の全国大会的な感じ? 想像より本格的だった。

電子工作では,元々Arduino,Rapsbery Pi,IchigojJamしか知らなかったけど,それぞれの種類,組み合わせるボードにいろいろなものがあったり,他のフレームワーク,電子ブロック的な物とか。あとはVRなんかは流行りでいたるところでやっていた。電子じゃない工作では,ピタゴラ装置みたいなのとか,キーボードを打つとBB弾が出せるとかは面白そうだった。

てことで今回は様子見で行ってみた感じだけど,作るモチベーションをだいぶ溜められた。

今,「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シールド作りを見学。せっかくだから私も秋月電子で購入した測距モジュールのピンソケットはんだづけをしてみる。さすがにはんだ環境は快適。次の目標はこれを使って障害物を検知するところかな。

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まではいけなかった。

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

2015011101

2015011102

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

アメリカで衝動買いしたArduino UNOをはっぱさんに渡してきた。一人でやってもモチベーションが上がらないので道連れに。Arduinoは小型のマイコンで、ハードウェアをつなげてソフトウェアを組み込むことでいろんなことに使える。とはいえまだ本体しかないので、いろいろ揃えていかないと何もできないかな。