センサ・エンコーダ
今日は, 超音波センサの動作確認->OKジャイロの動作確認->調整必要
サーボ動作確認->ちょっとバタつく,どうする?
GPS読み込み->ソフト的な不具合見つかり修正途中(手間取りそう)
![DSC02575.JPG](https://cpu4edu.net/imageR/img724a93cazik1zj.jpeg)
ジャイロの動作について,ジャイロ取り込みの調整できた.要は,8ビットや16 ビット単位で丸めるのではなく,A/Dの誤差も含めて最大のビット長でとって積算 しながらデータを持っておき,必要な時だけ丸めて使うえばいいようだ.
サーボ動作について,ばたつく原因究明はあと回しにして,各サーボに個別に信号 を与えることができるテストプログラムを入れて稼動範囲とセンターの値を調べた.
GPS読み込みの不具合は,分かってしまえば単純なミス,
・タイマー割込み中で定義したローカル変数をカウンタに使っておかしくなってた
・LCD表示に適当に待ちを入れてやらないと表示が狂う
・文字列->数値化関数の処理に時間がかかってて,割込み中に入れると負荷が大 きすぎた
LCDのメニューがほぼ完成.
メニュー構造を単純化することでボタン2つでロボットの設定・動作が操作できた.
黄色:次へ, 青:実行
メインメニュー中で黄色ボタンでメインメニュー切り替え,
青ボタンで表示されたメインメニュー中のサブメニューへ.
サブメニュー中でも黄色ボタンで次のサブメニューへ.
青ボタンで表示されているサブメニューの処理.
学生さんに頼んでいたボディが完成.基板をのせて写真を撮ってみた↓
![DSC02577.JPG](https://cpu4edu.net/imageR/img01b1fda8zik5zj.jpeg)
1mmアルミ板でボディの加工,スペーサで基板をのせ,その前にGPSモジュール を両面テープで貼り付け(予定),先頭には超音波センサ,サーボで首振り可能.
GPSの左側の支柱部分に垂直にジャイロ(KRG-3)貼り付け.
あと,ロータリーエンコーダを作って前輪に仕込んだら想定しているハードウェア は完成.
![DSC02589.JPG](https://cpu4edu.net/imageR/img75b26b06zik8zj.jpeg)
今日は家にいないといけない用事があったので,自宅でプログラム作成.
IRQ割込みでエンコーダのソフトウェアカウントのプログラム作成.
といってもカウンタ本体は数行なのですぐできた.
前進/バックのフラグの値でアップ/ダウンカウントするだけ.
動作検証プログラムも作ってマイコンに送って動作確認.
ただし,エンコーダは正負の値を取っていいように書いてるので,貧弱な表示 ルーチンではエンコーダが負の値になったとき暴走する.でもメモリ足りないので 表示に凝る必要なし.
プログラム
こんな感じ↓//------------------------------------------------- // IRQ割り込み処理 (IRQ2:右前輪,IRQ3:左前輪) //------------------------------------------------- void int_irq2(void){ // 右前輪エンコーダ処理 DI; IRR1.BIT.IRRI2=0; IENR1.BIT.IEN2=0; // IRQ2割込み禁止 if (fFR==0) encR++; else encR--; // フラグでエンコーダカウントアップ/ダウン切り替え IENR1.BIT.IEN2=1; // IRQ2割込み許可 EI; } void int_irq3(void){ // 左前輪エンコーダ処理 DI; IRR1.BIT.IRRI3=0; IENR1.BIT.IEN3=0; // IRQ3割込み禁止 if (fFR==0) encL++; else encL--; // フラグでエンコーダカウントアップ/ダウン切り替え IENR1.BIT.IEN3=1; // IRQ3割込み許可 EI; } //----------------------------------------------- // エンコーダ動作チェック //----------------------------------------------- void check_encoder(void){ LCD_clear(); LCD_disp("CHECK ENCODER",1); LCD_disp(" L: R: ",2); while (SW_START==1 && SW_SET==1){ LCD_locate(2,0); if(DIP_SW==4 || DIP_SW==0) {fFR=0; LCD_msg("FWD");} else {fFR=1; LCD_msg("REV");} LCD_locate(2, 6); LCD_10(encL); LCD_locate(2,12); LCD_10(encR); pause(100); } } ※割込みの部分は,「ONOの電脳壁新聞」様の以下のURLを参考にしました. http://0n0.fc2web.com/h83664/irq/irq01.html
ロータリーエンコーダ製作中
黒はつや消しの黒,白はつるつるの白の素材を身近で探したら, 前にも使ったビデオカセットのケースがつや消し黒だったので,これを丸く切り出し.![DSC02607.JPG](https://cpu4edu.net/imageR/img34d6266dzik0zj.jpeg)
これを2枚,穴を開けて切込みを入れて・・・
![DSC02608.JPG](https://cpu4edu.net/imageR/img53917cedzikfzj.jpeg)
ホイールに装着!
![DSC02609.JPG](https://cpu4edu.net/imageR/img9e29a4dazik9zj.jpeg)
白のつるつる素材は,白いビニールテープにしてみました.
こんな感じで適当にカット.
![DSC02611.JPG](https://cpu4edu.net/imageR/imgc8474bb0zik4zj.jpeg)
綺麗なお花のできあがり! ・・・じゃなくて,
![DSC02613.JPG](https://cpu4edu.net/imageR/imge7ec9a05zikazj.jpeg)
エンコーダ板のできあがり!
![DSC02614.JPG](https://cpu4edu.net/imageR/img0ff30369zik5zj.jpeg)
ホイールに装着.
![DSC02617.JPG](https://cpu4edu.net/imageR/img514589b1zikfzj.jpeg)
こんな感じで完成. さて,上手くエンコードできるかな?
![DSC02619.JPG](https://cpu4edu.net/imageR/img557ab728zikbzj.jpeg)
次はエンコーダの回路製作中. こんな感じで2本↓
![DSC02621.JPG](https://cpu4edu.net/imageR/img4711bb7fzikczj.jpeg)
テープで巻けば立派な回路入りケーブル↓
![DSC02629.JPG](https://cpu4edu.net/imageR/img2b4847abzikczj.jpeg)
回路テスト中↓
(Lレベルが0Vでないのは,LEDとフォトTrをそのまま並べて見ているため です.ビニールテープを巻いて遮蔽したら改善されました)
![DSC02627.JPG](https://cpu4edu.net/imageR/img18349643zikfzj.jpeg)
![DSC02631.JPG](https://cpu4edu.net/imageR/img54be30b6zik9zj.jpeg)
自作ロータリーエンコーダの動画はこちら.
エンコーダのセンサをホットボンドで固定して動作確認.
うまく動きました.
![DSC02640.JPG](https://cpu4edu.net/imageR/img0518b34azik6zj.jpeg)
自作ロータリーエンコーダの動画
あと,サーボの動作確認をしているところも動画とりましたのでのせておきます.
GPSロボットカーのサーボ動作確認
全部組み上げたら残念ながらサーボとアンプの接続ケーブルの長さが足りなくて 走行を断念.
遅くない時間に帰れるときにケーブルを買いに行きます.
![](http://hbb.afl.rakuten.co.jp/hgb/?pc=http%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Ffirst23%2Fcabinet%2Fsugimoto-02%2F353-0040.jpg%3F_ex%3D128x128&m=http%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Ffirst23%2Fcabinet%2Fsugimoto-02%2F353-0040.jpg%3F_ex%3D64x64)
日本電産シンポ ロータリーエンコーダ RE1-60E
![]() ESP32 Wifi Bluetooth開発ボード |
![]() Arduino Nano Every |
![]() Raspberry Pi pico |
![]() FPGA XILINX Artix-7 |