2016年7月24日日曜日

I2C接続のDCモータドライバ

3年ぐらい前にRaspberry Piを自走式にして遊んでいた時のシャーシにつけてたモータドライバが煙を吹いてお亡くなりになられたのでI2C接続のモータドライバでも作ってみようかと。
モータドライバを作ると言ってもL298Nを使ったモジュールはeBayでお安く買ったのが在庫有ったのでこれこいつをPWMで制御できる程度のものでいいかなぁと
多分こいつも3年ぐらい前に買ったやつで、壊れたモータドライバのがだいぶ熱を持つし、パワーが無かったので買ってたやつかも。

Attiny85がたくさんあったのでとりあえずI2Cスレーブのライブラリと格闘してPWMが2ch分動かせたんだけど、結局L298で2ch分動かすにはロジックICを使うしかな差そうなんだけど残りの2chのデジタル出力がうまく行かなくて断念…
Arduino Pro microも在庫有ったんだけどi2cの関係で調べていたらオープンソースなモータドライバを見つけてしまったのでパクらせてもらった…

Grove I2Cモータドライバとして普通に売られてるものなんだけど、回路図もプログラムも公開されてるっぽい。
Atmega8はESC修理用のやつが有ったのでそいつを使用してみた。
ただしTQFPなのだ…

まずはおもむろにユニバーサル基板の上にカプトンテープを貼ってとりあえずプログラムを書き込んだ。
最初に書き込んだのはこの後配線が大変なことになりそうだから…
DIPスイッチはI2Cのアドレス変更に使うみたい。

端子を付けて完成。
スズメッキ線で結構裏面を使ってしまった。

3年前に作ってホコリをかぶっていたシャーシに再びモータドライバが!
このモータって3Vじゃなかったっけと言いつつこのモータドライバだと4.8V以上だったはずなのでエネループ4本で駆動してみた。
ちなみにL298Nモジュールにレギュレータ載ってるけど、今回のように低い電圧で動かす場合はジャンパで外電源に切り替えて別なところから供給しないとうまく動かなかった。
多分レギュレータが悪い…(本来このモジュールは12V駆動を想定してるらしい)

モータドライバがI2Cになったことにより上に何載せても良さそう。
Raspberry Piでもいいし、ESP-WROOM-02でもいいし。


2016年7月17日日曜日

USBでDigisparkと通信してみた。

Arduinoは基本的にシリアルポートを持っているけどDigisparkはV-USBでUSB対応担っているのでハードウェアなシリアルポートは持っていない。
一応DigiCDCを使えばUSBでの仮想シリアルポートも使えるようだけど安定性の問題からDigiUSBに取って代わられてるみたい。

DigiUSBはlibusbからDigisparkを通信できるようにしてるようなので、PC側は専用にツールを作らないといけなかったり。
一応PythonベースでArduinoのシリアルモニタのように使えるツールも公開されてるけど…

DigiUSBからDigisparkを制御する方法はC++やVC#での例も有ったので今回はVC#でDigisparkと通信してみた。

とりあえずGithubからサンプルをゲット。
こちらのセットの関数をフォームからゴニョゴニョしただけど簡単にGUIアプリからDigisparkを制御できそう。
ただしシリアルと違って受信イベントがないので定期的に読みに行くかしないと行けないかなぁ
とりあえずLEDのオンオフぐらい。

DigisparkもクローンがeBayでだいぶ安かったのでAttiny85取り用に何個か買って基板だけ放置されてたんだけど、最近Attiny85をお安くそこそこ手にれたので元に戻してみた。
クローンだとReset端子を入出力に使えないので今回の復活でちゃんとResetも使えるようにしたのでUSB接続でもIOが4ポート使える。

I2CもSPIもUSBのピンと被ってないし、センサのデータとか読み出せたりするかなぁ

Related Post

Raspberry Pi Zero Wを買ってみた

ようやく技適が取れて、日本でも発売になったRaspberry Pi Zero W。 スイッチサイエンスで発売開始から1時間53分格闘したところなんとか購入できた! というわけで今日届きました。 スイッチサイエンスだとメール便で送ってくれるので送料が安くて良い。 ...