micro:bit

2020年12月 6日 (日)

fritzing(回路図エディタ)でmicro:bitのLチカ回路描いてみた

ブレッドボードの配線図が描ける回路図エディタにfritzingがあります。
元はフリーソフトだったらしいですが、今はドネーションウェアになっており使用するには8ユーロ以上の寄付が必要になっています。
寄付の方法がPayPalしかないのでハードルが高かったのですが良くみたらクレジットカードで行けるようになっていましたので使ってみました。
※漏れなくPayPalのアカウントが作られ、PayPal経由での支払いになります。
?
メニューが中途半端に日本語化されてて変な感じですがふいんき(近頃は変換されるので侮れない)で大体の使い方は分かります。
前回の信号機っぽくLED3個並べたLチカの配線図を書いてみました。
200307p01

200301p01

おー、なかなか良い感じ。

| | コメント (0)

micro:bitにRTC(時計)を付けてみた

micro:bitには時計機能が無いので稼働時間カウンター(リセットボタンが押されてからの経過時時間を計測している)で代用していますが誤差が大きいのでイマイチでした。
で、RTC(リアル・タイム・クロック)ユニットをくっ付けて現在時刻が分かるようにしてみました。

使用したのはDS1307を使用したユニット。
BlockEditorの拡張機能で「RTC」を検索して出てきた奴でシュミレータに配線図も一緒に出て来るので同じように結線すれば使えます。
電源と信号線を2本の計4本を繋ぐだけなので簡単です。
購入したユニットはボタン電池型のリチュウムイオン電池(LIR2032)を使えば電池の充電も出来る優れモノです。

200306p01
ピンは付いてないので別途購入してハンダ付けする必要があります。
ピン実装済のユニットもありますが、この辺りはコード直付けとかも考えていたのでピンなしの方を選びました。

| | コメント (0)

micro:bitを照度計にしてみる(その4)

一応、計測はできましたが問題点もいくつか出てきました。
micro:bitの固定が難しくてチョット箱を動かすとmicro:bitかLEDライトが転がってしまう。
箱の中がどうなっているのか分からずシュレーディンガーの猫状態 (´・ω・`)
micro:bit本体に明るさを感知する機能があるので本体をセンサーとして使っていましたが、本体と一緒に買ったキットの中に明るさセンサーが付いていましたのでセンサーを箱の中に入れ本体は箱の外に出して計測状況を表示するようにします。

光センサーはCDs使うのが定石のような気がしますが、たまたまキットにオプチカルトランジスタを使ったモジュールがあったのでコレを使います。

TEMT6000光センサーモジュール、1個300~600円位です。
使い方はCDsセンサーと同じですのでCDsを使用した作例を参考にしました。

200222p01

BlockEditorだとサクッと確認できますね。
200222p03

MicroPythonでは参考に出来る作例が見当たらなかったのでリファレンス見て試行錯誤
ファイルが追記できない問題も「追記しないで書き続ければよい」と言う単純な解決策に至り1分間隔で(理論上)最大50時間まで保存できるようになりました。

ダウンロード - brightloger2.py

再度、計測テスト
前回と同条件にするのが望ましいので電池もヘタれたエネループ を使用

前回と同じ傾向で有効なランタイムも大体同じくらい。
うまく動いていると考えてよさそうです。
200222p02

| | コメント (0)

micro:bitを照度計にしてみる(その3)

MicroPythonで照度計測が出来ましたのでmicro:bitのストレージに計測結果を保存して照度ロガーに仕立てます。
MicroPythonのファイルはAppend(追記)が出来ません。
どっかのドキュメントに「面倒だから実装しない」みたいな事が書いてありました。(・Д・`)
2個のファイルをコピーしながらやれば追記擬きな事が出来なくは無いのですが、ファイルが大きくなる毎に処理に時間がかかるようになり時間計測の誤差が大きくなるように思いますのでRTC(時計)がついていないmicro:bitでは無理があるように思います。
代替えとしてList(可変サイズの配列)に計測結果を覚えておいて計測終了時にまとめて書き出す方法にしてみました。
メモリー量が分からないので実験してみたところ、2個の値(経過時間と明るさ)を追記していくと250要素でメモリーエラーが発生、使えるのは200回って所でしょうか。
1分間隔で記録するつもりだったのですが200分(3時間20分)では意味がないので5分間隔で16時間30分の記録が取れるようにしました。
ダウンロード - brightloger.py
実用面では5分位は誤差の範囲でしょう。
micro:bitとLEDライトを箱に入れてランタイム計測
使用したライトは手持ちで一番小さきいFENIX LD13。
いつもはミドルモードでヘルメットライトに使用しているのですが取り敢えずテストしたいのでヘタれたエネループを入れてTurboモードにしておきます、多分2時間位で電池が切れる筈。
200220p01
計測結果をExcelでグラフにしてみます。
200220p02

micro:bit とライトの固定に難があってイマイチでしたが
計測結果は分かりやすい感じで出てます。
有効なランタイムは80~100分って感じでしょうか。

| | コメント (0)

Pythonでmicro:bitを操作してみる

BlockEditor版のFilesystem(ベータ版)が上手く動かなかったのでMicroPythonを試してみることにしました。
micro:bitはBlockEditorもMicroPythonもオンライン開発環境が用意されていますが…
オフラインの方が何となく好き(?)安心(?)なのでmicro:bitでPython[Muエディター]を参考にMicroPythoneのオフライン開発環境を整えます。
BBC micro:bit MicroPython ドキュメンテーションを見れば大体の使い方はわかります。
Python…教育は受けたんで概要は知っていますが実際に使うのははじめてです。
この辺りのプログラム言語は各々の特徴はあっても極端な違いはないのでJava(JavaScriptではない)とかC++とかをマスターしていればリファレンス見ながらで十分使えると思います。
MicroPythonはぶっちゃければ若干書式が違うだけで難易度はBlockEditorのJavascriptと大差ありません。
なので、まずはBlockEditorで作った照度測定をMicroPythonで書き直してみました。
Block Editorの
(明るさ)に相当するのがmicrobit.display.readlightlevel()
(一時停止ミリ秒)に相当するのがutime.sleep_ms(ms)
LEDの初期化はmicrobit.display.clear()
LEDの点灯はmicrobit.display.set_pixel(x,y,9)
と、これだけ分かっていれば組めるでしょう。

# 明るさ計測 2進化10進数表示
from microbit import *
import microbit
import utime

def led_disp(bright):
    wbr = bright
    wcbr = 800
    display.clear()
    for dx in (2,3,4):
        cbr = wcbr
        for dy in (1,2,3,4):
            if wbr >= cbr:
                display.set_pixel(dx, dy, 9)
                wbr -= cbr
            cbr //= 2
        wcbr //= 10
#    display.show(Image.HAPPY)

display.clear()
display.on()
while True:
    bright = display.read_light_level() + 1
    led_disp(bright)
    utime.sleep_ms(500)


多少 (´・ω・`) 試行錯誤しつつ無事に再現
(明るさ)を3桁の2進化10進数で表示
200217p01

| | コメント (0)

micro:bitを照度計にしてみる(その2)

計測結果を記録出来なきゃ意味ないじゃん!
と言う訳で記録方法を調べてみました。
micro:bitには32KByteのファイルシステムが存在する事が判明
MicroPythonでファイルシステムにアクセス出来る…ってPythonかよ開発環境そろえるの面倒くさい。
BlockEditorで何とかならんの?
と思って見たら有りました、ベータ版だけど
後は時間ですが、micro:bitにはRTC(時計)が付いてないんですね。
ブロックの一覧を見たら(稼働時間:ミリ秒)があったのでコレで時計を作って誤差を見てみる。
サクッと制作 2進化10進数表示の時計、時刻合わせ機能付き。
ダウンロード - microbitclock.hex コレを一晩動かして誤差を見る。
200214p01

結果は10時間で2分の遅れ  (´・ω・`)
自転車用LEDヘッドライトのランタイムを計測する目的には2分程度のズレは許容範囲内ですが、時計としては使えませんね。

 

| | コメント (0)

micro:bitを照度計にしてみる(その1)

micro:bitで何をしようかな(*´ω`*)
スペックを再確認してみると明るさが計測できるらしい。
照度計をライトで照らしてビデオカメラで撮影して放置し、再生して確認の超人力アナログでやってたLEDライトのランタイム測定が自動化出来るんじゃね? ( *´艸`)
もうね、サンプルにあるくらい簡単ですね、早速やってみます。
200213p01
0~255の値を25個のLEDで表現するので10刻み…感覚的には分かるけど…コレじゃない感が…
明るさセンサーの値を2進化10進数で表示する様に変更。
何か思うように動かない…って実数演算か!いつものクセで整数演算だと思い込んでました (´・ω・`)
でも、これ計測値をどうやって記録したら良いの?
計測値が記録出来なきゃ意味ないじゃん orz

| | コメント (0)

micro:bitを買ってみた

時代はフィカルコンピューティングだよね??
と言う訳でmicro:bitを買ってみました。
200212p01
コンピュータ制御の学習用ガジェットなので電子工作のためのオプションが豊富で本体にも色々面白いセンサーが標準装備されています。
本体に装備されている入出力はボタン2個と5x5のLEDだけですので工作ありきで考えないと本体だけで出来ることは限られています。
プログラムはブロックエディタで行えます。
Scratchライクなビジュアルが画面でプログラムを組めるブロックエディタはWindows、Mac、Linux、RaspberryPi、iPhone/iPad、Androidで動作します。
スマホでプログラムが組めるとか お手軽 (^ω^)
200212p02
ブロックエディタはmicro:bitエミュレータも備えていますので動作を確認しながらプログラムが組めます。
ブロックエディタで作成したプログラムはJavascriptと相互に変換できます。
コピペとかはJavascriptモードに切り替えてテキストエディタで作業した方が早いです。
ブロックエディタ(JavaScript)で出来ない高度な事はMicroPythonやC言語でのチャレンジもできます。
まずはビデオカメラと照度計使ってアナログにやってたヘッドライトのランタイム測定を自動化してみようかな、夢が広がりんぐ (*´?`*)
本体だけなら2千円くらいですが、工作ありき なので色々付いてるスターターキットをお勧めします、千石とか秋月に行けるなら良いですけどネット通販でこの手の小物をチマチマ買うと(送料が)結構高くつきますから、いっそセットの方がお得です。

| | コメント (0)