chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

2021-01-01から1年間の記事一覧

素のSTM32で、I2Cの制御プログラムでトラブル中

次は、HALを使わず素でI2Cを制御しようと思って、いろいろ試作しているけど、うまくいかない。I2Cの9DoFセンサ(LSM9DS1)と接続して、STM32からI2Cアドレスを出すタイミングでなぜかI2CバスがHi-Zになってしまうようで、STM32からクロックを出せないでいる。S…

STM32/RustでHALを使わずレジスタを直接操作してUART send/receive

ひきつづき、HALを使わず、素でレジスタを叩いてUART用のsend/receiveルーチンを作成 以下のソースはシステムクロック4HMzで、38400bpsで通信する。抽象化していないので、STM32L47xxxシリーズ専用。 変数型もu32でなくてもいいところがあるけど、、無駄が多…

STM32+Rustで初期状態のクロック設定を確認

前回、HALを使わずレジスタ直叩きでLチカさせてみた。次はシリアルをつなぎたいが、シリアルを動かすにはUARTのブロックにどのようなクロックが供給されているのかを理解しないといけない。でないとボーレートが計算できないから。前回のソースではクロック…

STM32/RustでHALを使わずレジスタを直接操作してLチカ

組み込みRustでは、ハードウエア抽象化したライブラリHALを使ってプログラミングするのが正統派なんでしょうが、自分の場合、Rustの正しい所有権の書き方がイマイチわかっておらず、どうやってもペリフェラル操作をmainからモジュール側に出すことができなか…

組み込みRustのむつかしさ

STM32用のRust開発環境を設定して、I2CとかUARTとかボチボチ動いている。が、、あくまでもサンプルコードをベースに修正した程度である。 素の状態から最低限のコードだけで動かそうとすると、いろいろエラーが出てくる。一つはSTM32用ライブラリのエラーで…

STM32用バイナリがビルドできるよう組み込み用Rust環境をセットアップ

絶対座標で計算するから大変なんであって、XYZ軸の傾きを検知して、相対的にモータの回転数を±で補正する程度のアルゴリズムで、まずはドローンを飛ばしてみようと思う(変な方に飛んでいくかもしれないが)。ただ、このままMicroPython で試作を続けるとあ…

6DoFのLSM6DSLからジャイロ、加速度、温度のセンサーデータを取ってみる

SPIでレジスタが読めるようなので、センサを動かすための最低限の設定だけ行って、ジャイロセンサ、加速度センサ、温度センサの値を読んでみた。以下がその値。ドローンを置いただけなので、Y軸の加速度だけ値が出ている。それ以外は誤差なんだろう。 # gyro…

ビットバンギングで、SPI 3-Wireモードを実装して加速度センサ(LSM6DSL)のレジスタを読んでみる

STEVAL-DRONE01上の加速度センサはマイコンとSPI 3-Wireモードで接続されていてMicroPython上で利用可能な標準のSPIドライバでは制御できない*1。 泥臭いが、ビットバンギングでIOポートを上げ下げしてSPI 3-Wire相当のバスを作って加速度センサのレジスタを…

STEVAL-DRONE01の制御ボードに搭載されたセンサーを読む(読みたい)

STEVAL-DRONE01に制御ボードSTEVAL-FCU001V1が搭載されていて、そのボードには、角速度センサ(LIS2MDL)や加速度センサ(LSM6DSL)が搭載されている。STM32F401CCとセンサーはSPIで接続されている。が、、回路図をよく読むと接続が、SPIの3線(CS/CLK/MOSI)なの…

STM32F401CC用にMicroPythonをgdbでデバッグする->なんとかREPLが動いた

背景: STEVAL-DRONE01上にSTM32F401CCが搭載されていて、普通にCとかRUSTとかで開発するにはサイズの問題が出ないと思うが、センサのデータ処理や姿勢制御アルゴリズムについて試行錯誤したいのでSTM32F401CC上でMicroPythonを動かしたいと思っている。が、…

STM32F401CC用にMicroPythonをビルドするがサイズがでかくてFlashに乗らない

先人の情報を参考に、普通にNUCLEO_F401REとしてビルドしてみる。使った環境は、WSL上のUbuntu $ uname -a Linux DESKTOP-TRNV8F8 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux sudo apt-get inst…

MicroPythonを使ってジャイロセンサを評価する

クオータニオンの理解*1が最後まで終っていないが、、クオータニオンがある程度わかっても、ドローンを制御するには、ジャイロセンサのXYZ軸変換とか、カルマンフィルタとかまだまだ技術の壁があることが分かった。で、、少し動かしながらセンサ類のデータ処…

9DoFによる回転判断と姿勢制御

ドローンの飛行制御プログラムをRustで書くのを目標にクオータニオンを勉強してきた。本に載ってる証明もなるべく追いかけて理解を積み上げたつもりで、そろそろ最後の証明になりつつある。で、クオータニオンが理解できたか?と言われると、腑に落ちてると…

本を見ながらカレーを作る

大阪はスパイスカレーの店が多くて、北浜で働いていた時は、カシミールにも食べに行った*1。どういうスパイスを使ったらあんな味になるのか想像もできなかったが、その後、スパイスカレーの本が出てきて、スパイスの配合とか作り方がだいぶ分かってきた。エ…

Pythonでquotanionを扱えるようにクラスを定義してみる

多分Scipyとかにあるんだろうけど、Quotanion(四元数)の演算をプログラムでできるようにPythonでクラスを定義してみた*1。 証明とか手で計算していると間違いまくるので、簡単な式変換ならプログラムにやってもらおうという。。 演算子のオーバーロード(?…

やりたいこと:クオータニオンを理解して、Rustでドローン姿勢制御プログラムを作る

過去Interface誌で、ドローン用の姿勢制御プログラムの特集があって、本を買って、ドローン開発キットも買った。が、、肝心の姿勢制御のコアであるクオータニオンの概念が全く理解できず*1、開発キットも押し入れに入れたままであった。 普段はPythonを使っ…

ECHONET Lite用ライブラリ OpenECHOに新しい属性を追加ー>エラー応答(52(Get_SNA))になる。なぜか

やりたいこと: OpenECHOのElectricStormWindowクラス(通称:電動窓シャッター)に対して属性を加えたい*1。ElectricStormWindowクラスでは開閉状態(OpenCloseStatus 0xEA)がサポートされていない(仕様上も必須属性ではないので)。だから、、setupPropert…

Scratchでオリジナルの拡張ブロックを作る(リハーサルというか)

近々IoT勉強会でScratchを簡単に説明する予定。機器制御のためScratchでWebAPIを叩くのだがそのためのオリジナルブロックが必要。以前手順を理解するために一度作ったのだが、最新状況はどうなっているのかを確認。オリジナルの拡張ブロックを作るための手順…

Windows Updateができていないようである。。調べて対応

あまり気にしてなかったけど、どうもWindowsUpdateが正しく行えていないようである。パッチありませんと言いながら、OSが最新になっていない。対応としては、サービススタック更新プログラム(SSU)を手動で適用するべきらしい。アップデートでデバイスに重…

RPi4にdockerを入れる、コンテナ上でNode-REDとflaskを動かす

講習会ではアプリを同一条件で統一するため、dockerを入れてその上に構築することにする。多分素で入れるより、imageを配布する方が早いだろうと予測(生徒用のRPi(何十台)で各々ビルドしていると全く早くない。教師環境でimageをビルドして配布するようにす…

IoTプログラミング勉強会に向けて準備(Node-REDインストールメモ)

Node-REDをインストールする方法として、Docker上に構築する方法と、素で入れる方法があるのだが、どっちがいいのかちと分からない。Ubuntu/Rasbian上で動かすための推奨スクリプトは以下らしい bash <(curl -sL https://raw.githubusercontent.com/node-red…

Interface 2021年 8 月号 ラズパイPico特集

8月号のInterface誌は全面Pico特集です(8月号は連載記事もお休み)。 SDKを使ったLチカやPIO(Programmable I/O)、FreeRTOS、Pico上で動作するTensorFlowも解説されています。編集部の方々が作られた、CircuitPythonによるUSB接続のキーボードという記事もあ…

前回ブルースクリーンになったが、戻ってこれるのか・・・

頼まれ仕事があって、PCをフリーズさせるわけにいかないので、WindowsUpdateをずっと止めていた。当初のUpdateしない期限が切れたので再起動しろと言ってくる。前回ブルースクリーンになってえらいことになったけど、今回は戻ってこれるのだろうか。。 021-0…

シンセ教育アプリ Syntorialでシンセの音作りを学ぶ

シンセのボタンやスイッチの使い方が分かっても自分が聴きたいと思う音をどうやったら作り出せるのかが分からない。試行錯誤しても全然違う音になる。。HowTo本を少し読んだけど、説明の音にならない。。というわけで、、シンセの音作りを学ぶSyntorialとい…

CirtuitPythonでMIDI Controllerを作る

CircuitPythonの組み込みライブラリには、USB MIDIがあり、AdaruitBundleも使うと簡単にMIDI Controllerが作れる。以下は、ボリュームの操作に応じて、MIDIのControl Changeを送信するアプリ import time import random from analogio import AnalogIn impor…

CirtuitPythonで作った自動作曲アプリ

サンプルを見たところ、USB MIDIを使うことで、MIDIのNoteOn/NoteOffを送ることが簡単にできることが分かった。そこで、、ドミソの和音からランダムに音を選択して自動演奏するソフトを作ってみた。以下のアプリを走らせて、FL StudioのMIDI INに設定すると…

MIDI コントローラを作りたい

Spireでボチボチ音作りをやってるけど、マウスでボリュームを動かすのはなかなか慣れない。できたら、本物のボリュームやらスイッチをグリグリ動かして音色を調整したい。だから、、抵抗とマイコンでMIDIコントローラを作りたい。 CircuitPythonならUSB MIDI…

シンセの音作りを学ぶにはどうすればいいのか

先日 Spireを買って、一気に理解したいので、オンラインのビデオチュートリアルを契約して大体見終わった。 ビデオは英語だったので細かい部分がちょっと分かっていませんが、スイッチやらボリュームやらを動かしながら、音を出して説明されているので、何を…

執筆の気づき

自分は某原稿を書いている。製作記事というか。。採用の可否は分からないが。 熱い人間ではないし、すぐに仕事に取り掛かれるタイプではない。 だから、、まずは延々と逃避が発生する。逃避とは。。スマフォでニュースを読んだり、無料のKindleマンガを読ん…

ソフトシンセ Spireを買った

今ちょうど割引中でお安くなっているので、Spireを買ってしまった。 自分はEDMとか全然分かっていないが、できたら音作りもやりたいと思って、一定の評価がされているSpireを買いました。GUIが整理されていて音作りもやりやすいそうなので。。*1 試行錯誤す…