前回までのあらすじ
こんにちわ、軽量Rubyフォーラムの石井です。
M5Stack CORE S3とmruby3.4.0で軽量Rubyフォーラムがやったこと(その2)です。
(その1)ではHack-Academia ”モノを動かすプログラム体験”の初級コースの模様をお送りしました。
このAcademiaは大学生、院生、高専生、高校生を対象に理系だけでなく幅広く組み込み開発を知ってもらい体験してもらおうというもので福岡県商工部が主催する未来ITイニシアティブと特定非営利活動法人AIPのご協力で実現しました。
初級コースに続く本格コースではmruby3.4.0対応のマイコンM5Stack CoreS3と様々なセンサーを組み合わせて自分仕様のIoTを作ってもらいます。
M5Stack CoreS3 上で mruby3.4.0 を動作させるためのサンプルプロジェクトM5StackCoreS3-mrubyはこちらで公開されています。
前回の初級コースの模様はこちらを御覧ください。
いよいよ本格コースの開始です。
最初にファイル転送機能に慣れてもらいます。
M5stackCoreS3-mrubyはM5StackのSDカードにmrubyアプリをAutorun.mrbという名前で保存すると自動起動する仕組みです。ただ毎回それでは大変なのでパソコンからSDカードにCooltermのxmodemを使って直接転送できる仕組みを用意しました。アプリに名前をつけて転送し、選択し実行します。これによりかなり作業効率があがりました。
その次にI2CやI2Cライブラリの説明があり、実際に用意されたセンサーを使ってみます。M5StackCoreS3内蔵の加速度センサーも利用可能です。
そしてBLE接続です。今回簡易Viewerを用意しました。これはChromeの試験運用版のウェブ プラットフォームの機能を有効にする」(chrome://flags/#enable-experimental-web-platform-features)を利用してM5StackからセンサーデータをBLEで送信しChrome上にグラフ表示するものです。このM5stackCoreS3-mrubyのBLEクラスはこの体験会用に各センサー値を送るメソッドを持っています。
センサーやBLEのmrubyライブラリはこちらを参照してください。
ひととおり確認できたところで各自にこれから何を作るのか考えてもらいます。その後2日間かけて実際に作ります。簡易的なモックのような感じですが、自分があれば良いなと思うものを作ってもらいます。色々ユニークなものが出来上がって行きます。
では実際にどんなものができたんでしょうか。
● 赤ちゃん守りマシーン
ベビーカーや子供の体につけることで熱中症などの対策に使いたい。
LCDにアラートを表示したりしきい値を超えると扇風機が回ります。
手で温度センサーを温めてテスト中です。😁 危険値に達したのでLCDにアラート表示、扇風機が回っています。
開発したコードです。
def heat_Strole_test()
gts = GroveTempHumiSensor.new
loop {
temp, hum = gts.read # 温度, 湿度
LCD.clear if I2CDevice.mruby?
fan = 0
color = LCD::WHITE
# 温度によって表示色を決定する
if temp < 24
color = LCD::GREEN
elsif temp < 28 && temp >= 24
color = LCD:: BLUE
elsif temp < 31 && temp >= 28
color = LCD::YELLOW
elsif temp >= 31
color = LCD::RED
fan = 1
end
# Fanを動かす/止める
GPIO.new(4).write(fan)
# 背景色変更
LCD.fill_rect(0, 0, 319, 239, color)
puts "TEMP #{(temp + 273.15).to_i} K"
puts "HUMI #{hum.to_i} %"
# 赤表示の場合はアラート表示する
if color == LCD::RED
LCD.text_color=LCD::BLACK;
LCD.text_size=5;
LCD.fill_triangle(160, 80, 100, 160, 220, 160, LCD::YELLOW);
LCD.set_cursor(5,3);
LCD.puts "!";
LCD.text_color=LCD::WHITE;
LCD.text_size=1;
end
sleep 1
}
end
heat_Strole_test
M5StackのLCDは°Cが表示できないのでK(絶対温度)で表示しています。
単なるCではダメと言うこだわりがイイですね!
● カラス検知システム
加速度センサーを使いゴミ捨て場を荒らすカラスを検知。アラートをSlackに送信し、カラスの嫌がる音を出して追い払う。
このSlack送信、1,2回送ると送れなくなってしまうという現象発生。よくよく見ると裏で大量のメッセージをSlackに送りつけていてSlack側から拒否されていることが判明。この部分の修正は時間切れ、しかしカラスの嫌がるらしき高周波音を出すなど良い仕上がりになっています(※高齢のエンジニアには聞こえにくい・・・ 😓)。
● 郵便お知らせシステム
ひとり暮らしを始めて気がついた意外と手間な郵便物の確認をもっと簡単にしたい。距離センサーを使っています。郵便箱をモデルにした箱の上部フタに距離センサーがついています。
簡易郵便受けを使ってデモ。郵便物がくるとLCDに赤色で表示。ポイントは郵便物を取るをと表示がグリーンに戻るところ。Iくんは都合で1回お休みでしたがよく追いついてくれました。
● 色覚センサーを用いたバナナ食べごろ検査機
美味しいバナナ食べるには皮の色から知るべし!ということでカラーセンサーを使いバナナの色を元に食べ頃判別します。
毎回バナナを買ってきて挑戦してくれました。上の写真は見事食べごろOK!表示。カラーセンサーは環境によって値が随分かわるので苦労されてました。最終的には光を当てながら測ることで安定してきた模様。他にりんごとかみかんなどに発展していきそう(実際、最初は他のフルーツも持ってきてました)。
● 水門管理システム
水門メーカーにお務めのAさん。自社の水門の開け閉めを想定して作成してくださいました。水位センサー値でランプの色を変化、カラーセンサーで読み取り水門の開け閉め実施。水門の位置は距離センサーで確認というこだわりです。
水門の模型(モーターで開け閉めできるすぐれもの)の動作をラズパイで行っています。ラズパイとM5StackをBLEで接続して制御しようという目論見でしたがその部分はなかなか難問で間に合わずでした。仮想のダッシュボードは地図付きでかなり実際の完成イメージで仕上がっています。Aさんも体調不良で一回休まれましたがここまで仕上げられるのはさすがでした。
Hack-Academiaを通して
みなさん初めての組み込み開発だったと思いますが、その楽しさは充分伝わったのではないかと思います。大学生の皆さんは授業でC言語とか触られていたようですがmrubyの使いやすを実感してもらえたと思います。
この経験をもとに組み込みに関係するような仕事につかれ、あっそういえばmrubyって良かったなと思い出して使っていただければなぁと思います。
長くなりました。お読み頂きありがとうございます。
参加して頂いた皆さん、この体験会を応援してくださった未来ITイニシアティブ、NPO AIPの皆さんありがとうございました。サポーターとして参加者の皆さんの手助けをしていただいたSCSK九州の三牧さん、フリーランスのエンジニア田中さんお疲れ様でした。
最後に軽量Rubyフォーラム(mruby forum)はGithub sponsorを募集しています。皆さんのご協力をお願いしています。Github mruby Forum よろしくお願いします。
明日は@Y_uuuさんのpicoruby-esp32について何かです。





