アラフォーエンジニアの週末

Arduino, M5stackなど趣味で初めた電子工作を中心とした週末の活動・メモを中心にかいていきます。

M5stickCのMPU6886を動かしてみた

M5stickCはIMU(3軸加速度、3軸ジャイロセンサー)が内蔵しているので、加速度データを取得してみようとおもいます。

IMUはMPU6886という製品です。データシートが

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/datasheet/core/MPU-6886-000193%2Bv1.1_GHIC_en.pdf

 

まずはサンプルコードをみていきます。詳細は下記GitHubソースコードより。

M5StickC/MPU6886.ino at master · m5stack/M5StickC · GitHub

早速サンプルコード書き込んでみますと、加速度とジャイロセンサーの各軸の値がリアルタイムで更新されているようです。ただ温度が50℃?となぞな値をしめしていますが。。。。

f:id:rkblog:20210627160918p:plain

さて、中身を見てみると、M5.MPU6886.Init()で初期(デフォルト設定)を行い、

loop内でM5.MPU6886.getAccelData(&accX,&accY,&accZ)で加速度データを取得し、g→mg単位に変換するために1000倍して、その後は100msecの待ち時間をいれています。

f:id:rkblog:20210626184448p:plain

使い方によっては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)

今回は作成した基板の実装について。リフローを行う上での準備と知識を整理していきたいと思います。

最初にリフローを使った実装の流れがマルツの実装サービスに詳しく説明があります。

www.marutsu.co.jp

また、リフローを行う上では、はんだ不良を防ぐために温度プロファイルを把握することが重要となるとのことで、概要はパナソニックのサイト、ルネサス半導体パッケージ実装マニュアルが詳細にかかれているので参考になります。

コネクタのリフロー実装での温度プロファイル

https://www.renesas.com/jp/ja/document/unknown/982306?language=ja

次に、色々と調べていく中で自宅でリフローで実装する際に必要な部材をまとめてみました。

◎温度調整付きオーブン or  温度調整付きホットプレート

→こちらは、一長一短のようですがホットプレートの方が入門には向いているのでしょうか?両方やってみないとわかないですね。最近はコンベクション・オーブンとうので熱を均一に与えることができるようなので、オーブンでもよいのかな。あとはコストしだい。悩みどころです。。。。。

◎リフロー時の温度測定するための温度計測

→100~300℃はかれるものとしてはK型熱電対の温度計が比較的低コストでてにはいるようです。

◎絶縁体熱テープ(ポリミドテープ)

→基板の固定や熱電対のセンサ部分を固定するため

◎はんだペースト

→はんだペーストは保管が大変らしい。Amazonなどでは中華性のものが1000円弱でうられているようです

 

調べると一品ものは、なるべく手実装の方がコストはかからないですね。。。ただLGA、QFN、BGAのようなパッケージは手はんだは難しいので、なかなか難しいところです。いずれにせよまずは、検討して手を動かしていきたいと思います。

  

最後に色々と参考にさせていただいたサイトを下記に備忘録としてのこしておきます。

■参考したサイト・動画の情報

kohacraft.com

kohacraft.com

https://youtu.be/prjB_myCwSY

https://youtu.be/fgmpwYQbk9s

https://youtu.be/IUAFODI1Wg0

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互換機を作製してみた!(Part2)

今回はPart2ということで、実装する部品について、少しまとめておきます。

主なパーツは秋月電子さんのネットで購入です。だいたい、発注してから2日後には発送されましたので、4,5日もあれば確実に入手は可能かと。送料が500円かかるので、他に必要な部材もまとめて購入する方が良いです。部品はひとつひとつ、ジップロックに入っているので整理しやすく助かります。

f:id:rkblog:20210429164359p:plain

f:id:rkblog:20210429204703p:plain

あと今回はステンシルを使いリフロー実装にもチャレンジしてみたいと思います。

色々と調べると、ホットプレートやオーブントースターなどを使った方法もあるとのことなので、チャレンジしてみたいと思います。

 

 

 

KiCadを使ってArudinoUNO互換機を作製してみた!(Part1)

今回はKiCadを使いPCB基板を作ってみたので簡単にご紹介。

ArduinoUNOを使っていますが、センサーICやSDカードなどをつなげる際には3.3Vのインターフェースが必要となります。しかし、ArduinoUNOは5Vの電源で動作しているので、レベル変換ICが必要になるケースもあるということがあり、前から興味のあったKiCadで3.3V動作のオリジナルArduino-Uno互換機を作ってみることにしました。

でできあがったのはこんな感じです。とまだ基板だけですが。。。。

f:id:rkblog:20210429162103p:plain

シルクとパターンでArduinoのロゴも入れてみました。あくまでも個人で使うといことで、色々と試してみた感じです。

発注は、Elecrowで行いました。初めての発注ですが、問題なくできたかなと。

https://www.elecrow.com/

f:id:rkblog:20210429162521p:plain

ただし、シルクの印刷が微妙に汚いのと、Blueのレジストを選んだのですが、なんか紺色で、KiCadの3D-Viewのイメージと少し違ったかなと。。。。

f:id:rkblog:20210429162451p:plain

まー初めての発注なので今回は良しとします。費用は、ステンシルと郵送込みで合計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

f:id:rkblog:20210228164917p:plain

図出典:M5StickC非公式日本語リファレンス

 

公式の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

f:id:rkblog:20210228173313p:plain

長押しのpressedFor(xxmsec)を使ってみました。簡単に長押しの検出ができますね。

f:id:rkblog:20210228174242p:plain

 

なおupdateはボタンのステータスや時間データをRead()関数でを取りに行っているようです。

f:id:rkblog:20210228173841p:plain

また、pressedForの関数ではSWのステータスと時間により判断しているようです。

f:id:rkblog:20210228173609p:plain

とゆーことで使いながらこのボタンのクラスに慣れてい消えればと思います。

 

 

 

 

 

 

M5stickCのスイッチを使ってみた

M5stickCにはボタンが3つあります。

回路図や部品配置をみると

ボタンA(正面M5ボタン:GPIO37)、ボタンB(右側面サイドボタン:GPIO39)、そして電源スイッチ(左側面サイドボタン)があります。

なお電源スイッチ6secで電源OFFとなるようです。電源ONの場合は、長押しは不要になります。

f:id:rkblog:20210226191509p:plain

ということで、スイッチを試してみたいともいます。

まずは何も考えずにArduinoの流儀でスイッチを使ったプログラムを作ってみました。

内容はM5の正面SWを押すたびにLEDが点灯するプログラムです。

f:id:rkblog:20210228155158p:plain

SWをしている間はLEDが点灯するというレベル検出になります。

f:id:rkblog:20210228162751p:plain

次は、スイッチを押すたびにLEDの点灯・消灯を切り替えるエッジ検出のプログラムを作ってみます。作成したプログラムは正面M5スイッチを押すとDisplay表示の値がインクリメントされる。また押すたびにLEDの点灯、消灯を切り替える。サイドスイッチを押すと回数表示はリセットされ0になるようにしました。

f:id:rkblog:20210228162322p:plain

f:id:rkblog:20210228162619p:plainf:id:rkblog:20210228162449p:plain

スイッチが押されたときは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および製品の裏に表示がされていますので確認ができます。

f:id:rkblog:20210220223704p:plain

一応schematicでもかくにんしてみます。

LEDはRED_LEDとして10番ピンに割り当てられています。

f:id:rkblog:20210220223559p:plain

 

②プログラムの作成

一秒おきにLEDが消灯・点灯をくりかえすプログラムにします。

新規設計から作成してみます。前回のHelloWorldのサンプルソースをみていると、

#include <M5stick.h>でヘッダーファイルのインクルードとSetup関数で" M5.begin()"をコールする必要そうですね。あとはArduinoで使い慣れている関数を使えばOKということで、すぐにLチカはできました。それにしてもArduinoの環境はやはり便利です。

f:id:rkblog:20210220230008p:plain

なんか怪しい色に光っていますね。

f:id:rkblog:20210220230405p:plain

それにしてもこんな短いソースコードなのにコンパイルに時間がえらいかかるなという感想です。。。