ブログだいちゃん

ブログだいちゃん

趣味のブログ

ブログだいちゃん

エンコーダー仕様のDCモーターを使用し倒立ロボットの作成

以前MEGA2560を使用してこのタイプのロボットカーを作成しましたが、途中まで仕上げて放置したままになっていました。
ロボットカーのスマフォでのコントロールが上手く行かなかったためで、途中からステッパモーター仕様のロボットカー作成に移行してしまい、引き出しの奥に埋もれていました。

引き出しの肥やしでは申し訳ないので、日の目を見させようと引っ張り出しました、今回はArduino UNO に変更して作成したいと思います。


OSOYOO から発売されている倒立ロボットカーを参考に作成


OSOYOOから教育用に販売されている以下の製品を参考に作成します。


下のリンクにチュートリアルが書かれています、オープンソースとしてプログラムもアップされていますのでこれを使わせて頂きます。
製品版は12V仕様のモーターを使っていますが 6V仕様のモーターを使用します、このため電源関係やモーターがらみの変更があります。

OSOYOO Two Wheel Self Balancing Car Tutorial

上記リンクからスケッチ、ライブラリー、回路図、などがダウンロード出来ます。


回路図


回路図は OSOYOO のホームページからダウンロード出来ますがわかりにくいので Fritzing で作成しました、なお製品版のエンコーダーモーターと今回使用するエンコーダーモーターでは端子の配置が違いますので注意が必要です、また電圧が7.4Vなのでレギュレーターは使用しません。


回路図には入れてありませんが、自動点滅のLEDを電源インジケーターとして追加しました、ソナーは取付けておりません。


モーターシールドの作成及び組み立て


バニラシールドにレイアウトを考えパーツを配置し配線します、ジャイロ(MPU6050)の取付方向に注意が必要です。


フレームは以前作成した物を再利用し、パーツ取付け穴を開け直しました。


動作確認

ArduinoUNOにスケッチを書き込み動作試験をします、書込みの時はBluetoothモジュールを外して行わないと書き込めません、コントロールにはスマフォを使用します私の場合AndroidですのでGoogle Play から専用アプリ(Osoyoo Balance Arduino Robot Car)をインストールします、スマフォの設定などはチュートリアルからリンクがあります。


スマフォからも PID の設定が出来ますが、ディフォルトの設定では安定しませんでしたのでスケッチの中のPIDを変更しました。

まだ調整も不十分ですが動画をアップしました、ギヤの遊びが原因なのかカクカクします、やはりステッパーモーターの方が安定性が断然良いですね。



Create a self-balancing robot with a rotary encoder motor

ポータブル型 Bluetooth Speaker の作成

2インチのスピーカーが余っているのでブルートゥーススピーカーを作成してみます。
YouTubeなどで多くの方がこのタイプの動画をアップされていますが、ほとんど木材を使用し作成されていてそれなりの工具を使わないと上手く作成出来ないように思われます。
木工用工具を持っていない私には到底完成させるのは無理です、そこで手持ちの3Dプリンターで作成できる限界の大きさで作ることにしました。

使用パーツ類

2インチフルレンジスピーカー

パッシブラジエータ

ブルートゥースアンプ:3W×2DC-DC降圧モジュール:11.1V→5Vに降圧3Sリチウムイオンバッテリー(18650)充電モジュールリチウムイオンバッテリー(18650)マイクロUSBオス:アンプ電源供給用12V電源 :リチウムイオン電池充電用その他スイッチコネクタリード線類


ケースは3Dプリンターで作成

ケースの大きさは横×高さ×奥行:215×90×90 です、横幅は3Dプリンターのほぼ限界でした。
PLA樹脂を使用し厚さ5mm、充填率50%で印刷には23時間掛りました。
その他裏蓋、スピーカーグリルも印刷、CAD画像は色つきですが今回はホワイト1色で印刷しました。

f:id:blogdaichan:20190306142852j:plainf:id:blogdaichan:20190306142856j:plain

電池フォルダーはTPUフィラメントを使用し作成しました。

f:id:blogdaichan:20190306142900j:plain


スピーカーの取り付け

機密性を良くするためスポンジ 発泡ゴムをスピーカー取付け及び裏蓋取付けに使用しました。

パッシブラジエーターはゴムのりで貼り付けました。

f:id:blogdaichan:20190306142908j:plainf:id:blogdaichan:20190306142837j:plainf:id:blogdaichan:20190306142841j:plain


電池に充電モジュールを取付け

リチウムイオン電池を電池フォルダーに差し込み充電モジュールを両面テープで貼り付け配線し、ケースに粘着テープで貼り付けます。

f:id:blogdaichan:20190306142844j:plainf:id:blogdaichan:20190306142848j:plain


裏蓋にパーツを取付け配線

裏蓋に降圧レギュレーター・アンプ・充電用コネクター・電源スイッチなどを取付け配線します。
アンプにはペアリング、ボリュームアップ・ダウンの押しボタンスイッチがありますので、基板を裏返しに取付け外側からボタンを押せるようにしました、裏面の画像は電源を入れた状態でアンプの青いLEDの横に3個の操作ボタンがあります。
また、設計時に電源スイッチ用の穴を忘れたので、ドリルで開けています。(^_^;)

f:id:blogdaichan:20190307154220j:plainf:id:blogdaichan:20190307154232j:plain


音質は

スピーカーのエージングも終わっていないのでまだ荒い感じですが、パッシブラジエーターを取付けたので低音域は出ているように感じます、結構使えそうです。
デジカメでの録画では音質がいまいちで参考にならないので、動画アップはやめました。

スマフォに入れてあるMP3ファイルを再生していると、音が大きくなったり小さくなったりと聞きづらかったので原因を調べてみたら、スマフォにインストールしてある Power amp のイコライザーが有効になっていたためで Off にして解決しました。

以前作成したウエブラジオと大きさを比べてみました。
ウエブラジオは1.5インチのスピーカーでこれは2インチです、0.5インチの差ですが大きく見えます。

f:id:blogdaichan:20190307154224j:plain

ESP32 Web Radio のLCD表示に時々不具合が出る

ウエブラジオのLCDに表示される画像(放送局のロゴマーク)などが時々崩れる症状が出ていました。
原因を調べてみたところ、LCDが原因ではなく画像ファイルを格納してあるSDカードとESP32までの配線に問題があることが分かりました。

下の画像のようにLCDと本体基板との間を繋げているフラットケーブルの長さが原因で、この配線をなるべく短くすると良いようです。


対 策

しかし、配線を短くすると余裕がなくなり作業性が悪くなります、考えた結果本体基板とLCDを一体化することにしました。
今使用している基板は使えないので最初から作り直しです。

ユニバーサル基板は両面スルーホールの95×75mmを必要な長さにカットして使用します、MP3デコーダーはピンヘッダーの関係で後ろ向きに取付けました、基板の裏側にはLCD取付用のピンヘッダーメスを取付けます。


LCD基板に取付けるとこんな感じになります、配線のごちゃごちゃはスピーカーと電源周りです。

それでも表示に不具合が出る場合は
TFTライブラリーの tft.cpp 215行目あたりの
if(_id==0){_freq = 40000000; TP_vers=0;}
80000000 → 40000000 に変更してみる。

また、タッチスクリーンのボタンを押しても反応しない場合は MiniWebRadio.ino の671行目あたりにある
tft.setRotation(1); // Use landscape format
LCD画面を上下反転してみる 3→1 に変える(ILI9341の場合)

結 果

時々画像が崩れて表示されていた起動画面、またタッチスクリーンのボタン、ロゴ画像も正常に表示されました。

雷サージにより速度が極端に落ちたNASを取替えることに

大分前になりますが、使っていたIOデータのNASランディスク)が、近所に落ちた雷のサージにより、損傷を受けたようで、テレビなどは問題なかったですが、モデムは使えなくなり交換し、ランディスクは速度が11MB/S程しか出なくなりました、幸い中のデーターは無事でしたので最悪は免れましたが。

使っていたNASはIOデータのHDL-GT(LAN Disk)1TB HDDを4基積んでRAID5で使用していました、もう生産終了ですがこんな物でした、もう10年以上も使用しています。

f:id:blogdaichan:20190211161650j:plain

なにせ転送速度が出ないのと、そろそろHDDも寿命を迎える頃なので取替えることにしました。
購入した物は人気の、Synology DiskStation DS218j

最近値が下がってきたので先日購入したのですが、購入してから1週間くらいで 1K 程下がっています、まだまだ下がりそうですのでちょっと買い急いだかもしれませんね。

HDDも古い物は使いたくないので、3TB WD Red NAS用 WD30EFRX 5400rpm も1台 購入しました、2台が理想ですが取敢えず手持ちの外付けUSB_HDDでバックアップすることにします。

このNASはパッケージも数多くありいろいろ出来そうですが、ファイルのバックアップが主な目的ですので必要最小限のインストールにとどめました。
使用するパッケージは
GoogleDriveなどに保管している重要ファイルとリアルタイムに同期をとるため Cloud Station Serverr
それに
外付けUSB_HDDにNASのバックアップを取るため Hiper Backup をインストールしました。

さて、転送速度ですがNASは家の2階に設置し1階にあるPCとはカテゴリー4のLANケーブルで繋がっています。
以前のNASでは11MB/S程度でしたが、CrystalDiskMark 6 で測定してみました。

f:id:blogdaichan:20190212072124j:plain

Read はほぼ満足ですが Write は約半分の速度しか出ていません、それでも前のよりは6倍くらい速くなっていますが。
書込み速度が遅い原因は何でしょうか???・・・

時間をおいて再度測定した結果です、読み込み書込みとも同程度の速度が出ました、バックグラウンドで何か動いていたのでしょうね、一安心です。

f:id:blogdaichan:20190212191616j:plain

ESP32にAlexa をインストールしてみる

1年くらい前にRaspberry Pi3 と Google AIY VoiceKit を使い Amazon Alexa を入れてみました、下がその時の記事です 。

ESP32に興味を持っていて、ネットでおもしろそうな記事を探していたところESP32にAlexaを入れた記事がありました。

手持ちのパーツもそこそこ揃っているので作成してみました、相当ハマったので備忘録として記事にしておきます。

 

使用パーツ

ESP32 DEV KitC:秋月電子

SPH0645LM4H搭載 I2S MEMSマイクモジュール:スイッチサイエンス

MAX98357A搭載 I2S 3W D級アンプボード:スイッチサイエンス

スピーカー

ブレッドボード、配線用ワイヤー

ESP-IDF環境の構築

ソフトウエアは Git Hub にあります、しかし中を見てみるといつもと違うファイル形式です、ESP32への書込みは Arduino IDE を使用していましたが、ESP-IDF なるものを使うみたいです、こんなの使ったことありません。

ネットで調べてみると使い方を説明しているサイトがありました、ありがたいです参考にさせていただきました。

インストールの仕方は上記記事を見て頂くとして、簡単に説明します。 

まず、ここからTool_chain(msys2) をダウンロードします、ダウンロード出来たら解凍して出来たフォルダー(msys32)をCドライブなどの直下に置きます、私の場合はDドライブの直下に置きましたのでDドライブでの説明です。

次に、msys32フォルダ内の「mingw32.exe」をダブルクリックして起動します、するとコマンドプロンプト画面みたいなウインドウが開きます、以後は殆どこの画面で設定を進めます。

いったんこの画面を閉じて、msys32 → home → 「ユーザー名」フォルダーに移動し、「esp」フォルダを作成します。

「mingw32.exe」を起動し

cd /d/msys32/home/user-Name/esp

でespフォルダーに移動し

git clone --recursive https://github.com/espressif/esp-idf.git

でESP-IDFをクローンします。

次に以下のようにしてESP-IDFにパスを通します。

export IDF_PATH="D:/msys32/home/User-Name/esp/esp-idf"

そして

export PATH="$PATH:/d/msys32/usr/bin:/d/msys32/mingw32/bin:/d/msys32/opt/xtensa-esp32-elf/bin"

一端画面を閉じて再度起動してパスが通っているか確認するため以下のコマンド実行。

printenv IDF_PATH
printenv PATH

パスが間違いなかったら Alexa のインストールに進めます。

GitHubからAlexaをクローンする

「mingw32.exe」を起動し D:/msys32/home/User-Name に移動し下記のコマンドを実行しAlexaをクローンする。

git clone https://github.com/MrBuddyCasino/ESP32_Alexa.git

クローン出来たら ESP32_Alexa フォルダに移動し下記のコマンド実行しアップデートする。

git submodule init && git submodule update

Alexaの設定をし保存する

まず、下記を参考にESP32 DEV-KitC のMACアドレスを取得します。

取得できたら、GitHubに書かれているように「https://alexa.boeckling.net/」にアクセスしMACアドレスを入力して認証トークンを作成しコピーする。

次に、d:/msys32/home/user-name/ESP32_Alexa/main/Kconfig.projbuild をテキストエディタで開き以下を設定しUTF8で保存する。

 

下記の赤字箇所を変更する

default "myssid" → 自宅の無線ルーターSSID

default "myssid" → 自宅無線ルーターのpassword

string "Authentication Token" → 取得したトーク

 

赤字箇所を追加する

choice
prompt "API Endpoint"
default US
help
Select API endpoint URL.

config ALEXA_ENDPOINT_EU
bool "EU"
config ALEXA_ENDPOINT_US
bool "US"
config ALEXA_ENDPOINT_FE
bool "JA"
endchoice

config ALEXA_ENDPOINT
string
default "https://avs-alexa-na.amazon.com" if ALEXA_ENDPOINT_US
default "https://avs-alexa-eu.amazon.com" if ALEXA_ENDPOINT_EU
default "https://avs-alexa-fe.amazon.com" if ALEXA_ENDPOINT_FE

choice
prompt "Language"
default ALEXA_LOCALE_EN_US
help
Select locale.

config ALEXA_LOCALE_EN_US
bool "en-US"

config ALEXA_LOCALE_JA_JP
bool "ja-JP"

endchoice

config ALEXA_LOCALE
string
default "en-US" if ALEXA_LOCALE_EN_US
default "en-GB" if ALEXA_LOCALE_EN_GB
default "ja-JP" if ALEXA_LOCALE_JA_JP

 ここまで出来たら「mingw32.exe」を立ち上げ、ESP32_Alexa フォルダに移動し下記コマンドを実行します、

make menuconfig

しばらくすると設定画面が立ち上がります。

f:id:blogdaichan:20190124144522j:plain

まず、Serial flasher config 項目を開きESP32のシリアルポート設定、また Flash size を4MBに設定します。

f:id:blogdaichan:20190124144559j:plain

 次に、Alexa config に入り、日本語(JA、ja-JP) に設定、 認証トークンなど確認します。

f:id:blogdaichan:20190124144639j:plain

以上が終わったら <seve> して終了します。

ESP32にAlexaを書き込む

ESP32をUSBでPCに接続し「mingw32.exe」を立ち上げ、ESP32_Alexa フォルダに移動し下記コマンドを実行します。

make flash

Arduino IDE に比べ相当時間が掛りますので待ちます。

ESP32の配線

書込みが終了したらESP32をブレッドボードに装着し配線をします、GitHubに配線について書かれています。

アンプの配線

ESP pin - I2S signal
----------------------
GPIO25/DAC1    - LRCK
GPIO26/DAC2    - BCLK
GPIO22       - DATA
5V          - Vcc
GND         - GND

マイクモジュールの配線

ESP pin - I2S signal
----------------------
GPIO18    - LRCK
GPIO17    - BCLK
GPIO05    - DATA
3.3V          - Vcc
GND         - GND

配線チェックが終わったらUSBに接続します、しばらくしてスピーカーから笑い声が聞こえたらひとまず成功です。

f:id:blogdaichan:20190124153234j:plain

Alexaの詳細設定はスマフォアプリで

スマフォにAlexaアプリをダウンロードし開くと、ディバイスの中にESP32_Alexaのディバイスが表示されていますので選択して住所など細かい設定を行います。

ESP32のBOOTボタンを押して「アレクサ、今日の天気を教えて」などと言えばスマフォで設定した住所の天気を教えてくれます。

電動精密ドライバー

充電式の小型電動ドライバーも持っていますが、趣味のラジコンや電子工作などで使用するにはトルクがありすぎて使えません主に木工用に使っています。 

 

 

小さなネジ止めには精密ドライバーセットを使用しています。

 f:id:blogdaichan:20190115182338j:plain

 

 

しかし、ノートパソコンの裏蓋を開けるときなどネジが多すぎて手が疲れますね。

小型でトルクの調整が出来る電動精密ドライバーがないか探していたところこんなのがありました、12種類のビットが付属しています。

f:id:blogdaichan:20190115182838j:plain
f:id:blogdaichan:20190115183309j:plain


850mAのリチウムイオン電池内蔵でUSBから充電します、1回の充電で300本くらいネジ締めが出来るようなことが書いてありますが本当でしょうか。

英語表記の説明書の一部です。

f:id:blogdaichan:20190115183929j:plain

 

トルク調整は1~5までの5段階とカスタマイズできるAポジションがあります、トルクは1の1kgf/cm~5の6.5kgf/cmまで調整でき、このクラスでは最大トルクが大きいですね。

当然手締めも出来て、40kgf/cmのトルクまでOKだそうです。

Aポジションではトルクと回転数を調整でき自分好みに設定できます。

私は海外から買いましたがアマゾンにもありました。 

ESP32 WebRadio ケース作成

当初ノートPC用のアンプ付外部スピーカーにして本体だけケースにしようと思いましたが移動が面倒だし、1.5インチの小さなスピーカーがありますので一体型のケースにしコンパクトに仕上げます。

有り合せのパーツで

追加のパーツは有り合せのものを使用しました。

アンプ:PAM8403 3Wステレオアンプ、スイッチ付のアンプでラジオの電源スイッチとしても使います。

f:id:blogdaichan:20190103101336j:plainf:id:blogdaichan:20190103101333j:plain
3Wステレオアンプ

スピーカー:1.5インチ(38mm)防磁タイプ、小型化するために使用しましたが50mm程度が良かったかも。

f:id:blogdaichan:20190103101346j:plain
1.5インチスピーカー

ケースはいつもの2色

ケースの大きさは幅200mm×高さ90mm×奥行き60mmで充填率50%で印刷、ケースの厚さ5mmで各スピーカーは仕切りましたのでこの大きさが限度でした、フロントパネル4時間、ケース17時間程掛かりました。

エンクロージャーには吸音材を入れ密閉性を良くするためネジを多めに、小さいスピーカーなので低音域はいまいちですがこんなもんでしょう。

f:id:blogdaichan:20190103101343j:plainf:id:blogdaichan:20190103101339j:plain
WebRadio

出来上がってから気が付きましたが、ケースを少し上向きになるよう作成すれば良かったなと、再度印刷するとまた17時間(^_^;)諦めます。

それと、スピーカーにカバーを付けないと傷つけそうで怖いですね。

スピーカーグリル

スピーガーがむき出しでみすぼらしいので、3Dプリンターでスピーカーグリルを作ってみました、単純な形状ですが。

f:id:blogdaichan:20190103101108j:plain
WebRadio

関連記事

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com