2020年6月28日日曜日

ESP32でLCDディスプレイを動かす

どうも。caketetuです。
ESP32で使うディスプレイを買ってきたのでテストしてみます。
今回はライブラリのサンプルを動かしてみるだけの動画になります。
環境:Arduino IDE 1.8.9


今回テストしてみたのはこちら(Amazonのリンクに飛びます)

1.8インチディスプレイは前から持っていたものです。WiFi時計を作った時に
使用しました。こちらがちょっとイマイチだったので買い足した次第です。


まず一番大きい2.8インチのものから使っていきます。



サンプルはArduinoIDEのライブラリマネージャから
Adafruit GFX LibraryとAdafruit ILI9341をインストールします。

ここで問題があり、私の環境ではAdafruit ILI9341のバージョンを落とさなければ
コンパイルできませんでした。今は1.3.6を使用しています。

ファイル→スケッチブックの例->Adafruit ILI9341からgraphicstestを開き
ピン定義部分とクラス宣言の部分を少し変更します。

// For the Adafruit shield, these are the default.
#define TFT_DC 17
#define TFT_RST 16
#define TFT_CS 5

// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

ESP32との結線は以下のようにします。

ESP32              2.8インチLCD
3.3V------------------------VCC、LED   
GND------------------------GND
GPIO5----------------------CS
RX2(GPIO 16)--------------RESET
TX2(GPIO 17)--------------DC
GPIO23---------------------MOSI
GPIO18---------------------SCK
GPIO19---------------------MISO

ソフトを確認するとわかりますが、CS、RESET、DCに関してはおそらく
どこでもよいと思われます。その他のピンも変更できそうですが、ソフトウェア
SPIになってしまうので動作速度が遅くなるのかなと。

動作の様子は一番下に。




次に一番小さなSSD1306モジュールを使ってみます。
今回はI2C接続で3つ入りのものを買いました。一個500円ぐらいなので
かなり安いと思います。


これもライブラリマネージャからライブラリをインストールします。
Adafruit SSD1306とAdafruit GFX Libraryを入れておきます。
こちらは最新版でOKでした。

ファイル→スケッチブックの例->Adafruit SSD1306からSSD1306_128_64_I2C
を開きちょっと変更します。

変更前
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)

変更後
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)


変更前
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64

変更後
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64

アドレスに関してはいくつか種類があるようなので注意です。

結線は以下のようになります。私の買ったものはプルアップが必要でした。

ESP32              0.96インチLCD
3.3V------------------------VCC
GND------------------------GND
GPIO21---------------------SDA(R10Kプルアップ)
GPIO22---------------------SCL(R10Kプルアップ)

これも最後に動作の動画を載せます。

最後はST7735Rディスプレイモジュールです。


これはずいぶん前に使っていたので導入を失念してしまいました。
あれほど証拠残しつつ作れと... とりあえず動いているプログラム晒しますので
何かの参考になれば。ライブラリはAdafruit ST7735で検索すれば出てくる
かなと思います。


表示テストの動画です。


ST7735がやけに表示が遅いのはソフトウェアSPIになってしまっているためと思われます。



今回購入した2.8インチLCDと0.96インチLCDには満足しています。
この二つを使い分けることでやりたいことをかなり広い範囲カバーできるでは
と考えています。ロボットのデバック用などとりあえず表示が欲しい場合は
小さくて配線の少ない0.96インチのものを。ディスプレイをメインに据えたものを
作りたいときは2.8インチのものを使用するといいかなと思います。

参考にさせて頂いたサイト




2020年6月21日日曜日

三軸カメラユニットの製作(3) 回路設計

三軸カメラユニットの三回目です。
前回でハードはほとんど完成したので、今回は制御回路と
回路を固定するコントロールボックスを製作します。



オン飲みロボットのときKONDOサーボの制御にICS変換基盤を使用しました。
これは使いやすいのですが、一個\2000近くするため自作したいと思います。
たくさん使う予定があるため設計にはEAGLEを使い、ELECROWに
外注します。

ここに過去に発注した時の記事があります。

これがICS変換基板を参考に作成した回路図です。サイトには抵抗だけで作る
回路が記載してありましたが、受信がうまくいきませんでした。
そのため実績あるICS変換基板の回路をほぼそののまま流用して作成しました。




配線図です。自動配線でサクッと作りました。小さすぎると発注できません
ので、無駄に多面付けにして大きくします。ElecrowのVカットの仕様が
イマイチ理解できませんでしたが、外に捨て基板を設け上面シルクに切りたい
線を入れれば良かったようです。あとは発注画面でコメントを入れておけば
親切かも。




完成した基板です。基板サイズ100×100mm×5個・OCS/ANAの設定
で約2000円、一週間ぐらいでできます。不安だったVカットの部分も特に
不満なく仕上がりました。



ここからコントローラ基板を作ります。CPUはESP32をモジュールで使用。
簡易インターフェースとしてボタン×3、LED×3を搭載します。
また、ここからはユニバーサル基板で作ります。





ユニバーサル基板で作るとは言え一応回路図と配線図を作りました。
インターフェース部とCPU部は分けて配線することにしました。



また、コントローラ基板を乗っけるためのコントローラBOXを設計します。




できました。パン軸サーボモータの横に設置しました。ちょっと大きく
なっちゃったかな?




実際に作ったもの。USBやサーボ配線を通す穴の位置が若干合わず
少しやすり掛けが必要でしたが、大枠はうまくいきました。




実際に乗っけてみた様子です。ついでに配線もきれいに直しました。
狙っていたとおりLED光がPLA材で拡散してきれいに見えます。
しかし、機能の割にはちょっと大きいです。まあ実用には影響ないのでヨシ。



次回はいよいよソフトを作っていきます。










2020年6月15日月曜日

三軸カメラユニットの製作(2) ハード設計2

どうも、caketetuです。
前回に引き続きハード設計と3Dプリンタで出力をしていきたいと思います。

前回設計したものを出力していきます。


我が家で使っている3DプリンタはANYCUBIC I3 MEGAです。
Amazonで買ったのですがリンクが切れていました。もう売ってないのでしょうか?
一年ぐらい使用していますが、特に問題なく動いてくれています。



今回使用するパーツ達です。白いものが3Dプリンタで作ったものです。
こうしてみると自分で作ったパーツは少ないですね。出力にかかった時間も
4時間ぐらいでしょうか。



サクサク組み立てていきます。
ここまでで完成したものは以下になります。
全軸が干渉なく±90度は動いてくれます。3Dプリンタを買って早一年、
ハード設計も慣れてきたなあと思います。




ここから土台の部分とロール軸を換装して市販のスペアシューを取り付ける
ユニットを設計していきます。




じゃん!スペアシューはこれを使いました。下の台形部分の寸法はおそらく
共通規格かと思います。ロール軸は犠牲になりますが、市販のカメラや
GoPro、スマートフォンを取り付けられるようになります。


シューの固定部です。右のロックパーツを横からねじ止めします。

土台部です。中央のナットでスペアシューに固定します。
これで市販の三脚にも対応できるはず。KRS2572HVは軸の反対側に
コネクタがついているのでこの向きで取り付けるためにはどうしても
少し浮かせなければなりません。そのため箱状になっています。


これらも3Dプリンタで作っていきます。できたものの動画がこちら




その他ハード設計が必要なところに回路のマウントがありますが、回路が
決定してから製作することにします。次回は回路とソフトを仮組して
動かしていきたいと思います。









三軸カメラユニットの製作(1) ハード設計

どうもcaketetuです。

前回、KONDOサーボとESP32マイコンを使用してスマホをそのまま搭載できる
ロボットを製作しました。今回はそれを応用してブログ投稿やYouTubeの投稿
で使えそうな三軸カメラユニットを作ってみたいと思います。



じゃん!サクッと設計しました。
サーボはオン飲みロボットと同じくKONDO KRS2572HVを使用します。
カメラはAMAZONで買ったUSBカメラを使用します。超小型カメラ

軸はパン、チルト、ロールの三自由度あります。これによりかなり自由度の高い
動画が取れるようになるはず。カメラの3Dデータは自分で作りましたが、
サーボはKONDO公式サイトからSTEPファイルをダウンロードできます。


正面からの図です。一見いびつな形に見えますが、カメラの軸とパン軸が
一直線上になるようにしました。


サーボのギアを固定するロック機構です。CAD図にはありませんが、横の穴から
ネジで締め付けることで固定します。ギアが金属で3DプリンタのPLA材のほうが
柔らかいので、内径をちょっと小さめに作って押し込むことでギアの跡がつき、
固定できると考えました。これがうまくいけばサーボホーンを自由自在に作ること
ができるので設計の幅が広がります。


CAD上で動かしている動画です。
いつも使っているCADはDesignSpark Mechanical4.0です。
直感的に使えて良いですが、機能が物足りないので乗り換えを検討している
ところです。






今回はここまでです。ハード的にはまだいくつかやることが残っていますが、
ここまでの設計でとりあえず動かせるところまで行けると思うので
3Dプリンタを動かしながら残りを設計していこうと思います。




2020年6月7日日曜日

スマホ搭載可ラジコンロボットを作る 回路・ソフト編

前回の記事の続きです。今回は回路・ソフト編です。

アクチュエータは駆動部にサーボ2個、スマホホルダ部にサーボ二個(同軸)
なのでそれらをPS3コントローラから操作できるようにします。
KONDOの同じサーボのみ使用しているのでかなり単純にできます。

・回路
KONDOのICS通信は一線式、マイコンはTxとRxの二線式なので
回路上で対応が必要です。今回はKONDO純正のICS変換基盤を使用
しました。純正なので簡単&安心ですが、値段がちょっと高いので
次回は自作したいところです。

回路も基盤の取説に乗っていたものをそのまま使います。
下記の通りに接続します。
ESP32              ICS変換基盤
Vin------------------------- Vout
3.3V------------------------IOREF   
GND------------------------GND
RX2(GPIO 16)--------------TX
TX2(GPIO 17)--------------RX
GPIO 2----------------------EN_IN

シリアルポート2を使用しましたが、たぶん他のポートでも大丈夫です。
一点、ICS変換基盤のピンヘッダは逆接続ができるようになっているのでサーボ
を接続するときは注意が必要です。電源側が信号線になります。




・ソフト
開発環境はArduinoIDEのESP32ライブラリを使用します。
追加が必要なライブラリはPs3ControllerとICS_Classの二つです。
Ps3Controllerはライブラリマネージャから、ICS_ClassはKONDOの
サイトからダウンロードできます。

ICSクラスは公式に詳しく説明があるのでそちらを参照のこと。
Ps3Controllerの使い方はExsampleを見れば大体わかりますが

Ps3.begin(PS3のMACアドレス);

をsetup関数で唱えてると接続待ち状態になります。

Ps3.isConnected()

で接続状態を監視し、接続されていたらPs3.dataクラスにデータが
入っていますので

int rx = Ps3.data.analog.stick.rx;

のようにしてボタンの状態を取得します。あとはボタン状態によって
処理を書くだけです。ESP32+PS3コントローラで簡単にラジコンロボット
を作れますね。

ちょっとつまずいたのは駆動の部分です。アナログスティックのx軸値、y軸値
から車輪二つの回転数に変換するのですが、より直感的に操作できるように
するにはどうするか悩みました。

最終的にtan^-1で極座標変換して角度を出し、角度によって
左右の回転数を変える処理にしました。これではその場で回転できま
せんのでL2とR2を超信知旋回に割り当てています。
私はこれが操作しやすいと思いますが、ボタンはたくさんありますので
自分に合わせた操作方法を作っていくのも楽しいと思います。
今回使用したプログラム



今回はスマホをそのまま搭載できるラジコンを作ったらいろいろ使えるんじゃないか?
というアイデアでサクサク製作しました。簡単ハードで特に目新しい部分は
なかったですが、ESP32+サーボ+PS3コントローラの組み合わせはボタン
の割り当てと制御部分の作り方次第で二足歩行ロボットやアームロボットにも
使えるのでかなり応用性が高いと思います。

動作の様子








スマホ搭載可ラジコンロボットを作る ハード編

お久しぶりです。
コロナショックで自宅作業(趣味)が非常に多いcaketetuです。
昨年は新しい環境になったこともありいろいろ忙しかったので
更新できませんでしたが、電子工作は細々してました。

今回は最近作ったスマホ搭載ラジコンの解説ハード編です。






 


解説と言っても特に目新しいところは無いです。
駆動部は差動二輪型、モータはKONDO KRS2572HVを回転モードで使用。
スマホホルダー部もモータは KRS2572HV×2をダブルサーボとして
使用しています。

ちなみに操作はPS3コントローラを使用。



横からの図。スマホホルダーはタイミングプーリを介してサーボに接続されて
おり、角度を変えることができます。正直ダイレクトドライブで良かった
ですが、タイミングプーリを使った機構を使いたかったのでこのように
しました。

↓頑張ったプーリー部です↓





3Dプリンタも工夫すれば精度のいいパーツも作れるんですね~。






上から。CPUはESP32モジュールを使用。BLEとWiFiを簡単に使用できるうえ
ライブラリも充実・IOもそこそこ多いということでかなり多用しております。
詳しくはソフト編で紹介しますが、シリアルサーボを使用しているので
回路もソフトも非常に簡単に済みます。(値段は高くなりますが)



このロボットの使い方としてはスマホのカメラをネットワークカメラにできる
ソフトがあるので、それをら使用して監視カメラやオンライン飲み会のおもちゃ
として活躍できるはず。私もオン飲みで使用しましたが自宅を探索させたりして
結構盛り上がりました。

動きはこんな感じ。




次回、回路&ソフト編です。





ブログ更新について

お久しぶりです。caketetuです。

去年は生活環境が変わったこともあり、あまり更新できませんでした。
Winning Post8もほとんど投げてます笑 一年過ごすのに3時間はかかるので
ちょっとしんどくなってしまいました。

さて本ブログですが本腰入れていこうということでテーマやタイトルを
変更することにしました。方針としては基本的に電子工作を中心にたまに
ゲームや他の趣味のネタを入れていこうと思います。Youtubeの動画が
主体となり本ブログではその補足を書いていこうと思います。

記録を残すことが苦手な私なのでいつまで続くか不明ですが、
参考として役立ててくれれば幸いです。