カテゴリー別アーカイブ: Engineering

柔らかいのと硬いのと

リモコン自作の続き

やっぱりアカンかったこれに代わるアナログジョイスティックと言えば、それはもうParallaxの一択である。だが高いそれでは面白くないので、そのパチモンを使うことにした。そこでまずは動作確認をM0で。シルクには+5Vとあるが、3.3Vで使う。

iPad Air 2 (3.3mm, f/2.4, 1/30 sec, ISO160)

むー、動いたのはいいがそのナリが。PS3のそれと同じサイズと感触、つまりデカい(-_-;)。値のアバレも皆無ではないが、何ビットか丸めてやれば問題なさそう。SWピンはM0のD3に入れ、INPUT_PULLUPでattachInterruptしてみたらちゃんと拾えた。思えばM0でこれって、今回が初だ。ま、最終的にはTrinketあたりで動かす事になると思うので、スリープとかはその時に。

けどこれ、果たしてどうやってハコ入れしたもんか。

あれっ? ESP32!

秋月のサイト、左上にチラッと「ESP-WROOM」と見えたので「何をいまさら?」と思いつつ、良く見るとそれに続いて「32」の文字が。おお〜っ! と、ここで理解した。遂に技適取れたんかいー!!!

気になるおネダンはと言えば¥700と、予想より安いし♪ これならDIP化基板とのセットで¥1,000ぐらいか。多分これ、ArduinoでBLEな向きでのベストチョイスになる。早く出ないかなー!!!

# 実はそのBLEのためGenuino101買ったばっかなんすけど(涙)

AE-JY-DIPの使い方

タミヤのツインモーターギヤーボックスのためのリモコンを自作しようと思い、買ったはいいがそのままになっていた秋月のアナログジョイスティックDIP化キットにようやく着手 … しようと思ったらロクな資料がついてない。やむなく「多分こうだべえ」で配線してみたら動いた。以下その備忘録。読み出しはM0から。

iPad Air 2 (3.3mm, f/2.4, 1/33 sec, ISO40)

[CN1]側(手前列)、左より

1 = X: VCC
2 = X: Val
3 = X: GND
1 = Y: VCC
2 = Y: Val
3 = Y: GND

要は可変抵抗×2で、今回はVCCに3.3Vを入れた。そしてX:ValとY:ValをそれぞれanalogReadしてやれば値が読める。写真だと垂直方向がY軸で下が0、水平方向がX軸で右端が0。

感触いいし、指を離すと両軸とも中央に戻ってくれるのは有難いが、値は実にアバウト。なので16段階ぐらいに丸めて使うのが○でしょう。

追記:  指を離した状態で暫く放置しておくと、値が暴れ出す。つまりこれそのままでモーターとかステアとか動かすと、自発的に動いてくれる。これは有難い! … 訳ない。やっぱ×すかねぇ、コレ。

Arduino IDE 1.6 + 1.7 = 1.8

ちょっとした恥ずべき不注意でWin10をぶっ飛ばしてしまった。そこでやむなく出荷時の状態に戻して再設定、お陰で動作が見違えるように軽くなったのはいいが、これで週末丸潰れ(涙)。

さてその途上でArduino.ccから最新のIDEを、と思ったらバージョンが「1.8.1」とある。一瞬「?」となった後「おーっと、これが和解の結果かー!」と理解し、早速インストール。そして起動後、ボードマネージャから更新をしたら一覧にM0とかzeroとかが出る様になった。メデタシメデタシ!

だがやはり、ここまでの約2年間は勿体なかったなー。中でも当時出たばかりのzeroが、分裂騒動の渦中で放置された様な格好になってしまったのが痛かった。これを機に利用者が増え、未解決なままのstandbyとか割り込みとかの情報が流れてくるのに期待している ← 完全に人頼み(恥)。

これも仕事のうち

諸般の事情で、ブレボで動作確認したものを自らそっくりユニバーサル基板に組み付けする羽目に。これまでもICのテスト用にハダカで使うレベルのは幾つかやってきたが、全てが載ってて、最終的にハコ入れして持ち歩くモノというのは初めて。

1129

ピンの数が多いので、できる限りはんだブリッジで繋いでいこうと最初は思ったがちーとも上手くいかず、結局ご覧の有様。時間がないので、このままラッピングワイヤーのスパゲッティとするしかない。

2016-11-27-11-35-36 iPad Air 2 (3.3mm, f/2.4, 1/30 sec, ISO64)

もう少しで配線は完了だが、果たして無事動くかどうか。不安の中で作業は続く。嗚呼、これが予定通りPCBとなっていたらどんなに楽だったことか! これが済んだらマジでEAGLEの勉強しよう。

2016-11-29-12-04-52 iPad Air 2 (3.3mm, f/2.4, 1/30 sec, ISO200)

動いた、どーにか。いい勉強になったわ。

jquery-uiのtabsでハマった

今回は本業方面での備忘録。

Webページ内にタブパネルを設置する方法は数々あるが、最も楽なのがjquery-uiのtabs。それも各タブ内に直接外部ファイルを読み込む事ができるので、恰もブラウザのタブのように扱える … と思い込んでいたら大ハマリ。

これをした時に何が起こるかというと、各タブに指定された外部ファイルが全部まとめて展開されてしまう。例えばタブ1/2/3にそれぞれ外部ファイル1/2/3が指定されていた時、どのタブをアクティブにしてもそのページのソースは後者が全部繋がったものになる。

よくよく考えてみればタブとは、ページ内の要素を部分的に見せたり隠したりするだけの仕組みである。なのでこうなって当たり前なんだが、その結果名前の衝突が発生し、ボタンを押したら他の同名のエレメントが反応する、なんて事が起きる。むろんそうした仕組みを理解した上で予め外部ファイルを複数用意しておくのであれば問題ないだろうが、今回のような用途ではダメ。

という訳で作り直し。今度もjquery-uiのtabsを使うが、各タブ(DIV)の中身はカラッポにしておき、切り替えをトリガにiframeに外部ファイルを読み込むという形にした。結果は○。iframeって何となく好かんのだが。

Adafruit Feather M0

Arduino界隈で得た数々のノウハウを元に、次はいよいよ派手なのをやってやろう! と思ったらもうメモリが足りない(涙)。そこで「これはやはりZeroしかありますまい」とArduino-M0を買ってみたのが数ヶ月前。

が、それは昨年来の分裂騒動の影響で.orgのIDEしか使えないとあって面倒この上ない。またそのクオリティも.ccのそれに比べて明らかに低く、ブチ切れた挙句そのまま放置となってしまっていた。

そこへ最近.ccと.orgが和解とのニュースが入り、ヤレヤレと思ったのと同時に「ここはやはりCortex-M0をモノにしておこう」と奮起、再度M0に向かった。だがしかし、.orgのIDEが相変わらずのタコでラチ明かず。「なんとかならんのかいな」と、思っていて目についたのがAdafruitのFeather-M0。こんなのが出ていたとは知らなかったが、これなら.ccのIDEで開発できるし、そんな高くもないし「なんとかなっぺぇ!」でソク購入。

2016-10-15-19-29-34-hdr
iPad Air 2 (3.3mm, f/2.4, 1/33 sec, ISO200)
このLEDは1秒間隔で点滅しとります

Blinkなんぞすっとばして、まずは節電。M0の時も情報が少なくて頓挫していたが、まずはこれからとRTCZeroなるライブラリに挑んでみた。そして試行錯誤の末、standbyModeからRTCのそれで復帰するところまで到達したのがこれ。

#include <RTCZero.h>

#define PIN_LED (6)

RTCZero rtcZERO;
volatile unsigned long aCounter = 0;
int alarmSS = 0;

void setup()
{
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED, LOW);

  rtcZERO.begin();
  alarmSS = rtcZERO.getSeconds();
  rtcZERO.attachInterrupt(alarmSR);
  rtcZERO.enableAlarm(rtcZERO.MATCH_SS);
}

void loop()
{
  rtcZERO.setAlarmSeconds(alarmSS = (alarmSS + 1) % 60);
  rtcZERO.standbyMode();
}

void alarmSR() // alarm Service Routine
{
  digitalWrite(PIN_LED, (aCounter++) % 2);
}

standbyModeで何が有難いのか、まだよくわかっちゃいないが恐らく省エネにはなってるだろうし、何より外付けRTCが不要になっただけでも感動。アップロードのたびにリセットボタンをクリクリというのが面倒だし、もうちいスマートなやり方がありそうな気はするが、まずはこれで「ほぼ1秒」なインターバルができたので○。

次は外部割り込み。先は長いのー。

追記:  その外部割り込みに着手。が、 スイッチへの反応が鈍い。なんで? と調べていてわかった。なんとその外部割り込みではrtc.standmyModeから復帰しないではないか! これでは意味ない … と絶望しそうになったが、ググってみればやはり同じ目に遭って困っている人がいた。でも世の中には強者がいるものでこれを戴き、ちょいモディファイでクリア。ヤッタネ!

追記2:  今度はSerial。受信割り込みで復帰してくれるかな? と期待したら、それどころかstandbyMode中はその受信すらしてくれない模様。上記手法で該当ピンのEXTINTを開いてやってもダメ orz… ただいま鋭意調査中。

追記3:  更に困ったことにArduinoの受信バッファが64バイトしかなく、これを超えるデータが来る時はstandbyModeどころかdelayですらアウトという事実が判明。問題山積。嗚呼。

追記4:  受信バッファのサイズを変更(拡大)するにはcoreの修正が必要と知り、やりたくはないがやるしかあるまいと思ったらSAMDの場合のそれを探すのにエライ苦労した。そしてたぶんこれだろうとイジったのは[RingBuffer.h]と[boards.txt]。思い切って1024bytesとしたが、なんとか動いた模様。しかしこれ、IDEもしくはライブラリのバージョンアップの度にやらなきゃいかんかも(恐)。そもそも受信割り込みでstandbyModeから復帰してくれれば不要だろうし。困ったもんだ。

期待の3GIMが届いた

あまりに高価なのでこれまで導入を躊躇っていたが、その対抗馬がどこからも現れず現状他に手がない、という事で思い切ってタブレインの3GIMを購入した。soracomのSIMをセットし、動作をひと通り確認してみたが、その感想をひとことで言うと「ウ~ン」。

まずこれ、基板に部品取り付け穴が一箇所しかない。なので持ち歩こうとした場合、ハコへの固定には苦労しそう。またGPS/3Gともにアンテナを接続しなければ動作しないが、これまた接続端子がデリケートで心許ない。ブレボでの試験には非常に神経を使う。

次に消費電力。買ってから知ったんだが、その心臓はなんとCortex-M0(!)。これにGPSと3Gがくっついてるんだから、それだけでもかなりの大食いであろうとは思った。が、どうやら実際はそれ以上。まだ測ってはいないが、特に3Gでの通信をしていない時でもあまり消費電力が変わらない(ように見える)のが痛い。

そしていちばんのガッカリは、その洗練されていないコマンド体系。特にGPSに関するところがナントモな感じで「GPS要らないからもっと安くならんかい」と思ってしまった。

という訳で、ファーストインプレッションはこんなところ。いろいろ気になる点はあれど、現状これを使うしかないので今後いろいろ工夫してみる予定。