2020-07-20
IchigoJamに高性能な目を付けてみましょう。
目とは、光の三原色の強さを二次元配列上に受け取り、左右の差で立体的に知覚する器官。
カメラはそれをデジタルで実現したデバイスです。

毎秒何十枚もの画像を処理するのはIchigoJamのCPUでは荷が重いので、画像処理付きのデバイスを使います。 秋月電子で見つけた「Sipeed M1n Module AI Development Kit based on K210(RISC-V)」を使って、赤が右にあるか左にあるかをデジタル入力で受け取れるセンサーを作ってみました。


センサー実験と、IchigoJamにつないで動かしている様子。


64bit RISC-V 400MHz x 2core + AIエンジン + カメラ で、1,450円、すごい時代です。


LEDを光らせてみましょう。
IchigoJamよりちょっとだけむずかしいです。
WindowsやMacが使いこなせるようになったら、ぜひチャレンジしてみましょう!
USB-Cで接続し、CoolTerm(for macOS)などで接続して、microPythonでプログラミングします。

fm.register(20, fm.fpioa.GPIO1) led = GPIO(GPIO.GPIO1, GPIO.OUT) led.value(1)

お行儀が悪いですが、20ピンとGNDにLEDを直結して実験してみましょう。 コンピューターK210は、ピン毎に自由に機能を割り当てできます。fm.registerで表にでているGNDの隣の20ピンにGPIO1を割り当て、GPIO1をOUTに設定。 valueで1に設定すると、光ります!

while 1: led.value(1) time.sleep(0.5) led.value(0) time.sleep(0.5)

設定後、こんなプログラムで0.5秒ごとにエルチカできます。(ちなみにIchigoJamではこんな感じ)

1 LED1:WAIT30:LED0:WAIT30:CONT

コンパイル不要で、IchigoJamっぽい感覚で使えます。

rshellを使うと、シェルから接続できて、IchigoLatte感覚でファイルの作成もできて便利です。 editコマンドでviが使える!


カメラモジュールを接続してみましょう。この向きです。ちょっと固いですが、ケーブルを壊さないように慎重に!

sensorがカメラです。設定してcaptureするだけで画像が取得できて、いろいろ使えます。 サンプルを少し改造して、赤を見つけた左右位置によって、20ピンと隣の15ピンで出力して実験です。

import sensor sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) red_threshold = (40, 80, 30, 70, 0, 40) fm.register(16, fm.fpioa.GPIO0) btn = GPIO(GPIO.GPIO0, GPIO.IN) fm.register(20, fm.fpioa.GPIO1) left = GPIO(GPIO.GPIO1, GPIO.OUT) fm.register(15, fm.fpioa.GPIO2) right = GPIO(GPIO.GPIO2, GPIO.OUT) while btn.value(): img = sensor.snapshot() blobs = img.find_blobs([red_threshold]) if blobs: for b in blobs: print(b.cx()) if b.cx() > 320 / 2: left.value(1) right.value(0) else: left.value(0) right.value(1) break else: left.value(0) right.value(0)

本体に付属のボタン2つ、1つはリセット、1つは書き込みモードになるボタンですが、起動中はフリーに使えます。 16ピンをGPIO0、GPIO.INに割り当て、センサープログラムを中断するボタンとしました。


うまくいきました!boot.py として、プログラムを保存すれば、起動時に勝手に動き出します。IchigoJamのFILE0保存+ボタン押しながら起動または@ARUN相当ですね。


あとはIchigoJamにつなぐだけ、GND同士をつなぎ、20ピンと15ピンをIchigoJamのIN1とIN2に接続して、IchigoJamでテストプログラムを書いて確認しましょう。

1 ?BIN$(IN(),2):WAIT3:CONT

USB-Cから電源をとるか、VCCに3.3V、300mA以上の電源を接続すれば、単体で動作します!
コンピューターの目を使った高度なロボット操作にも気軽にチャレンジできそうです。

越前がにロボコン」では、「こどもプログラミング実業団」企画に賛同いただける企業の方、大募集中です!
AI/IoT、こどもたちと一緒に楽しく習得する企業型地域ICTクラブ、はじめませんか?

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS