「Adafruit」タグアーカイブ

姿勢制御装置とバーサライタの融合2 ーリアクションホイールへの道51ー

前回は 1軸 姿勢制御モジュール SHISEIGYO-1のホイールにLEDをつけてバーサライタ動作させてみました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

 

姿勢制御モジュールのホイールはバランス状況によって正転・逆転及び回転スピードが変わるので、安定した画の表示は出来ませんでした。

 

 

スリップリング

前回はホイールにLEDと制御用のマイコン(Adafruit Trinket M0)と回転検出用フォトリフレクタを載せてワイヤレスチャージモジュールで無線電源給電しました。

ここでは画の表示にホイールを駆動するブラシレスモータのエンコーダ出力を使用したいと考えました。
エンコーダによる回転検出値でLEDの点灯パターンを制御すればホイールの正転・逆転及び回転スピードが変わっても表示する画に影響はありません。
しかし問題はどのようにエンコーダ出力値をLED制御に反映させるかです。

そこで遂にスリップリングに手を出してしまいました。

 

スリップリングは回転部に電源線や信号線を接続できるコネクタです。

 

ここでは4線のスリップリングを用いて回転部のSPI入力LEDと接続します。

 

SHISEIGYO-1 POV 構築

購入したスリップリングをSHISEIGYO-1のモータに通したかったのですが、シャフトが短く埋もれてしまいました。。

 

マウントハブと平行ピンでシャフトを延長してスリップリングとフライホイールを固定しました。

 

凄く仰々しくなってしまいました。。

完成

スリップリングの回転部用の配線に11セルのLEDを接続し、他方の配線をSHISEIGYO-1のコントローラであるATOM Matrixに接続します。

 

ATOM Matrix (デュアルコア) で姿勢制御しつつモータエンコーダ出力(1周100分解能)に基づいてSPI LEDを制御します。

 

動作

まずはホイール1周を4分割して4色で発光
エンコーダで回転位置を検出してホイール速度や正転・逆転に依存しない表示を確認。

倒立動作も問題なく出来ています。

 

アニメーション表示

LEDのセル数が少なく回転速度も一定ではなくそれほど早くないので、きれいな表示は出来ていませんがスリップリングの使用によってかつてない表現が実現できました。

 

おわりに

ここでは初めてのスリップリング体験を堪能し、姿勢制御モジュールとPOVの融合による新たな表現を検証いたしました。

今後はスリップリングを用いたガチPOVの製作も検討したいなと考えております。

それではまた。

ロボット犬『Mini Pupperミニぷぱ』で 書道

これまでミニぷパに色々な動作や機能を実装し楽しんでまいりましたが、
ついに字を書けるようになりました!

 

 

動作

早速 凛々しい書道スタイルをご覧ください。

 

足に筆ペンを固定していますw

 

機構

基本的には以前ロボットアームで実施した機構と同じです。

Processing で制御 ーロボットアーム自作への道3ー

 

Processingのウィンドウ上の座標をミニぷパに送信して足の平面座標(x, y)として制御します。

マウスをクリックすると足の高さを下げて筆ペンを地面に接地します。
ドラッグで線や絵を描けます。マウスがクリックされていない時は足を20mm上げてペン先を浮かせています。

 

ProcessingからのUSBシリアルはATOM Liteで直接うまく受信できなかったので
前回のAIカメラ HuskyLensの時と同様に一旦Seeeduino XIAOで受信してATOMに座標情報を送りました。

姿勢制御装置とバーサライタの融合 ーリアクションホイールへの道50ー

姿勢制御モジュールのホイールにLEDを付けてバーサライタにしてみてはどうだろう。

思いついてしまったので どうなるかは考えずに作り上げることだけを考えて手を動かした。
ちょうど祝日 天皇誕生日。俺なりの祝いの儀式だ。

 

 

とにかく作る

1軸 姿勢制御モジュール SHISEIGYO-1のホイールにLEDをつけてバーサライタ動作させます。

回転部への給電はハンディバーサライタ PovRanianの機構をそのまま利用してワイヤレスチャージモジュールを使用します。

 

ワイヤレスチャージモジュール送信側をSHISEIGYO-1の筐体に固定。
電源は5V DCDC出力に接続しました。

 

ホイールにLEDやワイヤレスチャージモジュールの受信部を固定する治具を3Dプリントいたしました。

マイコンはAdafruit Trinket M0 を使用しました。

 

SPI入力のLEDを11セル前面に固定。
更にホイールに固定後に回転を検出するフォトリフレクタセンサも固定します。

 

ホイールを固定して完成!

筐体に貼ったマスキングテープの白マーカをフォトリフレクタで検出します。

 

動作

 

プログラム的にはフォトリフレクタセンサで回転時間を検出して、1周の時間を4分割してLEDを赤、緑、青、黄で光らせます。

姿勢制御モジュールの場合は回転速度常時変化するのでマーカ1個で回転検出するPovRanian形式だときれいな絵を出すのが難しいです。

ブラシレスモータのエンコーダ出力を利用できれば回転速度や正転・逆転に関係なく絵が出せそうですが無線では厳しいと思います。

いつかスリップリングを使用した有線でのバーサライタ動作も試してみたいです。

ロボット犬『Mini Pupperミニぷぱ』を AIカメラ HuskyLens で堪能

前回は9軸 IMUセンサ BNO055を用いてミニぷぱ制御を楽しみました。

ダイソー版 プラレール を改造したよ♪

 

ここでは更に AIカメラ HuskyLensを追加して ミニぷぱを賢くしちゃいます。

 

 

AIカメラ HuskyLens

HuskyLensは顔認識、物体追跡、物体認識、ライン追跡、色認識、タグ認識などの機能を有するAIカメラです。

 

 

ここではHuskyLensの設定で色認識データをI2C出力にして使用しました。

 

認識した色の座標位置でミニぷぱを制御します。

 

 

HuskyLensをミニぷぱに接続

前回製作したATOM Liteをコントローラに採用したミニぷぱにHuskyLensを接続します。

注意点

HuskyLensのI2C出力をATOM Liteに接続して素直に行きたかったのですが。。
毎度恒例の問題発生。

以下のHuskyLens Arduinoライブラリを使用してI2C通信したいのですが、ESP32には使用できませんでした。
 https://github.com/HuskyLens/HUSKYLENSArduino/tree/master/HUSKYLENS/examples/HUSKYLENS_I2C

かなりライブラリを修正しないといけない感じだったので直結は潔くあきらめて、Seeeduino XIAOで中継することにいたしました。

 

構成

 

HuskyLensとATOM Lite間にSeeeduino XIAOを挿入してI2C-Uart変換を実施しています。

 

 

部品

 

動作

赤色の横方向座標で旋回移動させてみました。

XIAOからのHuskyLensデータをATOM Liteを2コアにしてCore0で常時シリアル受信するようにして、サーボ制御との並行動作を実現しています。

 

これまで仕込んだ歩行動作なども問題なく実行できます。

 

おわりに

AIカメラ HuskyLensの追加によって ミニぷぱ がとても賢くなりました!

今回は色認識で制御していますが顔認識やライントレースなどもできそうです。

どんどん賢く 高機能になる 我が家のミニぷぱ

 

そのうちしゃべりだして立ち上がって二足歩行するかもしれませんね。

ロボット犬『Mini Pupperミニぷぱ』を BNO055で姿勢制御

前回まではラズパイ4でミニぷぱを楽しみました。

ロボット犬『Mini Pupperミニぷぱ』がやってきた

ここではまたマイコンによる制御に立ち戻って新たなIMUセンサを楽しみます。

 

 

BNO055

以前はコントロールにATOM Matrixを用いて、内蔵のIMUセンサ MPU6886を用いて姿勢制御も楽しみました。

重力方向軸の回転角度 Yaw角を検出して床を回転させても常に同じ方向に旋回する制御も実施したかったのですが、MPU6886ではYaw角のドリフトがかなり大きく断念しました。

ここでは違うIMUセンサを採用してYaw角旋回制御を目指します。

6軸IMUのMPU6886がYaw角がとれないことはしょうがないのですが、同じ6軸でもMPU6050ではオフセット校正を施すと割とドリフトの小さいYaw角を得ることができます。

MPU6050を使用しても良かったのですがここでは9軸IMUセンサ BNO055を使ってみようと思います。

BNO055は正直内部でどういった処理をしているのか不明なのですが、正確な姿勢角を得ることができます。

以下のサンプルコードで校正や補正なしですぐに姿勢角を得ることができます。
 https://github.com/adafruit/Adafruit_BNO055/blob/master/examples/rawdata/rawdata.ino

 

 

以下でIMUセンサを各種比較してますのでよろしければどうぞ

スマート靴占い 『 IしたoTんきになぁ〜れ 』

 

BNO055をミニぷぱに導入

以前のATOM Matrixの機構にBNO055を追加しても良かったのですが、MPU6886を搭載したATOM Matrixに更にIMUを追加するのが冗長でどうしても許せなかったのでコントローラにはATOM Liteを採用しました。

 

注意点

BNO055とはI2Cで通信するのですが、M5Stack ArduinoのM5Atom.hではI2Cピンを指定してAdafruit_BNO055ライブラリでのBNO055との通信ができませんでした。

 

そこでここではM5Stack Arduinoライブラリは使用せずESP32 ArduinoライブラリでATOM Liteを使用することにしました。ESP32 ArduinoライブラリではI2Cピンを自由に指定してもBNO055と通信が問題なくできました。

ここではBNO055との通信はWire.begin(25, 21)で実施し、
サーボドライバ PCA9685とはWire1 .begin(22, 19)で実施しました。
これで問題なく動作を確認できました。

 

宴会芸

BNO055導入によって、正確な姿勢角を得ることが可能となりました。

ここではカルマンフィルタなど使用せず姿勢角の生データをそのまま使用しました。
BNO055が優秀で非常に楽です。

 

Yaw角を検出して旋回動作させて一方方向を保持する動作をさせてみました。

いい感じ!!

 

以前仕込んだ動作も問題なくできています。

床を傾けた時の足の高さでの平行制御もBNO055の姿勢角のみのP制御ですがスムーズに実現できています。

 

おわりに

ここでは9軸 IMUセンサ BNO055を用いてミニぷぱ制御を楽しみました。

BNO055が有能すぎて夢だったミニぷぱ宴会芸も実現できました!!

ミニぷぱがドンドン賢くなってくので大変嬉しいです!
引き続き勉強進めます!

立体 バーサライタ – 3D POV Display –

これまで私は様々なバーサライタ(POV ディスプレイ)を製作してきました。

そうした中で何となく平面のバーサライタを立体的に積み上げて立体表示できるのではと考えておりました。
なんかめんどくさそうだし、費用もかかるだろうと思考実験の枠組みから出ないまま時は過ぎたのですが
この度良い機会に恵まれました。

M5Stack社のクリスマスにちなんだ電子工作コンテストが開催されたのです。

これは思考実験から飛び出す絶好のチャンスと考え製作しコンテストに参加させていただきました。

ここでは改めて母国語で報告させていただきます。

 

立体 バーサライタの構成

バーサライタの構成はこれまで製作してきたバーサライタと同じ構成です。
回転部に制御マイコン ATOM Liteを搭載し回転検出用のフォトリフレクタ QTR-1AとSPI入力LEDテープを接続しています。

LEDテープは5列を10段の計50セル接続しています。回転部への給電にはワイヤレスチャージモジュールを用いて無線で実施します。

部品

  • マイコン ATOM Lite

     
  • フォトリフレクタ QTR-1A

      
  • SPI入力 LEDテープ APA102   ピッチ:144セル/1m

     
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH

 

筐体

筐体は3Dプリンタで作製いたしました。
回転部は土台とLED搭載部の2パーツで構成されます。

 

回転部の土台にATOM Liteとフォトリフレクタ、ワイヤレスチャージモジュールの受信側を搭載し、
マブチモーター RS-540SHに差し込みます。

 

LEDは5列、10段をらせん状に配置して視野角の低減を図っています。

 

動作

丸が上下する簡単な動作で試しました。

 

Arduinoコード

SPI入力LEDのライブラリとして以下を使用しました。
 https://github.com/adafruit/Adafruit_DotStar

格段の1周の分解能は20としました。

 

表示例

クリスマスツリー

キューブ

時計

鏡餅

 

おわりに

製作にとりかかるまでは実現は難しいと想像していましたが、比較的簡単にできてしまいました。
筐体を3Dプリンタで自由自在に作れるようになったことが大きいです。

もっとLEDを増やせばリアルな映像も空中に表示可能だと思います。

コンテストではグランプリを受賞することはかないませんでしたが、参加賞をいただきました。

3つの製品から選択できましたので、私は M5Stack用カード型キーボードユニット 
をいただきました。

沢山のスイッチが配置されているので今後有効活用できそうです♪

2軸 姿勢制御モジュール SHISEIGYO-2 爆誕 ーリアクションホイールへの道27ー

前回はAdafruit CLUE を用いて1軸 姿勢制御モジュール SHISEIGYO-1 を製作しました。

はじめてのレザークラフト – キーケース製作 –

ここでは2軸 姿勢制御モジュール SHISEIGYO-2 を製作しましたので報告いたします。

 

 

2軸 姿勢制御モジュール

2軸の姿勢制御モジュールは以下の動画をみて製作してみたいと強く思いました。

 

筐体製作

フライホイールを2個固定する筐体を製作しました。

 

Adafruit CLUEを載せて、底面には先が球の円筒を固定しました。

 

倒立調整

Adafruit CLUE搭載の6軸慣性センサ LSM6DS33  でX軸とY軸の姿勢角と角速度を算出しフィードバックかけて安定倒立を目指します。

まずは底面に三角柱を貼り付けて1軸ずつ安定倒立動作を確認いたしました。

Y軸

X軸

 

SHISEIGYO-2 動作

各軸の調整が確認できましたので2軸での倒立を実施します。

 

 

おわりに

ここではフライホイール2個による姿勢制御モジュール SHISEIGYO-2の製作を実施しました。

筐体のアンバランス性やAdafruit CLUEのディスプレイ表示による遅延で完ぺきな安定は得られていませんがほぼほぼ完成できたのではないでしょうか。

別のマイコンでもSHISEIGYO-2を試してみたいと考えております。

それでは次の道でお会いしましょう!

 

Adafruit CLUE で SHISEIGYO-1 やってみた ーリアクションホイールへの道26ー

これまでは3軸 姿勢制御モジュール SHISEIGYO-3の製作に勤しんでおりましたが、注文中のモータが到着するまで一旦お休みとします。

はじめてのレザークラフト – キーケース製作 –

ここでは Adafruit CLUE で1軸 姿勢制御モジュール SHISEIGYO-1を作ってみたので報告させていただきます。

 

 

Adafruit CLUE

Adafruit CLUEはmicro:bit互換のボードにBLEマイコンnRF52840とIPSディスプレイと各種センサが載った製品です。

STEAM Tokyo ストアで購入しました。
Adafruit製の製品が国内で手軽に購入できるショップです。

Adafruit CLUE

 
Adafruit CLUEの構成は以下の通りです。

・240*240 IPSディスプレイ ST7789
・6軸慣性センサ LSM6DS33
・3軸磁気センサ LIS3MDL
・ジェスチャーセンサ APDS9960
・マイク MP34DT01-M
・温湿度センサ SHT3x-DIS
・気圧センサ BMP280

めちゃめちゃセンサ載ってます!

Arduino IDEセットアップ

Adafruit CLUEはCircuitPythonとArduinoに対応していますが、ここではArduino IDEでプログラミングしました。

セットアップ方法は以下の通りです。
 https://learn.adafruit.com/adafruit-clue/arduino-support-setup

IMUセンサ

Adafruit CLUEは6軸慣性センサ LSM6DS33 と3軸磁気センサ LIS3MDLで9軸のモーションセンシングを実現できます。

SHISEIGYO-1では加速度センサから導出したモジュールの姿勢角とジャイロセンサの角速度をカルマン・フィルタを通して使用していますので
6軸慣性センサ LSM6DS33のみの値を使用しました。

LSM6DS33のライブラリとして以下を使用しました。
 https://github.com/adafruit/Adafruit_LSM6DS

コードは以下を参考にしました。
 adafruit_lsm6ds33_test.ino

ディスプレイ

Adafruit CLUEには240*240 IPSディスプレイ ST7789が載っています。
視野角が広く表示も非常にキレイです。

接続は以下の通りです。

TFT SCK:D29
TFT MOSI:D30
TFT CS:D31
TFT DC:D32
TFT RESET:D33
TFT LITE:D34

ST7789のライブラリとして以下を使用しました。
 https://github.com/adafruit/Adafruit-ST7735-Library

コードは以下を参考にしました。
 graphicstest_tft_gizmo.ino

 

ディスプレイ動作

6軸慣性センサ LSM6DS33のX軸とY軸の角度とインジケータを表示してみました。

 

SHISEIGYO-1構築

Adafruit CLUEはmicro:bit互換ですのでピッチ変換基板を用いて電源やモータ接続用コネクタを実装しました。

 

モータ用の電源24VからAdafruit CLUE用電源5vをDCDC電源で生成しています。

 

 

SHISEIGYO-1動作

 
モータ制御とディスプレイ表示を同時にするために以下のサンプルコードを参考にマルチタスク処理を実施しています。
 rtos_scheduler.ino

しかしディスプレイ表示処理時には60msecほど遅延がおこるので5fps以上にすると倒立が保てません。
ディスプレイ表示しなければ当然倒立は安定します。

 

おわりに

今回は初めてESP32以外のマイコンでSHISEIGYOを製作してみました。

最近はディスプレイとIMUが搭載されたマイコン製品がたくさんでていますので
いろんなSHISEIGYOや倒立振子などが必要最小限の配線でできそうですね。

しかし各種センサやディスタンス、モータの制御を同時に実施するにはマルチコアのESP32搭載の製品に優位性がありそうです。

ダンボール キングギドラ コスプレ衣装の製作

去年はゴジラのコスプレでハロウィンパレードに参加して楽しんだ長男くん

ダンボール ゴジラ コスプレ衣装の製作

今年も半年以上前からハロウィンに どんな格好するかをいつも考えていたのですが。。。
残念ながら今年はハロウィンイベントが中止。。。

それでもずーっと楽しみにしていたのでコスプレ衣装の製作は実施いたしました。

 

 

製作準備

設計図。
今年はキングギドラになりたいとのことで夏ぐらいから計画していました。

部材購入

セリアでアルミロールシートとスティック状のプール浮き輪、PPシートを購入しました。

 

全身タイツ。大変似合っている。

 

製作

各パーツの製作過程を報告いたします。

ボディ

ダンボールにアルミロールシートを貼り付け、クリアイエロースプレーを塗って
ギドラの金色を表現しました。

 

PPシートを切って、ダイソーの金色ラッカースプレーで塗装しました。
なかなかきれいなゴールドを表現できました。

しっぽ

スティック状のプール浮き輪を切断し、アルミロールシートを巻き付け
クリアイエロースプレーで塗装し、ひもを通してしっぽを構成しました。

しっぽ先端にはダイソーで買った金色のハロウィンの装飾を付けました。

頭 両サイド

ギドラの両サイドの頭は手にはめます。

ダンボールで制作し、口はマグネットボタンで可動するようにしました。

 

頭には電飾を内蔵します。

 
目は赤LEDで光らせ、口の中にはフルカラーLEDテープを仕込みます。
CdSセルで周囲の輝度から口の開閉を検知してLEDテープをON/OFFさせます。
制御にはAdafruit Trinket M0を採用しました。

下あご内部はLED光が反射するようにミラーフィルムを貼っています。

 


 

頭 真ん中

センターはあたまにかぶります。

 
両サイドの頭同様に電飾を施します。
マイコンにはESP32を採用しBLEを介してスマホで口の開閉、LEDの色を制御できるようにしました。

 

 

完成

完成して装着して気づいた。。

これどうやっておかし受け取るの。。。?

でもまぁハロウィンイベントないし今年はトリートなしで残念でした 🙁 。

来年リベンジだ!!

CircuitPython PewPew M4 を使ってみた

Makerfabs 様よりCircuitPython PewPew M4 をいただきましたので使用してみました。

 

 

PewPew M4

PewPew M4はマイコンATSAMD51にディスプレイST7735R、ボタン、ブザーなどが搭載されたミニゲーム機です。

アクリルカバーやボタンなど組立てが必要です。

単4電池2本を入れて電源スイッチを入れると起動します。
4種のゲームが最初から入っておりメニューから選んで遊ぶことができます。

参考

 

CircuitPython

PewPew M4はCircuitPython環境でコーディングすることが可能です。
マイコン向けのPython環境であるMicroPythonをAdafruit社のマイコン用に派生させたのがCircuitPythonです。

PewPew M4のマイクロUSB端子からPCに接続すると”CIRCUITPY”フォルダが現れます。
ゲーム選択メニュー用コード(main.py)や各種ゲームのpythonコードが入っています。

CircuitPythonバージョンアップ

デフォルトではAdafruit CircuitPython 5.0.0がインストールされていましたので
2020年7月時点で最新のver. 5.3.1にバージョンアップしてみます。
以下でCircuitPythonのインストーラUF2ファイルをダウンロードします。
 https://circuitpython.org/board/pewpew_m4/

 

PewPew M4裏面のR(リセット)端子をGNDにチョンチョンと2回ショートするとUF2ファイルインストールモードになり”pewboot”フォルダが開きます。

“pewboot”フォルダにUF2ファイルをドラッグしてインストールします。
インストールが終わると”CIRCUITPY”フォルダが開きバージョンアップ終了です。

バージョンはフォルダ内のboot_out.txtで確認できます。

ゲーム追加

以下でPewPew用のゲームコードが公開されています。
 https://github.com/pewpew-game

ここではオセロゲームを追加してみました。
 https://github.com/pewpew-game/game-othello

DLしたPythonコードothello.pyを”CIRCUITPY”フォルダにドラッグしてコピーするだけです。

オセロがメニューに追加され遊ぶことができます。

 

CircuitPythonコーディング

コーディングのエディタとしてMuを使用しました。以下でダウンロードしてインストールします。
 https://codewith.mu/en/download

Mu起動後モードはAdafruit CircutPythonを選択します。

マイコンを接続して”CIRCUITPY”として認識されていればMuからコード書き込みやシリアルコンソールでの表示を確認することが可能です。

以下を参考にドットで”HomeMadeGarbege”と表示するコードを書き込んでみました。
 https://github.com/pewpew-game/pewpew/blob/master/games/hello.py

動作

参考

おわりに

簡単ではありますが自分でコードを書いて実機で動作確認できました。
すこし私とPewPewとの距離が縮まったような気がいたします。

今後はさらにコードへの学習を深め自由自在にやりたいことがCircuitPythonで実施できるようになれればと願います。

できれば慣れ親しんだArduinoが使えれば助かるので、Arduinoでのコーディング方法も探っていければと考えております。

Bleedin’ earring

Twitterにて面白い作品を見つけました。

線上のLEDで血の流れを表現して、さらに床にLEDを配置して地面ポタッをも表現しています。

製法の詳細は以下に記載がございます。

これを参考にイヤリングを製作してみましたので報告いたします。

 

 

構成

部品

  • マイコン Adafruit Trinket M0

     
  • テープLED 
    手元に狭ピッチのテープLEDがRGBWしかなかったので使用しました。
    普通のRGBや単色LEDでも問題ありません。

     
  • 赤色レーザー発光モジュール(薄型)

  • LiPoバッテリ 110mAh

 

動作

滴りをテープLEDで実現しました。
そして地面ポタッをレーザで表現してみました。これによってポタッ地点の自由度が増します。

Bleedin’ earring

レーザはマイコンAdafruit Trinket M0のGPIOで直接駆動しています。意外といけました。

 
電源にはLiPoバッテリを使用。

 
10セルのテープLEDを使用。

Arduinoコード

本家は重力加速度なども加味して滴りのリアルさを追求しておりますが、
ここでは簡単のためdelay時間で等加速度運動を表現しています。

滴りタイミングは乱数で0.5~3.0 secでバラつかせています。

 

オリジナルプロッタ eddyWrite の分解能を向上

前回 製作したオリジナルのプロッタ eddyWrite  (エディライト) の分解能の向上を実現しましたので報告させてください。

クルクルプロッタを自作 eddyWrite (エディライト)

 

スクリュー

前回は半径方向の分解能が16、回転1周の分解能が100でプロットを実現しておりました。

スライド部に利用したドキドキクレーンゲームの移動がリニア出なかったため、半径方向の分解能が稼げなかったのです。

ドキドキクレーンゲーム
価格:440円(税込、送料別) (2020/2/23時点)

楽天で購入

 

以下はドキドキクレーンゲーム内のスクリューです。
要所要所にまっすぐなポイントがあるので断続的な移動になってしまいます。

 

 

そこで3Dプリンタでスクリューを作ってみました!

参考:アルキメデスの螺旋の作り方を教えてください

オレンジ色のが3Dプリントしたスクリューです。

らせん構造により連続的な水平移動が実現できました!
3Dプリンタ最高!!

 

ステッピングモータ

ステッピングモータはステップ数400のST-42BYH1004を使用しております。

前回はステッピングモータは以下のモータドライバの資料を参考に制御しておりました。
 http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf

ここではArduinoのStepper Library を使用してステップ数を指定して制御し2ステップずつ回して、回転方向の分解能を200としました。

参考:Arduinoでステッピングモータを制御してみる

 

動作

スクリューのカスタマイズとStepper Library の導入で
 半径方向の分解能:16 → 100
 回転1周の分解能:100 → 200
を実現できました!

 

いい感じ!

元画像は以下w

 

解像度と共に描きあがる時間も増加します。分解能 半径100、1周200で10分くらいかかりますwww
 

おわりに

スクリューの改造とステッピングモータのステップ数指定による制御でeddyWriteの分解能の向上が実現できました。

おもちゃのクレーンゲームの機構をまま継承しているため、ペンの紙への接地にいい感じの遊びがないのが課題といえます。
現状は使用しているフェルトペンのペン先の柔らかさで接地のマージンを受け持っていただいております。

なんかバネ的なクッションが欲しいのと、垂直にストンと接地させたいところです。ソレノイドなんかがいいのかな?

eddyWriteも道として続きそうだぜ

追記

ほっほっほ 大臣 (2020/3/7)

河野太郎 防衛大臣に ほっほっほ。をいただきました。
誠にありがとうございます。精進いたします。

クルクルプロッタを自作 eddyWrite (エディライト)

クルクル回りながら描画するオリジナルプロッタを製作しました。

名付けて “eddyWrite”  (エディライト)!!!

早速動きをみてください。

子供たちが大好きでよく見ているYouTubeチャンネルのスマイリーを描いてみました。

それでは製作の過程を報告させてください。

 

動機

コンビニにて長男くんがどうしても欲しいというので、クレーンゲームのようにラムネをすくい出す食玩を購入しました。

なかなかよく出来ていて、しばらく普通のラムネを購入した際もコレに入れて遊びながら食べていました。

ちびっこYouTuberにも紹介されていますね。

 
凄くいい機構なのでいつか何かに使いてーと常々思っており、
この度 長男くんが飽きて見向きもしなくなったので晴れて分解させていただきましたww

ちょっと脱線します。
コンビニに寄って子供になんか 一つ欲しいモノ買っていいよって言うシチュエーションがあるのですが、高価な食玩を頑なに欲しがるときが多くて困りものです。

あまり高価な食玩置かないでほしい。。。最近 近所のローソンがトミカ置き始めてうかつに連れてけなくなった。。。

構成

2種のサーボでクレーンを動かして、ステッピングモータで土台を回します。

部品

ドキドキクレーンゲーム
価格:440円(税込、送料別) (2020/2/23時点)

楽天で購入

 

製作過程

それでは製作の流れをご覧ください。

制御部

Arduino UNOで各モータの動作を確認しました。

駆動部加工

土台や各種固定治具は3Dプリンタで出力しました。

 

クレーンを加工してサーボと接合しました。

eddyWrite

筐体は主に木材を使用して製作しました。

 

Arduino IDEコード

タクトスイッチのボタンを3つ使用
・ボタン1:描画スタート
・ボタン2:サーボモータを制御してペンを上げ下げする
・ボタン3:360°連続回転サーボを制御してスライダを戻す

描画時は土台をステッピングモータで回転させてデータ(graphics.h)を読み取って、ペンを上げ下げさせます。
ステッピングモータの駆動方法は以下を参考にしました。
 http://akizukidenshi.com/download/ds/akizuki/AE-DRV8835-Ss.pdf

描画データ(graphics.h)

描画用の配列を生成し、1ならペンを下げ0でペンを上げるようにしました。
eddyWriteはスライド方向の分解能が16、1回転は100分割で描画できます。

 
スマイリーはExcelで極座標変換と手動での修正をしながらデータ生成しました。

eddyWriteの出力が以下です。

 

以前自作したハンディバーサライタPovRanianの描画用Pythonプログラムをそのまま応用しての描画データ生成も試してみました。

左の画像をpythonコードで読み取って縮小・極座標変換して描画配列データを生成し右の絵が出力されましたww

おわりに

ちょっと分解能は低いですが、不用品を利用した割には想定通りのものができて大変喜んでいます 😛 。
スマイリー自動描画マシンとして運用しようかなwww

いつか精度の良いスライダでリベンジしてみたいです。

 

ありがとう

追記

スマイリーチャンネル (2020/3/8)

スマイリーチャンネルで紹介いただきました!

 

実は子供たちもスマイリーイラストにチャレンジしておりました。
しかし残寝ながら採用されず。。

 

 

父の偉大さ誉れの高さを示すことができたので大変うれしいです。

ハンディバーサライタ PovRanianの表示映像生成フォームの仕組み

Arduino Advent Calendar 2019 | 22日目

今年は念願のHomeMadeGarbageのオフィシャルショップを開店することができ、ハンディバーサライタPovRanian (ポブラニアン)を出品いたしました。
画像や図形をフルカラーで表示することができます。

 

PovRanianを販売するに際して一番の障壁が表示画像の更新でした。Arduino等の環境をお客様に用意していただき、表示データを生成してもらうのは現実的ではありません。

そこでウェブ上で表示映像データを生成しPovRanianにドラッグ&ドロップするだけの仕組みを構築しました。

ハンディ バーサライタ PovRanian の表示映像フォーム使用方法

色々検討してやっとできた表示映像生成フォームですので紹介させてください。
 

 

仕組み検討

バーサライタPovRanianをご購入いただいたのちに自由に表示映像をカスタマイズしてもらうべく、PovRanianに搭載するマイコンに表示データを書き込む手法を色々検討しました。

手法1: Arduino IDE

バーサライタのArduinoコードについては公開しておりますので、おのおのカスタマイズいたたくことも可能なのですが、Arduino IDEや各種ライブラリをダウンロード、インストールする必要があり現実的ではないので却下!

“キング・オブ・ダークネス” EVIL の魔法陣を自作

手法2: CircuitPython

Adafruitが提唱するCircuitPythonも検討しました。
AdafruitのCircuitPython対応マイコンであれば.pyファイルをドラッグ&ドロップするだけで買い込みが可能です。

CircuitPythonをつかってみた

 

しかし、処理が遅く割り込みもサポートしていないためバーサライタには向かないので断念しました。。。

手法3: uf2ファイル

MakeCode MakerでAdafruit SAMD21系マイコンのプログラミングを試したときに、コーディング後にuf2ファイルというものを生成しマイコンにドラッグ&ドロップで書き込んだことを思い出しました。

コードのバイナリをuf2ファイル化する手法も公開されておりましたのでPovRanianのデータ更新にはuf2ファイルを使用することにいたしました。

Microsoft MakeCode で ビジュアルプログラミング

uf2ファイルとは

Microsoftがマイコンフラッシュ向けに開発したファイル形式とのことです。


microsoft/uf2 - GitHub

 

uf2ファイルはAdafruitのSAMD21(M0)やSAMD51(M4)系のボードでも利用可能です。
PovRanianは Adafruit Trinket M0 を利用しています。

プログラムのバイナリでuf2ファイルを生成するpythonコードも公開されております。
M0系のマイコン用の場合の変換は以下のように実行します。

uf2conv.py -c -o test.uf2 test.bin

 

PovRanian表示映像フォーム

PovRanian 表示映像フォームは以下
 http://homemadegarbage.0t0.jp/PovRanian/

表示映像フォーム構成概要

PovRanian 表示映像フォームは自宅のラズパイサーバで構築されています。
フォームの入力内容から表示データを生成しコンパイル・ファイル変換を実施してuf2ファイルを返します。

フォームの入力を受けて表示画像データgraphics.hを生成します。

graphics.hとPovRanian用のArduinoコードをマージしてarduino-cliで.inoファイルをコンパイルしてバイナリファイルcode.binを生成します。
コマンドでArduinoコードをコンパイルできるarduino-cliは以下で公開されています。
 https://github.com/arduino/arduino-cli

arduino-cliでのコンパイルは以下のように実行します。

arduino-cli compile --fqbn adafruit:samd:adafruit_trinket_m0 [コードのフォルダ指定] 

code.binをさきほど紹介した uf2conv.py でuf2ファイルに変換してダウンロードファイルとして返します。

uf2ファイル生成

PovRanian 表示映像フォームにて1つ以上の映像の設定ができるとコード生成ボタンがアクティブにまります。

“コード生成”をクリックするとファイルの作成が開始し、しばらく待つと
PovRanian.uf2ファイルがダウンロードされます。

uf2ファイルのPovRanianへの書き込み

PovRanianに搭載されているマイコン(Adafruit Trinket M0)のマイクロUSB端子とPCを接続します。

 
USBケープルを接続するとLEDが点灯します。リセットボタンをダブルクリックしてLEDが緑色になるとPCにTRINKETBOOTディスクとして認識され表示されます。

 
 
 
 
TRINKETBOOTディスクに先ほど生成したPovRanian.uf2ファイルをドラッグ&ドロップします。
認識されるとすぐにTRINKETBOOTディスクは閉じます。
 
以上でインストール終了です(簡単!!)。
 
あとはPovRanianの電源を入れて映像をお楽しみください♪
 
 

おわりに

以上でPovRanianの表示映像のカスタマイズが容易に実行できるようになり、販売開始することができました。

 

来年は文字出力などフォームのバージョンアップも目指します。

温度センサ で 水温計 作製

我が家の金魚水槽の水温を管理したいとお母ちゃんがいうので、センサを購入しました。

3つも入っていて低価格!嬉しいですね。センサが3つも手に入ったのでまずはハンディー水温計を作製しました。

水槽の水替え時に適切な温度調整が必要とのことで作りました。

 

 

構成

防水の温度センサで水温を測ります。即手値をOLEDディスプレイし表示します。

 

SparkFun マイクロOLEDモジュール

本モジュールは64×48 ピクセルのOLED ディスプレイ SSD1306搭載しており、通信方式はI2CとSPIのいずれかを選択できます。

詳細は以下
 ・チュートリアル
 ・回路図

基板上のジャンパーの接続によって各種設定変更可能です。 

 

 

 

 

 

 

ここでは通信方式をI2C (BS1:1, BS2:0)としてアドレスを0x3C (D/C:0)にしました。

D0ピンがSCL、D1がSDAとなります。

温度センサ

温度センサにはDS18B20を使用します。購入品は防水加工され1mケーブルが接続されています。

DS18B20は9ビット~12ビットの温度測定分解能を有し、1-Wireで通信を行います。1本の信号線を電源にプルアップするだけで測定値を得ることができます。

参考

 

Arduinoコード

SparkfunのOLED用ライブラリを使用しております。
 https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

温度センサDS18B20用のライブラリとして以下の2つ使用します。
 https://github.com/PaulStoffregen/OneWire
 https://github.com/milesburton/Arduino-Temperature-Control-Library

センサで取得した測定値をOLEDに表示します。

 
 

 

水替え時の水温調整に活用いただいております 🙂 。

次は水槽常設用の制作にとりかかります!

買ったほうが安いとかどうか言わないでほしい

狭ピッチ LED バーで SPRESENSE バーサライタを堪能

以前購入したじゃじゃ馬 128セルのLEDバーを用いてバーサライタしてみましたので、もう少しだけ詳しく記載いたします。

APA102-2020の再考 - バーサライタへの応用 –

 

LEDバー

使用したLEDバーはAdafruitの商品で、2mm角のSPI入力LEDが128個 3mmピッチで1列に配置されています。

こちらのチップの色輝度は600HzほどのPWMで調光されるため、高速点灯が必要なバーサライタには向きません。しかし色輝度を0かMAXでのみ使えば低周波PWMの影響を受けないのでバーサライタ表示が可能となります。故に8色しか表示できませんが。。。

グローバル輝度(5bit)は電流量で調光されておりましたので今回は0~31中の最も低い輝度1で使用します。それでもかなり明るいです。

LEDのリフレッシュレート等の詳細は以下ご参照ください。

フルカラーLEDのリフレッシュレート

構成

LED以外は過去に製作したSPRESENSE バーサライタと同じです。

部品

  • マイコン SPRESENSE
     
     
  • SPRESENSE用ミニ拡張ボード KASPI001

    KASPI001基板 - 功力製作所

  • フォトリフレクタ QTR-1A

     
  • 狭LEDバー
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH
  • レベルシフタ  TXB0104

LED加工

LED 128セルを半径として回すのは、物理的、信号的にもしんどいと考えLEDバーを半分に切りました。

 
切ってもちゃんと動きます。LED1個は切断してなくなりましたが。。

 

これで64セルと63セルのLEDバーとなりました。それぞれSPRESENSEのSPI5とSPI4に接続しました。

 

Arduinoコード

マルチコアプログラミングで3つのCPUを使用しました。

  • Mainコア:フォトリフレクタで回転を検出して2つのSubコアに発光タイミングを送信
  • Sub1, 2コア:Mainコアからのタイミングを受けてSPIテープLEDを発光

コードは以前のものとほぼ同じでLEDのセル数のみ変えています。

画像色データ生成

画像をもとに表示映像データを生成したのですが今回は前述のLED駆動の問題によりRGBそれぞれ輝度0かMAX(255)しか表示できません。
そのため元画像のRGBを取得して閾値以上でMAX、以下で0に変換して、さらにバーサライタ用に極座標変換して表示データファイルを生成しました。

動作

LED127セル点灯を回転スピード約530rpm で1周100分割で実現できました。1周の分解能はもう少し上がってもいいように思いますがLEDの応用性が影響しているように思います。120分割以上にすると末端のLEDの色が正確ではない色になりました。

SPI周波数はコード上38MHzにしていますが、実際の出力は不明です。高速オシロ持っていないので。。。ただ信号スピード的にはまだ余裕あるはず(たぶん)なので恐らくLED自体の応答速度かと思われます。

8色しか出ませんが縦方向の分解能が上がったおかげで絵として鮮明な表示が可能となりました。

たいへん喜ばしい限りです。回転方向の分解能はLEDの数量減らすなどの検討が必要そうです。

引き続きPOVりたいと思います。

 

APA102-2020の再考 - バーサライタへの応用 –

さて先日購入したLEDストリップの動作に驚愕してもろもろ基本的な動作検証をしたわけですが。。。

回転計を自作

ここではもう一度落ち着いてAPA102-2020と向き合ってみたいと思います。

 そう。まさに トランキーロ!あっせんなよ

です。

 

 

購入品

購入したLEDバーは以下です。

2mm角のSPI入力LED APA102-2020が3mmピッチでぎっしり128個も載った商品で、強度や放熱のためか基板には1mm厚ほどのアルミ板が貼り付けられています。

APA102 DotStar搭載と記載ありますが、5050サイズのチップと異なり高速PWM動作ができないため、バーサライタなどのPOV (Persistence of Vision)には適していないとも明記されています。

商品データシートは以下 
 https://cdn-shop.adafruit.com/product-files/3776/3776_datasheet.pdf

APA102-2020

購入したLEDバーに搭載されているチップの写真が以下です(小さすぎてうまく撮れない。。)。

 
APA102-2020でググると正規なのかコピーなのかよくわからないのですが たくさんのチップが検索されます。以下に一部をまとめます。

恐らく購入したLEDバーに搭載されているAPA102-2020は8ピンでチップ写真から想像するにAPA102-2020-256-8かAPA-102-2020-8192-8Bなのではないかと思います。

しかし、サイトページとデータシートの写真が異なっていたりデータシートもリフレッシュレートが記載ないなど情報不十分ですので、もはや製造元や正式型番を知ることに意味はないように思います。疲れるし。。。

ということで実機で動作を観ていきましょう。
それこそ泥臭き爪真っ黒のエンジニアリングというものです。

APA102-2020動作

測定方法

Arduino UNOでLEDバーのセルを1つ光らせて点灯時の電流を10Ω抵抗による電圧降下でオシロスコープ観測しリフレッシュレートを観ます。オシロにはADALM2000を使用しています。

LED用ライブラリ

LED点灯用のライブラリはAdafruitのDotstar用のライブラリを使用しました。
 https://github.com/adafruit/Adafruit_DotStar

ここでこのライブラリの注意点があります。このライブラリのsetBrightness()はLEDの輝度を設定する関数ですが、グローバル輝度を設定するものではありませんでした。ずっと勘違いしていました。。

setBrightness(0~255)は色輝度に係数としてかけられておりました。以下のコードコメントにも明記されております。
 https://github.com/adafruit/Adafruit_DotStar/blob/master/Adafruit_DotStar.cpp

正規のDatstar LEDはグローバル輝度を設定すると600Hzほどの低周波PWMが重畳されます。そのためPOVに使用した際に残像の途切れの要因となります。
そこでAdafruitはsetBrightnessをグローバル輝度ではなく色輝度への設定に変更したようです。このライブラリではグローバル輝度は最大値(31)となっております。正しい判断だと思います。

ここではグローバル輝度も変更してLEDの特性を観たいのでライブラリを修正して可変にしております。Adafruit_DotStar.cppspi_out(0xFF)もしくはsw_spi_out(0xFF)の0xFFを所望のグローバル輝度に変更します。

たとえばグローバル輝度を16にしたい場合は
 0xFF → 0b11110000

グローバル輝度を1にしたい場合は
 0xFF → 0b11100001

などです。
グローバル輝度は以下の図のように5ビットの値D4-D1 (0~31)で指定します。

測定結果

  • グローバル輝度31、色128 (RGB=0x808080)
     

     
     
  • グローバル輝度16、色128 (RGB=0x808080)
     

 
リフレッシュレートはやはり600Hz台で グローバル輝度をさげると周波数が上がり、LEDに流れる電流が減りました。

 

  • グローバル輝度16、色30
     

     
     
  • グローバル輝度16、色224
     

 

グローバル輝度を16として色輝度を変えていくと以下のような結果となりました。

色輝度 freq [Hz] Duty [%]
0 0
30 664.8 0.016
60 648.5 1.8
128 625.1 9.4
196 610.8 50.6
224 597.2 72.8
240 590.4 85.3
255 100

 

色輝度-Dutyは以下の通り。

LEDの輝度を上げるとリフレッシュレートが変動して下がるなど よくわからない動きをしておりますが。。。とにかくLEDバーに搭載されているAPA102-2020は低いリフレッシュレートのためPOVには向かないことがよ~くわかりました。

ようするに以下のようになるのです 😥 。

 

バーサライタへの応用

しかし、ここで「あーリフレッシュレート低いわ。バーサライタ無理だね」と終わってしまってはタダのリサーチャーもしくは評論家止まりなわけで。。

私は泥臭き爪真っ黒のエンジニアリングをやめませんよ。なんせ9430円も払ったんですから。。。

じゃあ色輝度MAXでグローバル輝度のみで調光すればいいのでは?そうすればDuty 100%で低周波PWM制御の影響は受けません。

やってみた

マイコン SPRESENSEを用いてこのLEDバーを使用したバーサライタを試しました。

 
以前作成したSPRESENSEバーサライタの応用で

回転計を自作

 
LEDバーを搭載!

LEDバーの128個のセルのうち64を使用してグローバル輝度は1としました。のこりの64個はいっさい制御せず電源投入時に点灯したままになったりするので黒テープで隠してます。

動作

SPRESENSEは1コアのみの使用。LED64個の点灯で1周128分解能が達成されました。ギリギリですが。。

RGBはそれぞれ0か255でしか点灯できないので8色しか出力できません。。。

 

絵も出してみる。

狭ピッチのLEDバーですのでいい感じに絵が出ます。

ちょっと1周の分解能が低いのでマルチコアやSPI出力2個使用などで向上は考えたいですね。

しかし8色しかでないバーサライタをこれ以上いじるかどうかは。。。

また別のお話

追記

大臣の褒め (2020/3/7)

河野 太郎 防衛大臣にお褒めの言葉をいただきました。
誠にありがとうございます。

ハンディ バーサライタ PovRanian の表示映像フォーム使用方法

PovRanianに表示する映像データを生成するサイトの使用方法をご紹介します。
 
 http://homemadegarbage.0t0.jp/PovRanian/
 

 

基本操作

表示映像フォームの基本操作をご紹介します。

映像は最大で5種表示できます。
 
  • 映像:画像や図形を選択できます。
  • 色:図形の色を選択します。
  • 回転:映像の回転の有無及び回転方向を選択します。
  • スピード:回転スピードを選択します。
  • 開始秒数:映像の表示を開始する秒数を指定します。
    最小値は0.001秒で指定可能です。
    映像No. 1の開始時間は自動的に0秒になります。また未入力の場合も自動的に0秒になります。
  • 終了秒数:映像の表示を終了する秒数を指定します。
    最小値は0.001秒で指定可能です。
    未入力の場合は自動的に999秒になります。

表示はループで電源を切るまで続きます。

映像の指定

映像は画像と図形のいずれかが選択できます。

画像

    好きな画像を選択して表示できます。画像形式は以下のようにしてください。
  • フォーマットはJPEGまたはビットマップ
  • サイズは 47px × 47px 以上の正方形か横長の長方形

画像選択後に”ファイル選択”をクリックで画像ファイルを指定できます。

回転と表示時間も指定できます。

以下の画像を指定すると

 
以下のような表示になります。

 
画像の黒(#000000)は透過しますので更に以下の画像を映像No 2として追加し重ねると

 
黒が透過して映像No 1の令和が見えます。

 

図形

図形として星、四角丸が選択できます。

 

星を選択すると色、回転と表示時間が指定できます。

色を赤(#ff0000)にした場合は以下のような表示になります。

 

四角

四角を選択するとサイズ、色、回転と表示時間が指定できます。サイズは9, 12, 14, 17, 20, 24の6種類から選べます。四角の頂点のLED位置を示しています。

 

以下はサイズ24、色を緑(#00ff00)にした時の表示です。

 

丸を選択するとサイズ、色と表示時間が指定できます。サイズは3~24の22種類から選べます。

 
以下はサイズ17、色を青(#00ff00)にした時の表示です。


 
 

色の指定

映像で図形を選択すると図形の色を指定できます。デフォルトでは白(#ffffff)が設定されます。色をクリックするとカラーピッカーが表示されます。色を設定して”選択”をクリックして決定します。

回転の指定

画像と図形で星と四角を選択すると回転の有無と方向、スピードを指定できます。

回転は”なし”か”時計回り”、”反時計回り”を選べます。

 
“時計回り”か”反時計回り”を選択すると回転スピードを1~10で選択できます。

 
以下は星(赤)を時計回りのスピード5、四角(黄色)を反時計回りのスピード10、画像(ソニック)を時計回りのスピード1とした時の表示です。

 
 

表示時間の設定

各映像の開始秒数と終了秒数を指定して表示タイミングを指定できます。0.001秒単位で指定可能です。

映像No. 1の開始時間は自動的に0秒固定になります。
未入力の場合は開始時間は自動的に0秒、終了秒数は999秒になります。

各映像の最も大きい終了秒数が経過するとまた0秒に戻って表示はループします。

 

表示時間を細かく設定すればアニメーションも可能です。
以下の動画は5枚の絵を0.1秒づつ表示しています。

コード生成

1つ以上の映像の設定ができるとコード生成ボタンがアクティブにまります。

“コード生成”をクリックするとファイルの作成が開始し、しばらく待つと
PovRanian.uf2ファイルがダウンロードされます。

 

PovRanianへコードをインストール

PovRanianに搭載されているマイコン(Adafruit Trinket M0)のマイクロUSB端子とPCを接続します。

 
USBケープルを接続するとLEDが点灯します。リセットボタンをダブルクリックしてLEDが緑色になるとPCにTRINKETBOOTディスクとして認識され表示されます。

 
 
 
 
TRINKETBOOTディスクに先ほど生成したPovRanian.uf2ファイルをドラッグ&ドロップします。
認識されるとすぐにTRINKETBOOTディスクは閉じます。
 
以上でインストール終了です(簡単!!)。
 
あとはPovRanianの電源を入れて映像をお楽しみください♪
 

回転計を自作

今年はなんだかバーサライタ制作に凝っているのです。

“キング・オブ・ダークネス” EVIL の魔法陣を自作

いろいろなマイコンでバーサライタを作ってみて、構成変えてみたりして表示分解能(LEDの羽が1周する間に点滅を変更する回数)を調べるのですが、そもそも回転速度自体も把握しないと真っ当な評価できないですよね。
回転遅ければ点滅回数なんていくらでも上げれるのですから。

分かってはいたのですが、バーサライタ自体の制作に夢中で手が回らず とりあえず新品に近い電池でモータ回して表示分解能を評価しておりました。

でも一歩踏み出して決めたのです。回転計を自作しよう!

 

 

構成

フォトリフレクタQTR-1Aで回転物を検出して時間を測ります。回転数(RPM)をOLEDディスプレイし表示します。

  • マイコン Adafruit Itsy Bitsy M0 Express

    このマイコンの詳細は以下に記載しております。
     https://homemadegarbage.com/eye-pendant
    I2CのSDA, SCLピンはプルアップ抵抗内蔵でないため抵抗を外付けする必要があります。
     
  • SparkFun マイクロOLEDモジュール

     
  • フォトリフレクタ QTR-1A

 

オモテ

 

ウラ

SparkFun マイクロOLEDモジュール

本モジュールは64×48 ピクセルのOLED ディスプレイ SSD1306搭載しており、通信方式はI2CとSPIのいずれかを選択できます。

詳細は以下
 ・チュートリアル
 ・回路図

基板上のジャンパーの接続によって各種設定変更可能です。 

 

 

 

 

 

 

ここでは通信方式をI2C (BS1:1, BS2:0)としてアドレスを0x3C (D/C:0)にしました。

D0ピンがSCL、D1がSDAとなります。

 

Arduinoコード

SparkfunのOLED用ライブラリを使用しております。
 https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library

フォトリフレクタの出力で割り込んで回転速度を計測しています。10周の時間を測ってRPMを導出しOLEDディスプレイに表示します。

 
 

動作

これでバーサライタの回転数を測ることができます!

更なるバーサライタの高みを目指したいと思います。正統なる分解能評価をこの手にして。

CircuitPythonをつかってみた

Adafruitが提唱するCircuitPythonなるものをつかってマイコンのコーディングをしてみましたのでご報告いたします。

マイコン向けのPython環境であるMicroPythonをAdafruit社のマイコン用に派生させたのがCircuitPythonです。Pythonのように少ない記述で高い機能を実現できて、当然コンパイルの必要もなく書き込みも簡単にできました♪

 

 

CircuitPython対象マイコン

以下にサポートされているマイコンの一覧が記載されています。
 https://github.com/adafruit/circuitpython

ここではAdafruit ItsyBitsy M0 Express を使用しました。

マイコンセットアップ

CircuitPythonで生成したコードを書きこむための設定をします。マイコンボードをUSBでPCに接続します。接続時に新しいディスクとして”CIRCUITPY”と表示されていれば特に何もしなくでOKです。

“ITSYBOOT”(マイコンによって違う名前)などと表示される場合はCircuitPythonをインストールします。各ボードのインストーラは以下にあります。
 https://circuitpython.org/downloads

ここではAdafruit ItsyBitsy M0 Expressのインストーラをダウンロードします。
 https://circuitpython.org/board/itsybitsy_m0_express/

“DOWNLOAD.UF2 NOW”でインストーラであるUF2ファイルをダウンロードし、”ITSYBOOT”フォルダにドラッグします。以後は”CIRCUITPY”と表示されるようになり以上でCircuitPythonを使用するマイコン環境が整いました。

マイコンをつなげても何も表示されない場合はRESETボタンをダブルクリックしてLEDが緑色になるとPCにディスクとして表示されます。

エディタ

コーディングのエディタとしてMuを使用しました。以下でダウンロードしてインストールします。
 https://codewith.mu/en/download

Mu起動後モードはAdafruit CircutPythonを選択します。

マイコンを接続して”CIRCUITPY”として認識されていればMuからコード書き込みやシリアルコンソールでの表示を確認することが可能です。

コーディング

Muエディタで以下のLチカコードを書いてみます。

コード記載後に”保存”クリックでmain.pyとして書き込みます。するとすぐに書き込まれ動作します。

簡単!

コードも記述少なくて楽ですね。さすがPython!

バーサライタやってみた

さっそくCircutPythonでバーサライタを試してみました。

構成

LED回転部への給電はワイヤレスチャージでおこない、フォトリフレクタセンサで回転検知します。 

部品

  • マイコン Adafruit Itsy Bitsy M0 Express

     
  • フォトリフレクタ QTR-1A

     
  • LEDテープ Dotstar

     
  • ワイヤレスチャージモジュール

     
  • マブチモーター RS-540SH

     
  • 単3電池×1 ケース

     
  • 単3電池×3 ケース

     
  • ミニスライドスイッチ
     

  • モーター シャフトカップリング ジョイント

 

CircuitPythonコード

CircuitPython用のSPIやDotstar LED用のライブラリを予めダウンロードして”CIRCUITPY”のライブラリフォルダlibに保存します。

フォトリフレクタで1周する時間を測定して、1周を36分割して赤、緑、青、水色を表示します。

動作

考察

結論から言いますとCircuitPythonはArduino IDEでのコーディングと比較すると処理は遅いです。ただコード記述は少なくて済みますし何より書き込みが非常に早くて簡単です。コンパイルないので当然ですが。

CircuitPythonでちょっと痛いのが割り込みをサポートしておりません。
 https://learn.adafruit.com/introducing-itsy-bitsy-m0/frequently-asked-questions

ちょっとバーサライタには適応は厳しいと感じましたが、通常使用時にはPythonでサクサク記述して素早く色々できそうです。

参考