XIAO ESP32C3を使ってみる その3(OLEDディスプレイ、連続回転サーボ)
はじめに
今回はXIAO ESP32C3で、OLEDディスプレイと連続回転サーボを制御してみました。小型のマイコンには小型のディスプレイを一緒に使いたくなります。
OLEDディスプレイはI2C通信で信号線が2本、連続回転サーボは1本ということもあって、小型化に寄与できそうです。モータードライバーでDCモーターを制御すると、少なくとも2本は使いますし...
▼前回の記事はこちら
OLEDディスプレイ
▼販売ページはこちら
https://akizukidenshi.com/catalog/g/gP-12031/
今回はAdafruitのライブラリを使用します。あとでセンサーの値を表示させるのに使う予定で、サンプルプログラムだけ試してみました。
▼ライブラリはこちら
https://github.com/adafruit/Adafruit_SSD1306
▼AdafruitのOLEDの販売ページ。プログラムが実行されている様子を見ることができます。
LCDs & Displays, OLED Products Category on Adafruit Industries
サンプルプログラムを試してみる
I2C通信で使用するサンプルにはssd1306_128x32_i2cとssd1306_128x64_i2cがありました。しかし128x64の方は動作しなかったので、今回は128x32の方を使っています。
▼配線したときの様子はこちら。小型のブレッドボードを追加で購入しました。
▼ssd1306_128x32_i2cの場合の動作
▼ssd1306_128x32_i2cのSCREEN_HEIGHTを32から64に変更した場合
縮尺を間違えていると、うまく表示されていないのが分かりますね。128×32で4行、128×64で8行までなら、文字を表示しても読みやすそうです。
2行だけ表示されるLCDディスプレイも使ったことがあるのですが、I2C通信で使えるということもあって、こちらの方が使いやすいかもしれません。
連続回転サーボ
データシートを読む
前回の記事では指定した角度に回転するサーボモーターを制御したのですが、今回は連続で回転するサーボモーターです。DCモーターみたいに使えます。
事前にサーボモーターの動作を確認するための基板で試したのですが、Servo.hでも回っていました。制御方法は特に変わらないのだろうということで、データシートを確認してみました。
▼こちらで製作したXIAO nRF52840の基板でも使えました。
▼今回はSG90-HVとFS90Rを使いました。
360°連続回転サーボ(ローテーションサーボ) SG90-HV: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)
360°連続回転サーボ(ローテーションサーボ) FS90R: パーツ一般 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)
▼FS90Rに対応しているタイヤと一緒に使ってみました。
https://akizukidenshi.com/catalog/g/gP-13207/
▼車輪付きでAmazonで販売しているものもありました。
▼調べているときに、スイッチサイエンスのページでFeetechサーボの比較表を見つけました。
https://pages.switch-science.com/comparison/feetech-servos
FS90Rのデータシートには以下のように書かれています。
- CW(when 1500~700 µsec)
- CCW(when 1500~2300 µsec)
パルスの幅によって正転と逆転を制御できるようです。実際に動かしてみましょう。
プログラムを実行する
180度回転サーボのプログラムのうち、パルスの幅を変更しました。パルス幅が700~2300で増加して、その後減少するようにしています。
▼SG90-HVの動作
▼FS90Rの動作
どちらも同じように動作しました。パルス幅が1500付近で停止し、1500から離れるにつれて回転が速くなっています。
最後に
XIAO ESP32C3を使って電子部品の動作検証を行ってきましたが、そろそろ統合しようと思っています。小型の二輪ロボットは作ったので、また記事にまとめようと思っています。
後で知ったのですが、128×64のOLEDディスプレイは裏面にアドレスを変更するためのパターンが用意されていました。ディスプレイの使い分けができそうですね。
▼チップ抵抗なので難しいかも?