アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

XBEEデバイスを2台作成

引越しで部屋数も増えたので、新しい部屋用にXBEEデバイスを二つ作成します。

・・と言っても、 XBEE用の基板をアップデート(再設計) で製作した基盤があるので、それを部品を半田でつけたり、XBEEの環境設定や、PICにプログラムを焼いたりするだけです。

こんな感じ。

IMG_6971.JPG



ケースはガチャガチャのカプセルに入りそうだったので、こんな感じで入れ込みました。

IMG_6972.JPG


二つ作成したので、並べるとこんな感じ。

IMG_6974.JPG


それでもって、コンセントに取り付けるとこんな感じ。

IMG_6973.JPG


IMG_6975.JPG



XBEE用の基板をアップデート(その3) - サーボ

面倒なので、ずっと後回しにしてきましたが・・・今回サーボモータが動作するかの確認をします。


○準備するもの
一応、用意するものを以下にリストアップしておきます。最後のドクロヘッドは、近所のガチャガチャ で入手しました。送料考えると・・近所のガチャガチャ を探した方が良いかもしれません。

サーボモータ

デジタル・マイクロサーボ SG90 (1個)

新品価格
¥440 から
(2020/9/17 22:35時点)




マウンタ



ドクロヘッド(ガチャガチャ )



プラリペア(接着剤代わりに)

造形補修剤 プラリペアキット PK-16 白

新品価格
¥1,618 から
(2020/9/17 23:16時点)





○PICのプログラム
SG-90のデータシート を見ればわかると思いますが・・・パルスによって-90~90に角度を指定できるようになっています。

Screen Shot 2020-09-17 at 22.48.17.png


ちなみに各パルス幅は、0.5msec : -90、1.45msec : 0、2.4msec : 90となっています。

PICには PWM という機能が備わっているのですが・・

内部クロック16MHzで動作させるとSG-90に必要な50Hz(20msec)などという遅い周波数は生成できません。

なので・・ 普通にタイマを使用しますが、それでも一工夫必要になります。

私の場合、前半 4msec 、後半16msecに分けて制御するようにしました。

説明は面倒なので割愛しますが、前半の4msecではタイマの1クロックを細かくしてユーザから0~120の値が設定されると、0.5msec ~ 2.4msec になるように調整し、後半はPost Scalerを使って16msecカウントするようにしています。

ソースコードは ここ に置いておきます。

一応、以下のような感じでオシロで波形も確認しているので、問題はないかと思います。

IMG_5391.JPG



○モータのマウント

マウンタを組み上げます。
付属の部品がマウンタに全く合わないので、ニッパでガシガシ合うように不要な部分を切っていきます。

IMG_5437.png


プラリペアでマウンタとドクロヘッドの下の部分を接着します。

IMG_5438.png


ドクロヘッドを組み上げて出来上がりです。

IMG_5439.png


○デモ動画
乱数を使って、ホスト側からシリアル経由で適当にコマンドを送っています。




こちらは、パルス幅を変えて、ゆっくり動かしています。



参考までに。



XBEE用の基板をアップデート(その2)

前回、 XBEEの基板を再設計した とお話ししましたが、ようやく完成しました。

とりあえず、 リモコン、温湿センサー、人感センサー、照度センサーに加え、OLED(有機EL)がこんな感じで普通に使えています。

IMG_5362.png


OLEDには、温度・湿度・時間の情報を表示するようにしており、中々便利です。

IMG_5363.png


板にホットボンドで貼り付けて、吊るしているだけなので見た目はあれですが・・・

暫く、様子をみて普通に問題なけえれば、もう少し体裁を整えようかと思っています。

参考までに。


XBEE用の基板をアップデート(再設計)

前回、OLEDがPICで普通に使えることがわかった ので、調子にのって、既存のXBEEボードをアップグレードしようと思いついたのが運の尽き。貴重な時間がドンドン失われていきます。

○今回のアップグレード

現行のXBEEボードは以下の機能をサポートしています。

  1. 赤外線送信(リモコン)
  2. 温度湿度センサー
  3. 人感センサー
  4. 照度センサー


今回、上記に加えて、以下の機能を追加しようと思い立ったわけです。

  1. PICのアップグレード: PIC16F688(14pin)@8MHz => PIC16F1827(20pin)@16MHz
  2. 新たにOLEDに対応
  3. サーボ(x2)に対応



○基板(PCB)の設計

そうと決まれば、基板(PCB)の設計ですが、有難いことにAutoDeskから Eagle というCADがフリーで配布されています。
非商用、回路図シート2点、レイヤ2点などの制限がありますが、私のような趣味でしかも大した回路図設計でもない者からすると有難いの一言です。

1) 回路図をこんな感じで書いていきます。

Screen Shot 2020-06-17 at 23.25.25.png

2) その後、こんな感じでレイアウトに起こします。

Screen Shot 2020-06-17 at 23.25.38.png


3) そして、できたデータを基板屋に送ります。

今回、私が使った基板屋は、中国のシンセンにある ELECROW社 に頼みました。

特に難しい手続きはなく、Eagleが生成したデータをWeb経由でアップロードして、PayPalで支払って終了って感じです。

実際にかかった費用は以下の通りで、合計$13.14となりました。
輸送費をケチって、一番安いRegistered Airmail - 書留航空郵便を使ったので2週間ぐらいかかったような気がします。

基板製作費 (5枚で): $6.9
輸送費: $6.24
合計: $13.14


○基板の確認

そうこうしていると基板が到着しました。しかも5枚のオーダにも関わらず、7枚送付されてきます。
(他の方のブログに2枚おまけで送られてきたと書かれていたので、そーゆーものかもしれません。)

IMG_4908.png

現行のXBEEボードと比較して、機能が増えたにもかかわらず、かなり頑張ってサイズを小さくしました。
(左が現行の基板、右が今回の基板)

IMG_4927.png

部品を配置するとこんな感じ。

IMG_4925.png

更にOLED、センサー類を追加するとこんな感じ。

IMG_4926.png


一応、シリアル通信ができ、OLED、温湿度センサーが動作するところまでは確認済み。

ただ、赤外線送信(リモコン)、照度センサー、サーボがまだ未確認で、しかも確認するプログラムも書けてない状態なので、どうしたものかな・・と思案している状態です。

まぁ、一応、全ての機能が動作確認をとれたら、PCBのデータも含めて、コード一式をどこかに置こうと思っています。
いつになるかわかりませんが・・

IMG_4929.JPG





ZAKU HEADをXBEEシステムのボディにする

○WWDC2017

本日の WWDC2017 の発表いかがでしたでしょうか?

私はもう少し驚きがあっても良かったのに・・と以下の点で残念でなりませんでした。

1) MacBookが全然進化しない。Airにおいては新しくリリースされない。
実際に私は以下の2012年のモデルを使ってますが、そこからの性能があまり代わり映えしない感じです。

 MacBook Air (13-inch, Mid 2012)
 Processor 2 GHz Intel Core i7
 Memory 8 GB 1600 MHz DDR3
 SSD 512GB

 メモリが16GBになって、Boost時に3.6 GHzまでCPUが上がるとかぐらいか。。

2) HomePodが二番煎じの割に微妙。各部屋に子機みたいなのがいて、どの部屋からでも操作できたりすると良いのですが・・



○ZAKU HEADをXbeeシステムに組み込む

前回 、ZAKU HEADの目玉を光らせて遊んでましたが、今回はXBeeシステムに組み込みたいと思います。

とは言っても、以下のような基盤が既に存在あるので、LED部分だけを取り替えるだけです。

IMG_0269.jpg


板にアダプタ電源用のコネクタをホットボンドで接着します。

IMG_0271.jpg


基盤を透明なプラスチックのケースに入れ、その上のZAKU HEADを載せて終了。

IMG_0273.jpg


こんな感じです。ZAKU HEADの下から伸びているのが、赤外線(リモコン)・照度センサー・赤外線(リモコン)です。

IMG_0275.jpg

実際に動かすとこんな感じ。
Siriで部屋のライトをオフ、人感センサーが感知した時にZAKUのモノアイを光らせ、自動で部屋のライトをONにしています。





ただ、ZAKUのモノアイの光が強すぎると家族からクレームが入ってるので、なんとかしないといけません。



ルンバをXBeeでコントロール (Part 4)

○前回の続き

前回、 Part3 であまりSleep Modeに触れなかったので、今回はそれについての補足します。

まず、ルンバに取り付けるXbeeをSleepモードにしないとルンバのミニDINからホームベースにいる時に20V電圧がかかるため、 約0.8Wが三端子レギュレータにかかり発熱するという問題があります。

そんなわけで、Xbeeをスリープモードにします。


○Xbeeのスリープモード

今回、Cyclic Sleepを使い定期的にルンバ側のXbeeを起こして、ホスト側(Raspberry Pi)と通信するようにします。

詳しく解説したいところですが、私自身もいまいち要領を得ていないのが現状です。

本家DIGIの ここ に書いてある通りで、以下の5個のパラメータで設定していきます。

日本語だと ここ に詳しく書かれております。

SM・・・Sleep Mode (0x04:Cyclic Sleep mode)
ST・・・Time Before Sleep (x 1msec)
SP・・・Cyclic Sleep Period (x10msec)
SN・・・Sleep Number
SO・・・Option


・・で、 結局のところ、使い方がよくわかりませんでした


やりたかったこと

1) RaspiからCoordinatorに対して、シリアル経由で何らかのメッセージが届く。
2) Roomba側のEnd DeviceがSleep状態であれば、Coordinator側で保持。
3) Roomba側のEnd DeviceがCyclic Sleepから目覚めて、Pollリクエストを出したら、Coordinatorが保持していたコマンドをEnd Deviceへ送信。

上記のような処理を行いたかったのですが、実際に行って見るといくつかパラメータを組み合わせてみたのですが、End Device側からメッセージが届かなかった旨のメッセージしか確認できませんでした。

そんなわけで、以下のように変えたところ・・・

SP=0x0AF0(28sec)
ST=0x1388(5sec)

約2分間に1回Network IndicatorのメッセージがEnd Deviceから届くようになりました。

なぜこの周期で届くのかわかっていません。(恐らくはCoordinator側のSPあたりの設定だと思うのですが・・・)

Network Indicatorを受けた直後であれば、恐らくEnd Deviceも起きてると思い、このタイミングでRaspi側からメッセージを送信するように変更しました。


実際に2分に1回、通信ができて動いています。


以下は、実際にSiriからルンバをONする動画なのですが、2分に1回の通信なので実際のルンバの起動に時間がかかっています。








ルンバをXBeeでコントロール (Part 3)

実は Part2 で導入したルンバですが、やたら 掃除の時間が短くなり(およそ40分)、挙げ句の果てにはホームに帰れずに途中で果てるという現象が起きてしまいました。

原因は XBeeがぶっ壊れて消費電流が増大していたから です。

おそらく、三端子レギュレータが高温状態により過電圧がXBeeにかかったのではと思っています。

まぁ、そんなわけで同じ状況に陥らないように色々調べてみました。



○ルンバから供給される電圧
実は、ホームにいる場合とクリーニング中でミニDINからかかる電圧は以下のように違います。

  • ホームにいる時、20V
  • クリーニング中、14V


基本的に1日1回、約1時間動かすとして、残りの23時間は20Vがかかる計算です。




○Xbeeの消費電流

Xbeeには通常時とSleepモードで三端子レギュレータに流れる電流を測定しました。

結果は以下の通りです。

  • 通常時、40mA
  • Cyclic sleep状態、2mA


今まで、何も考えずに通常動作させていたので、コンスタントに 40mA消費されていたことになります。


○消費電力

ルンバがホーム時にいる場合の消費電力は、以下の通り。

20V x 40mA = 0.8W

ただし、Xbeeが消費する電力は駆動電圧が3.3Vなので、

3.3V x 40mA = 0.13W


三端子レギュレータが(おそらく熱として無駄に)消費する電力

0.8W - 0.13W = 0.67W

本当に非効率です。。


三端子レギュレータは熱いし効率が悪いなぁと気づいていたのですが、ソコソコ動いていたので、ちょっと見て見ぬ振りをしていました。


そんなわけで後述しますが、Cyclic sleepを使って周期的に動かし、消費電力と熱を抑えます。



○ケースを作成

ブレッドボードの基盤をルンバに貼り付けてるのも危ないので、どうしたものかなと思ってましたが・・

最近、 FriskRoomba というBluetooth経由でルンバを操作するキットを参考に、私もインスパイアされて(真似して)作ってみました。

IMG_1299.jpg

IMG_1297.jpg

IMG_1296.jpg

IMG_1301.jpg








Xbeeシステムについて簡単に説明

我が家のXBeeシステムについて簡単に説明します。

以下の絵のように"XBee + PIC + センサー + IR"をXbee端末とした機器をそれぞれの部屋に配置しており、iPhoneからRaspberry Pi2にWiFi経由でアクセスできます。

block.png



ちなみにXbee端末は以下のような感じです。

以下の2枚は、ユニバーサル基板+100円均のコンセントカバーで作ってます。

IMG_0480.jpg

IMG_0484.jpg


次の3枚は、配線が面倒だったので基板設計して基板の発注をかけたのですが、大きくなった感じがあります。

IMG_0866.jpg

IMG_0940.jpg

IMG_0941.jpg

いつか時間がある時に、もう少し詳細に触れたいと思います。

ルンバをXBeeでコントロール (Part 2)

環境設定
前回まではハードウエアの設定を行ったので、今回はSWの設定を行う。

私はPerlを使っているが他にPhythonやC、Rubyなど開発言語は色々使えそうだ。

手順は以下の通り。

1) Perlが動作する開発環境 (OSXもしくはRaspberry Pi)
2) 2種類のテストコードを以下に置いておくので、必要なモジュールのインストールを行う。
基本的にはベーシックの方を使う。

testRmba.pl ・・・ベーシック

testRmba2.pl ・・・ステータスを1分に一回確認してファイルにセーブする


>sudo cpan

で、CPANに入って以下のように使っているモジュールをインストール

>install Device::SerialPort
>install Device::XBee::API
>install Data::Dumper
>install threads
>install threads::shared
>install Thread::Queue
>install Schedule::Cron

以下のコマンドで抜ける。

CPAN>quit


3) 環境に合わせて以下の箇所を変更。

SERIAL_PORTは、ホスト側につないだ時のUSBのPort。
XBEE_ADDRESSはルンバ側に接続するXbeeのLowアドレス。

use constant SERIAL_PORT => "/dev/tty.usbserial-AH017K8D";
use constant XBEE_ADDRESS => 0xFFFFFFFF;


4) コマンド入力用のパイプの作成

>mkfifo input-fifo



5) Xbeeをルンバ、Host側に接続してテストコードを実行。

>perl testRmba.pl

IMG_1035.jpg

Joint Notification=1にしているので、一回目に実行すると接続したダンプメッセージが表示されたと思う。

○テストコードの使い方

テストコードの中身を見てもらえばわかるのだが、Perlを実行して別ターミナルから以下のようにEchoしてinput-fifo経由でコマンドを入力する。

> echo TX,XX,XX > input-fifo

一応、以下のコマンドを用意しているが、TX以外はこのテストコードでは確認していない。
(多分、動作すると思う)

TX・・・シリアルコマンド、ルンバにデータを送信
AT・・・Host側のXbeeの設定行う時に使うATコマンド
RAT・・・ルンバ側のXbeeの設定行う時に使うRemote ATコマンド


○動作させる

1) ステータスコマンドの確認
以下のように打ってデータの羅列が出れば、問題なし。

> echo TX,0x8e,0x0 > input-fifo

2) 以下のコマンドでCleanがスタートする。

> echo TX,0x80 >input-fifo ・・・スタート
> echo TX,0x82 > input-fifo ・・・コントロール
> echo TX,0x87 > input-fifo ・・・クリーン

ルンバの状態遷移、コマンドに関してはルンバが出している Create Open Interface_v2.pdf を参考にしてほしい。


参考までに私が知りたかったホームにルンバがいるかどうかはステータスをチェックで"Charging Sources Available"のHome Baseビットを確認すれば良い。

testRmba2.plの方では、毎分ステータスチェックのコマンドを発行してこのビットを確認し、動作している時だけステータスをファイルに落とすようにしている。


ビデオ

以下はPCから先ほどのXbeeにコマンドを打った場合。



以下はXbeeシステムに取り込んでiPhoneから制御。
ステータスチェックを毎分行っているので、ホームベースに戻ってからiPhone側のステータスが変わるまで最長で1分の遅れがある。




ルンバをXBeeでコントロール (Part 1)

○はじめに

ルンバをXbeeでシリアル通信してコントロールすることは良く知られていて、まぁ今更な感じでもあるのだが・・・必要にかられて仕方なくやることにする。

私が所有しているルンバは 700リシーズ のミドルクラスの770という製品で赤外線リモコンもサポートしているのだがこれが曲者である。

それ以外にも色々あって、簡単に課題を書くとこんな感じ。


1) ルンバは床に置いているため、Xbeeシステムのリモコンもルンバ用に割り当てて下に向ける必要がある。
2) ルンバのリモコンコードを解析するとわかるのだが、フォーマットが特殊でヘッダーが存在しないためリモコンの効かないことが多い。(誤検出が多い。)
3) ルンバが動作していると、Xbeeシステムの人感センサーにひっかかるため、動作しているか、掃除が終わってホームに戻ったか確認したいのだがその手段がない。

(前までは、Xbeeシステムからルンバを起動して、1時間は人感センサーをOFFにするという制御を入れていた。)


それで、これをXbeeを使ってコントロールすると、以下のように3項目中2項目は解決できる。

1) は解決できず。Xbeeを使っても同じでルンバに1個Xbeeを割り当てる必要がある。
2) は解決。シリアル通信なので誤検出はほとんどない。
3) は解決。ルンバを起動後にある間隔で(例えば1分に1回など)ステータスをチェックしてホームに戻ったか確認できる。


○用意するもの

秋月電子 で以下を購入。
1) Xbee USBインターフェースボードキット [AE-XBEE-USB] x1個 (通信が上手くいかない時に追加でもう1個持っていても良いと思う)
2) Xbee用 2.54mmピッチ変換基板 [AE-XBee-REG-DIP] x1個
3) XbeeZBモジュール [XB24-Z7PIT-004] x2個
4) ミニブレッドボード [BB-601]
5) 抵抗 15kOhm x 1, 10kOhm x 1
6) その他、ジャンパ線、USBケーブル、ハンダ

続いて 千石電商 で以下を購入。
7) MP-371/77P ミニDINプラグストレート

あとはルンバのHWドキュメント。
8) iRobot Create OPEN INTERFACE


○システム構成
ちなみに、今回の構成は以下のようにするつもり。

Host(MacBook)[USB]--Xbee(コーディネータ) <~~~~無線~~~~> Xbee(ルータ)--ルンバ

ちなみにXBeeの設定は以下の通り。
この あたりを読んで 適当にDL、PANを設定する。

ちなみにOSX版のXCTUだとなぜかタイムアウトっぽい感じでXbeeが認識しないので、VMWareでWindows版で設定した。


参考までに私が使ったシリアルの設定は以下の通り。

コーディネータ側のボーレートは何でも良いが、 FLOW制御だけEnableにしておく。
ルータ側はFLOW制御はどうせ効かないので、OFF、ただし ルンバのシリアルスピードの規格のためにBD=7(115200bps)にしておく

1) コーディネータ側
ZIGBEE COORDINATOR API
BD - 3: 9600bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
D7 - 1: CTS FLOW CONTROL
AP - 1: API Enable
AO - 0: NATIVE

2) ルータ側
ZIGBEE ROUTER AT
BD - 7: 115200bps
NB - 0: NO PARITY
SB - 0: ONE STOP BIT
RO - 1: Packetization Timeout
D7 - 0: Disable
D6 - 0: Disable
JN - 1: Join Notification Enabled

なぜコーディネータ側のボーレートを9600bpsにしているかというと、今使っているXbeeシステムに合わせただけで特に理由はない。

参考までにルンバで使うデータの最大サイズは52byteでXbeeが元々持っているバッファは100byte(と ここ に書いていた)なので転送速度が異なっていてもオーバーフローは発生しない。

それでも心配ならPCにボーレートの違うXbeeを2個繋いで、スピードの早い方からデータを流して片側でデータ化けしてないか実験してみると良い。

○ハードウェアの準備

ルンバ側のXBEEハードウェアの作成
"iRobot Create OPEN INTERFACE"のPage 4を参考に以下のように接続。

ルンバ側はTTLの5Vなので、Xbee側は3.3VなのでXbeeに入力される信号に対しては念のためにDividerを入れておく。

Xbee.png

こんな感じになるはず。

IMG_1056.jpg

    >> 次へ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: