M5stickCのMPU6886を動かしてみた
M5stickCはIMU(3軸加速度、3軸ジャイロセンサー)が内蔵しているので、加速度データを取得してみようとおもいます。
IMUはMPU6886という製品です。データシートが
まずはサンプルコードをみていきます。詳細は下記GitHubのソースコードより。
M5StickC/MPU6886.ino at master · m5stack/M5StickC · GitHub
早速サンプルコード書き込んでみますと、加速度とジャイロセンサーの各軸の値がリアルタイムで更新されているようです。ただ温度が50℃?となぞな値をしめしていますが。。。。
さて、中身を見てみると、M5.MPU6886.Init()で初期(デフォルト設定)を行い、
loop内でM5.MPU6886.getAccelData(&accX,&accY,&accZ)で加速度データを取得し、g→mg単位に変換するために1000倍して、その後は100msecの待ち時間をいれています。
使い方によってはMPU6886では測定レンジ、サンプリング速度などの変更等の設定も必要になってくると思いますが、色々とAPIがあるようです。
https://lang-ship.com/reference/M5StickC/latest/class_m_p_u6886.html
https://lang-ship.com/reference/unofficial/M5StickC/Class/MPU6886/
https://github.com/m5stack/M5StickC/blob/master/src/utility/MPU6886.h
一番気になったのは、getAhrsData()という関数ですね。これから色々と動かしてみたいなと思います。
KiCadを使ってArudinoUNO互換機を作製してみた!(Part3)
今回は作成した基板の実装について。リフローを行う上での準備と知識を整理していきたいと思います。
最初にリフローを使った実装の流れがマルツの実装サービスに詳しく説明があります。
また、リフローを行う上では、はんだ不良を防ぐために温度プロファイルを把握することが重要となるとのことで、概要はパナソニックのサイト、ルネサスの半導体パッケージ実装マニュアルが詳細にかかれているので参考になります。
https://www.renesas.com/jp/ja/document/unknown/982306?language=ja
次に、色々と調べていく中で自宅でリフローで実装する際に必要な部材をまとめてみました。
◎温度調整付きオーブン or 温度調整付きホットプレート
→こちらは、一長一短のようですがホットプレートの方が入門には向いているのでしょうか?両方やってみないとわかないですね。最近はコンベクション・オーブンとうので熱を均一に与えることができるようなので、オーブンでもよいのかな。あとはコストしだい。悩みどころです。。。。。
◎リフロー時の温度測定するための温度計測
→100~300℃はかれるものとしてはK型熱電対の温度計が比較的低コストでてにはいるようです。
◎絶縁体熱テープ(ポリミドテープ)
→基板の固定や熱電対のセンサ部分を固定するため
◎はんだペースト
→はんだペーストは保管が大変らしい。Amazonなどでは中華性のものが1000円弱でうられているようです
調べると一品ものは、なるべく手実装の方がコストはかからないですね。。。ただLGA、QFN、BGAのようなパッケージは手はんだは難しいので、なかなか難しいところです。いずれにせよまずは、検討して手を動かしていきたいと思います。
最後に色々と参考にさせていただいたサイトを下記に備忘録としてのこしておきます。
■参考したサイト・動画の情報
https://kazu-car.blogspot.com/2020/08/arduinounopart2-how-to-make-your-own.html
超簡単、ホットプレートでリフロー(はんだ付け)! - Qiita
Arduinoとホットプレートを使ったリフロー装置(1号機)の製作(4) - しなぷすのハード製作記
http://mag.switch-science.com/2013/10/15/toaster-controller/
https://www.craft-design.yokohama/electric-hobby/reflow/
https://ehbtj.com/electronics/made-reflow-oven/
ASCII.jp:簡単!トースターで電子基板づくり♪ アスキー3分ハッキング (1/4)
http://suz-avr.sblo.jp/article/181514868.html
↓サイトでは非常に詳しく、実装のコツや準備するものの説明があり、大変勉強になります。この記事ではステンシルの掃除の仕方まで説明があります。本当に助かります。
https://kohacraft.com/archives/201907111104.html
いずれにせよ、まずは環境を準備してみたいと思います。
KiCadを使ってArudinoUNO互換機を作製してみた!(Part1)
今回はKiCadを使いPCB基板を作ってみたので簡単にご紹介。
ArduinoUNOを使っていますが、センサーICやSDカードなどをつなげる際には3.3Vのインターフェースが必要となります。しかし、ArduinoUNOは5Vの電源で動作しているので、レベル変換ICが必要になるケースもあるということがあり、前から興味のあったKiCadで3.3V動作のオリジナルArduino-Uno互換機を作ってみることにしました。
でできあがったのはこんな感じです。とまだ基板だけですが。。。。
シルクとパターンでArduinoのロゴも入れてみました。あくまでも個人で使うといことで、色々と試してみた感じです。
発注は、Elecrowで行いました。初めての発注ですが、問題なくできたかなと。
ただし、シルクの印刷が微妙に汚いのと、Blueのレジストを選んだのですが、なんか紺色で、KiCadの3D-Viewのイメージと少し違ったかなと。。。。
まー初めての発注なので今回は良しとします。費用は、ステンシルと郵送込みで合計31$でした。ステンシルは9ドル、基板は5ドル/10枚なので、送料が一番かかり、17ドルでした。。。。
今度基板を作る時はまとめて発注しようと思います。
ボタン管理クラスについて
前回に引き続きボタン(スイッチ)についてです。
M5stick-Cにはなんとボタンに関するクラスが用意されているとのこと。
なのでわざわざ、ピンの設定やdigitalReadなどを使わなくてもよいとのことですね。
しかも色々と便利なものがあるらしいということで、詳しいことは下記サイトに書いてありますので、私も参考にさせていただきました。
https://lang-ship.com/reference/unofficial/M5StickC/Class/Button/
https://lang-ship.com/reference/M5StickC/latest/
https://github.com/m5stack/m5-docs/blob/master/docs/ja/api/button.md
公式のGitHubをみると、ボタンクラスのAPIなどはM5stackシリーズ共通のようですね。
下記URLを参考にさせていただき、同じくAPIを試してみたいと思います。
https://lang-ship.com/blog/work/m5stickc-button-class/
https://github.com/m5stack/m5-docs/blob/master/docs/en/api/button.md
長押しのpressedFor(xxmsec)を使ってみました。簡単に長押しの検出ができますね。
なおupdateはボタンのステータスや時間データをRead()関数でを取りに行っているようです。
また、pressedForの関数ではSWのステータスと時間により判断しているようです。
とゆーことで使いながらこのボタンのクラスに慣れてい消えればと思います。
M5stickCのスイッチを使ってみた
M5stickCにはボタンが3つあります。
回路図や部品配置をみると
ボタンA(正面M5ボタン:GPIO37)、ボタンB(右側面サイドボタン:GPIO39)、そして電源スイッチ(左側面サイドボタン)があります。
なお電源スイッチ6secで電源OFFとなるようです。電源ONの場合は、長押しは不要になります。
ということで、スイッチを試してみたいともいます。
まずは何も考えずにArduinoの流儀でスイッチを使ったプログラムを作ってみました。
内容はM5の正面SWを押すたびにLEDが点灯するプログラムです。
SWをしている間はLEDが点灯するというレベル検出になります。
次は、スイッチを押すたびにLEDの点灯・消灯を切り替えるエッジ検出のプログラムを作ってみます。作成したプログラムは正面M5スイッチを押すとDisplay表示の値がインクリメントされる。また押すたびにLEDの点灯、消灯を切り替える。サイドスイッチを押すと回数表示はリセットされ0になるようにしました。
スイッチが押されたときはHigh→LOWになるので、new_stateとpast_stateを用いて、
past_state==1 && new_state== 0の時にスイッチが押されたことを判別する形にしました。なお、チャタリングが大きい場合は、数msec周期のサンプリングでSWの状態を取得し一致する回数を2,3回続いた(例:1,1,1→0,0,0)場合にスイッチが押されたと決定させチャタリングを除去 を用いる必要がありますが、特にいれなくても安定して動作はがされていたので、おそらくハードウェアの方でRC回路の対策などが入っているかもしれません。
あとスイッチのプログラムをつくっていて思ったこと。スイッチ読み込み処理をメインのループにいれるより、タイマー割り込みでやらせたいなと。。。でもタイマー割り込みどうやるのか調べないと。。。
あとリセットさせるためには、毎回電源SWをOFF・ONするので面倒だな。。。なにか何か良い方法はないかな。。。。今後の宿題にしておこう。
M5stickCでLチカをしてみた
環境のセットアップとサンプルプログラムの書き込みの確認ができたのでLチカを行いたいと思います。やはり何事もシンプルなものからはじめるということで。
仕様をみるとLEDが搭載されているとのことなので、とりあえず一定周期でOn/Off(Blink)させてみようとおもいます。
①LEDのピン番号の確認
製品ページにPinMapおよび製品の裏に表示がされていますので確認ができます。
一応schematicでもかくにんしてみます。
LEDはRED_LEDとして10番ピンに割り当てられています。
②プログラムの作成
一秒おきにLEDが消灯・点灯をくりかえすプログラムにします。
新規設計から作成してみます。前回のHelloWorldのサンプルソースをみていると、
#include <M5stick.h>でヘッダーファイルのインクルードとSetup関数で" M5.begin()"をコールする必要そうですね。あとはArduinoで使い慣れている関数を使えばOKということで、すぐにLチカはできました。それにしてもArduinoの環境はやはり便利です。
なんか怪しい色に光っていますね。
それにしてもこんな短いソースコードなのにコンパイルに時間がえらいかかるなという感想です。。。