コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

バーチャルエレクトロニックハンディクラフト

やろうバーチャル

はい、おはようございます。時代はバーチャルということで肉体を捨て新たなフェーズへ移行しつつある僕です。まあ口で言うだけで実際のところ特に何もしていませんが、スピリチュアル的には肉体を捨てる準備は着々と……。


さて、そうしたわけで今日もバーチャル電子工作やっていきます。なぜそんなことをやるのかと言えば、この世の全てはバーチャルだからさ……。


バーチャルマイクロビット

てなわけで、オンラインでマイコンいじれることを知ったのでマイクロビットを触っていきます。

micro:bitはプログラミング可能な小さなコンピューターで、学習や教育が楽しく簡単に出来るようにデザインされています。

■ 仕様
MCU:32 bit ARM Cortex M0ベース Nordic nRF51822
動作周波数:16 MHz
RAM:16 KB
BLE搭載
LED × 25個(明るさセンサとしても使える)
ボタンスイッチ × 2個
加速度センサ × 1個
磁力センサ × 1個
バッテリーコネクタ × 1個(JST製PHコネクタ2ピン)
サイズ:43 × 52 × 11 mm(コネクタ部含む)
重さ:9 g

件のやつはこんなやつです。

公式
Micro:bit財団は、技術による発明を誰にとっても楽しいものにする、グローバルな非営利団体です。

アプリもあるようです。
play.google.com

micro:bit

micro:bit

  • Laurence Rogers
  • Education
  • Free
評価が二分されてるんで、ロットの違いやなんかで動作不良とかもあるのかもね。よく知らんけど。

バーチャル電子工作するよ ^ー^

というわけで、僕は実機持っていないマンなのでバーチャルで作っていきます。

Block/JSエディタ
Microsoft MakeCode for micro:bit

Pythonエディタ
Micro:bit - Python editor

Pythonエディタ使ってオンライン上で動かす方法よくわかんなかったので、Blockエディタで動作確認とかしてみます。前回使ってたArduinoと違ってブレッドボード使わない感じになってちょっとできること減っちゃいますが、僕はこういったの大体センシングできればいいやぐらいの気持ちで使っているだけなので僕はこれでも十分に遊べます。

やってみた

使い方を覚えがてらあそべそうなアクティビティがあったんでそれをサクッと触って終わらせてみました。
参考
Start Coding with the JavaScript Blocks Editor | micro:bit


■ Truth or Dare
「Truth or Dare」作ります。ちなみにこれが何かというとハロウィンの「トリックオアトリート」のようなもので「Truth」で投げかけられた質問に対して真実を話し、「Dare」で相手から指名された行動を実践するとかやるパーティーゲームです。

f:id:andron:20180829202025g:plain
作ったやつはボタンを押して、"Truth" か "Dare" のランダムが表示されるやつです。

let Random = 0
input.onButtonPressed(Button.A, () => {
    Random = Math.random(2)
    if (Random == 0) {
        basic.showString("Truth!")
    } else {
        basic.showString("Dare!")
    }
})
basic.forever(() => {
    basic.showLeds(`
        . . # . .
        . # # # .
        # # # # #
        . . # . .
        . . # . .
        `)
})


■ Temperature Activity
温度計作ります。温度センサがついているので温度計としても利用できるようです。裏側についているでかい黒いチップがそれに該当するようです。僕はどれのことだかは詳しくはよく知らんです。詳しく知りたい人は購入して仕様確認してね。

f:id:andron:20180829202639g:plain

let Temp = 0
input.onGesture(Gesture.Shake, () => {
    Temp = input.temperature()
    basic.showNumber(Temp)
})


■ Smiley Buttons Activity
スマイルボタンを作ります。まあ、ボタン操作でLED光らせようっていうだけのレッスンです。標準でついているAとBボタン、A+Bボタンの同時押しでの動作確認とかができます。

f:id:andron:20180829203058g:plain

input.onButtonPressed(Button.A, () => {
    basic.showLeds(`
        # # . # #
        # # . # #
        . . . . .
        # . . . #
        . # # # .
        `)
})
input.onButtonPressed(Button.B, () => {
    basic.showLeds(`
        # # . # #
        # # . # #
        . . . . .
        . # # # .
        # . . . #
        `)
})
input.onButtonPressed(Button.AB, () => {
    basic.showLeds(`
        . . . . .
        # . # . .
        . . . . .
        # . . . #
        . # # # .
        `)
    basic.showLeds(`
        . . . . .
        . . # . #
        . . . . .
        # . . . #
        . # # # .
        `)
})


■ Rock Paper Scissors Activity
じゃんけん作ります。micro:bitを振るとランダムでグー・チョキ・パーの手を出します。

f:id:andron:20180829203309g:plain

どれが何の手なのかよくわからない……。チョキはかろうじてわかる。

let Weapon = 0
input.onGesture(Gesture.Shake, () => {
    Weapon = Math.random(3)
    if (Weapon == 0) {
        basic.showLeds(`
            # # # # #
            # . . . #
            # . . . #
            # . . . #
            # # # # #
            `)
    } else if (Weapon == 1) {
        basic.showLeds(`
            . . . . .
            . # # # .
            . # # # .
            . # # # .
            . . . . .
            `)
    } else {
        basic.showLeds(`
            # # . . #
            # # . # .
            . . # . .
            # # . # .
            # # . . #
            `)
    }
})


■ Magic 8 Activity
これなんだろうかと調べたら簡易コックリさんということで結論づいた。質問に「はい」か「いいえ」で答えてくれるやつらしいです。アメリカだとマジック8ボールというおもちゃで定番らしいです。

f:id:andron:20180829204411g:plain

let Random = 0
input.onGesture(Gesture.Shake, () => {
    basic.clearScreen()
    Random = Math.random(3)
    if (Random == 2) {
        basic.showString("YES")
    } else if (Random == 1) {
        basic.showString("NO")
    } else {
        basic.showString("I DON'T KNOW")
    }
    basic.showNumber(8)
})
basic.showString("Ask a question!")
basic.showNumber(8)

■ Magic Button Activity
磁力センサをつかってみようてきなやつです。

f:id:andron:20180829204541g:plain

磁力センサのエミュレート方法がよくわかんかった……。

let IsSwitched = false
let Force = 0
input.onButtonPressed(Button.A, () => {
    if (IsSwitched) {
        basic.showString("B")
    } else {
        basic.showString("A")
    }
})
input.onButtonPressed(Button.B, () => {
    if (IsSwitched) {
        basic.showString("A")
    } else {
        basic.showString("B")
    }
})
Force = Math.abs(input.magneticForce(Dimension.Strength))
IsSwitched = Force > 100

■ Love Meter
ピンの操作に関してレッスン。

f:id:andron:20180829204915g:plain

エミュレーター上だといまいちボタンとの違いがわからない……。

input.onPinPressed(TouchPin.P0, () => {
    basic.showNumber(Math.random(101))
})
basic.showString("LOVE METER")


■ Guess The Number
数字あてゲーム作ります。

f:id:andron:20180829205315g:plain

動作的には至極単純なんで特に言うことがない。

let X = 0
input.onButtonPressed(Button.A, () => {
    X = Math.random(10)
    basic.showNumber(X)
})


■ Flashing Heart
LEDアニメーション作ります。

f:id:andron:20180829205422g:plain

LEDの表示は配列的なやつで管理されていて意外と簡単に作ることができる。

basic.forever(() => {
    basic.showLeds(`
        . # . # .
        # # # # #
        # # # # #
        . # # # .
        . . # . .
        `)
    basic.showLeds(`
        . # . # .
        # . # . #
        # . . . #
        . # . # .
        . . # . .
        `)
    basic.showLeds(`
        . . . . .
        . # . # .
        . # # # .
        . . # . .
        . . . . .
        `)
})

■ Die Roll Activity
ダイスロールなのではないかと訝しんでしまうのですが「die roll」作ります。振るとサイコロの目がでます。

f:id:andron:20180829205632g:plain

let Roll = 0
input.onGesture(Gesture.Shake, () => {
    Roll = Math.random(6)
    if (Roll == 0) {
        basic.showLeds(`
            . . . . .
            . . . . .
            . . # . .
            . . . . .
            . . . . .
            `)
    } else if (Roll == 1) {
        basic.showLeds(`
            . . . . .
            . . . # .
            . . . . .
            . # . . .
            . . . . .
            `)
    } else if (Roll == 2) {
        basic.showLeds(`
            # . . . .
            . . . . .
            . . # . .
            . . . . .
            . . . . #
            `)
    } else if (Roll == 3) {
        basic.showLeds(`
            . . . . .
            . # . # .
            . . . . .
            . # . # .
            . . . . .
            `)
    } else if (Roll == 4) {
        basic.showLeds(`
            . . . . .
            . # . # .
            . . # . .
            . # . # .
            . . . . .
            `)
    } else {
        basic.showLeds(`
            . # . # .
            . . . . .
            . # . # .
            . . . . .
            . # . # .
            `)
    }
})


■ Answering Machine
最後はハローワールドです。

f:id:andron:20180829205717g:plain

文字が出力できます(今更)。

basic.forever(() => {
    basic.showString("Ask me a Question")
})

とまあ、そんな感じのことを試すことができます。ブレッドボードと組み合わせることあできればやれることが増えるんですが、そこは……まあ仕方ないので諦めます。



また変なところで遊んでいたせいで実機が欲しくなってしまったよ……。


こういうのとか作りたくならない……?