へんなものが開発された

長男がへんなものを作っていました。

夏祭りでもらったお面の目を光らせているようです。

やっていることは単純だけど

LED2つ、抵抗2つの単純回路です。

Arduinoの5Vから電流を流し、Arduinoへは9V電池で電力を供給しています。

プログラムを書けないので、ただ光るだけの電子工作ですが・・・

なかなかのインパクト

目を光らせた、お面をかぶる少年が近づいてくるのは、なかなかのインパクトがありました。

子供が自由な発想でモノづくりをすると、意表を突いた作品が出来上がります。

ボッチャ やりすぎた指示板

ボッチャの審判をやりながら、点数を記憶できなかった経験から、点数管理機能付きの指示板を作りました。

ボールの近さを測るレーザー距離センサーも搭載しています。

レーザー距離センサーの改善

指示板をだいたい水平にすると、距離計測モードとなります。

レーザー距離センサーとレーザーポインタを組み合わせた計測器ですが、以前の失敗を反省し、照準がずれないよう、しっかりねじ止めしています。

計測のプログラムも改善し、2mまで測れるようになりました。

・・・でも、1mを超えると数値が安定しないので、ジャックボール1m以内に寄せる高レベルな戦いを切願しなければなりません。

点数管理モードを追加

指示板を起こしている状態だと、点数管理モードとなります。

赤いボタン押下で赤の得点+1、青いボタン押下で青の得点+1。

それぞれ長押しで、0点にリセットされます。

点数管理機能はいらない

手元で得点を管理し、データを転送して得点板に表示できればと考えていましたが、操作が少し複雑化するのでデメリットの方が大きいような・・・。

いらないやこれ。

物理ボタンの心地よさ

物理ボタンを押すとき、なんとも言えない心地よさを感じます。

子供がボタンを押したがる気持ちが分かります。

USBキーボード(みたいなもの)を作る

前回までジェスチャー入力の可能性を探ってきたのに何ですが、今回は思いっきり物理ボタンでPCを操作する方法を探ります。

今までは面倒な通信(ArduinoとPC間で、Node.jsを介したシリアル通信)をしていましたが、もっとシンプル(?)に、特定キーだけを入力するUSBキーボードを作って、PCを操作します。

キー入力であれば、その入力を受け取るだけなので、アプリ開発も簡単です。

また、既製品のアプリも操作可能なので、例えばボタンを押すと「→」が入力される装置を作れば、パワーポイントをスライドさせたりできます。

応用が利き、可能性が広がります。

Arduino Pro Microを使う

USBキーボードとして認識してくれる「Arduino Pro Micro(互換機)」を使います。

5V版がAmazonで500円(8月6日現在値上がりで600円)、3.3Vで動くものが2,000円くらいで売られています。

なぜか3.3V版はプログラム書き込みがうまくいかず、5V版を利用することにしました。

押し心地の良さそうなボタンも用意

物理ボタンは秋月通商で購入した「押しボタンスイッチ(赤)」を使います。

ブレッドボードに挿せなかったため、ワニ口クリップで接続します。

プログラムは「Arduino Leonardo(Pro Micro)のHID(キーボード)機能を使う(ショートカットキー実行,コマンド実行)」を利用させて頂きました。

ちょっとだけ書き換えて、ボタンを押すと「Hello!」と入力されます。

「カチッ」という入力感触!

ボタンを押すと「カチッ」と音がして、テキストエディタに「Hello!」の文字が入力されていきます。

この、なんとも言えない心地よさ。

ジェスチャー操作の時の、つかみどころのない操作感ではなく、入力のフィードバックが触覚を通して伝わる安心感。

物理ボタンは良いですね。

一度リセットしてから、長男(6歳)と、次男(4歳)に渡してほっといたら・・・

906回入力されてました。

入力の心地よさが、回数に表れています。

 

スマートデバイスが普及してタッチ操作が増えましたが、物理ボタンによる入力の安心感、安定感には普遍的な価値を感じます。

うまくプロダクトに取り入れていければと思います。

ジェスチャー操作のアフォーダンス

ジェスチャー操作を試作しているとき、根本的な問題に遭遇しました。

手をかざす発想に至らない

失敗作1号は、水ようかんの容器を使った入力装置で、手をかざすと「決定」の処理を行うものです。

通常は青く光り、手をかざすと赤く光ります。
(実際はもう少し複雑で、スマートグラスと連動し、見たときに青く光る仕組みです。)

ただこれは、作っている私自身は操作を理解できますが、他のユーザーは光に手をかざす発想に至らないでしょう。

「手をかざしてください」と文字で表示させることはできますが、極力説明の必要ないUIとしたいものです。

トイレのUIに迷った経験

手をかざすジェスチャー操作は、まだまだ万人の生活に溶け込んでいません。

デザインを考えているとき、かつて自分が多機能公衆トイレで、どうやって水を流すか迷った経験を思い出しました。
押しボタンなのか、手をかざせばいいのか、どうやって水が流せばよいか、すぐに分からなかった操作パネル・・・。

その逆に操作に迷わなかったトイレを調査しました。
そして、手をかざすことに迷いを生まなかったのは、手形の絵があるものでした。

単純な結論。

手形UIに至る

手形があれば、手をかざす可能性を示唆できます。

手を使ったジェスチャー入力装置のアフォーダンス(説明なしで操作できる)としては、手形が有力な方法かと思います。

 

近未来的なジェスチャー操作

現在スマートグラスを使ったARアプリで、外国人観光客向けに言語設定できる機能を作っています。

せっかくARを体験するので、操作も近未来的な雰囲気を出したいと思います。

手の画像認識は使いません

スマートグラスのカメラを使い、手のジェスチャーを画像認識するのがAR操作の正攻法のような気がします。

ただ、以前、顔認識技術「Face Detectio」を試したところ、(私の実装では)認識が不安定でした。関節が多い手の認識はもっと不安定になる気がします。

そこで、今回のスマートグラスアプリは、移動しながら使わない想定だったので、備え付けのジェスチャー入力装置を使います。

反射式光電スイッチでジェスチャー操作

電子工作でジェスチャー入力装置を作る場合、ジェスチャーセンサー「APDS-9960」を使うのが王道だと思いますが、反射式光電スイッチ「TCRT5000 」を3つ使って自作します。

「APDS-9960」のジェスチャー入力がいまいち認識してくれず(電圧の調整をしなかったことが原因と後日気付く)、自作することに決めました。

反射式光電スイッチを三角形に並べます。

手をかざし・・・

左下→(上)→右下と、順番に感知されれば右スライド。
右下→(上)→左下と、順番に感知されれば左スライド。

上、左下、右下が一定時間、3つとも感知されている状態であれば決定。
上→左下または右下と、上から払うようなジェスチャーでキャンセル。

・・・言葉では直感的ではないので、動画でご確認ください。

開発中のARアプリは掲載できないので、サンプルWebアプリを作りました。

0.5秒くらい手形の入力装置に手をかざすと、言語設定画面が表示されます。

左右どちらかに手をスライドさせて、国旗を選びます。

再び手をかざす(左右にスライドさせない)と、決定になります。

操作感はまだまだ

一応スマートグラスをかけながらジェスチャー操作を行うと、近未来的な雰囲気を味わえます。

ただ、空中でのUI操作のユーザビリティは決して高くないです。

空中ゆえに、手の位置、手の角度、手を振る速さの個人差が大きく、たとえ私が使いやすいものを作っても、他の人が操作しにくい入力装置になってしまいます。

反面、指や腕が使えない状態でも、頭の振りや、足をかざして操作もできるので、もう少し誤作動をなくせば、アクセシビリティの高い入力装置になるかもしれません。

反射式光電スイッチの反応距離は2~3センチ

手をかざすと、スイッチが入る仕組みが必要になり、「TCRT5000 反射式光電スイッチ」を購入しました。

水道の蛇口やトイレなど、衛生面が気になるところで使われそうな部品です。

Amazonで10個入り170円、送料無料。

1個17円・・・。

反射した光で物体感知

「TCRT5000 反射式光電スイッチ」は名前から予測できますが、発光素子から光を放ち、反射した光を受光素子で受け取り、近くに物があるか感知します。

光と言っても赤外線なので、人間の目には見えません。

受光した赤外線をArduinoのアナログ値で受け取って使います。

ちなみに、物体の接近を直接デジタル値(HIGH、LOW)で受け取れるモジュールもあります。

少し大きくて邪魔ですが、プログラムも抵抗もいらず、お手軽に使えます。

反応距離は2~3センチ

「TCRT5000 」をArduinoにつなげて、手をかざして反応する距離を調べてみましょう。

 

・・・思ったより手を近づけないと反応しないようです。

目測ですが、確実に判定できるのは2~3センチ。

判断基準を大きめにして、10センチくらいで判定しようとすると、電圧の揺らぎで誤認することがあります。

反応距離はいまいちですが・・・「TCRT5000 」を3つ並べて、ジェスチャーセンサーを作ったので、次回掲載します。

2軸 カメラマウントでロボット工作

ロボットを作りのため、2つのサーボモーターを組み合わせるキット「SG90サーボ用 2軸 カメラマウント」を入手しました。

Amazonで740円くらいです。

どう組み立てれば?

この商品、説明書がありません。

そして、どう考えても加工無しで組み立てられません。

差込み部分のサイズが違います。惜しいというレベルでもありません。

とにかく切断、削る

仕方ないので、組み合うサイズに加工します。

ペンチで切断。

とりあえず入りました。

他にも、削らないと入らないところ、勘違いして削ったところなど、試行錯誤を繰り返し・・・

組み立て完成

なんとか組みあがりました。

Arduinoで2つのサーボモータを制御するプログラムを書きます。

良い動きです。

カメラマウント制御用の商品となりますが、まったく違う使い方をします。

これにぬいぐるみを被せ、タマゴの中に格納します。

つづく・・・(8月中旬あたり掲載)

土壌湿度センサーで危険信号

第18回 IoT×プログラミング教育

前回作った土壌湿度センサーをバージョンアップさせ、鉢植の土の乾きを危険信号で知れる仕組みを作ります。

ただ、子供が「アサガオの世話を学ぶ」という学校から与えられた課題がある以上、あまりにも学習の弊害になるような世話の効率化はしない方針です。

乾きの危険信号を作る

赤、黄、緑のLEDを用意します。

一定以上、土が乾いたら黄色信号が光り、カラカラに乾燥すると赤信号を光らせます。

電池駆動で、電池ボックスにON、OFFのスイッチが付いています。

省電力の工夫がないので、きっと電源ONのままだと、すぐに電池切れになるでしょう・・・。

土の乾きを調べたいときに電源をONにするルールです。

危険信号プログラム

前回のプログラムに、LED点灯制御と条件分岐を付け足します。

#define RED_PIN 12
#define YELLO_PIN 9
#define GREEN_PIN 6
int val;

void setup(){
  Serial.begin(57600);
  pinMode(RED_PIN, OUTPUT);
  pinMode(YELLO_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
}

void loop(){
  val = analogRead(0);
  Serial.println(val);
  digitalWrite(RED_PIN,LOW);
  digitalWrite(YELLO_PIN,LOW);
  digitalWrite(GREEN_PIN,LOW);
  if(val > 1000){
    digitalWrite(RED_PIN,HIGH);
  }else if(val > 900){
    digitalWrite(YELLO_PIN,HIGH);
  }else{
    digitalWrite(GREEN_PIN,HIGH);
  }
  delay(1000);
}

水を含む状態で、アナログ入力値が800だったので、だいたいですが・・・900を超えると黄色としましょう。

1000を超えると乾燥状態の赤信号です。

センサーを挿していない状態では、乾燥なので赤信号が点灯しています。

土壌湿度信号機をセット

子供が学校から持ち帰ったアサガオの鉢植にセットします。

センサーを土に突き刺すと・・・

緑色の点灯です。湿気は十分。

砂ぼこりや水から守るため、Arduinoはビニール袋で包みます。

昼間の乾きは激しい

翌日の朝、信号はまだ緑色でした。それを見た子供は水をあげなかったようです。

昼間見たら、黄色信号が点灯していました。

まずい・・・。

 

アサガオは水を好むので、夏場は1日2回、朝夕に水やりが必要です。常に信号は緑色の状態が望ましいです。

乾いたら水をあげると誤解させてしまったかも!?

失敗です。大事な説明が抜けていました・・・。

土壌湿度センサーで鉢植の乾きを知る

第17回 IoT×プログラミング教育

もうすぐ夏休みです。子供がアサガオを学校から持ち帰ったので、電子工作を用いて観察しましょう。

待った・・・やりすぎ注意

土壌湿度センサーで鉢植の乾きを監視。

さらに自動水やりを実現する構想で、ポンプも購入しましたが・・・

これって毎日水を上げて、アサガオを咲かす苦労を体感することに意味があるのでは?

子供の学習の機会を奪っている気がします。

土の乾きを知るだけの工作

自動水やりはやめて、鉢植の土の乾きを知るだけの機械を作りましょう。

「YL-69」と書かれている中国製の土壌湿度センサーモジュールを使います。

付属のジャンパーワイヤーがメスだったので、Arduino Nanoのピンに直接挿します。

AOがアナログ・アウトプット。
DOがデジタル・アウトプットとなります。

DOは使わないような気がしますが、一応13番ピンに挿してもらいました。

湿度を取得するプログラム

ライブラリも必要なく、光センサーなどと同じ要領です。

int val;

void setup(){
  Serial.begin(9600);
}

void loop(){
  val = analogRead(0);
  Serial.println(val);
  delay(1000);
}

1秒ごとに、シリアルモニタに湿度を数値で表示しましょう。

土壌湿度センサーに何も振れていない状態だと1023と表示されます。

5V MAXの電圧がかかっているようですが、モジュールについている可変抵抗器(十字のネジみたいなやつ)を回すと、入力値を小さめに調整できるのだと思います。

濡れたスポンジに挿してみる

土壌湿度センサーを、濡れたスポンジに挿してみます。

シリアルモニタの数値が、1023から817くらいまで下がりました。

湿度を取得できています!

水に入れてみる

思い切ってセンサーを水に入れてしまいましょう。

350くらいまで値が下がります。

ここまでの数値の時は、鉢植に水がたまっていて根が腐る状態です。

鉢植の土に挿す

それでは鉢植の土に挿します。

だいたい水を与えた状態で800くらいです。

今はパソコンと接続しないと数値を見られないので、次回はパソコンなしで乾きを知れる仕組みを作ります。

パワーLEDを制御できるのか

野外イベントでLEDを光らせたく、強力な光を放つパワーLEDを購入しました。

私は知識不足なので、最終的に専門の方に発注しますが、先に自分で試してみたくなりました。

「SODIAL(R)10個 3W ハイパワースター」をAmazonで購入。
1個あたり44円です。

簡単には光らない

Arduinoで砲弾型の3mmLED(Lチカで使うやつ)を光らせることは容易にできます。

しかし、パワーLEDは簡単にはいきません。

焼けるほど熱が出るので放熱板が必要です。

パワーLEDが小さいのに、放熱板が大きい・・・。
残念なほどスペースを取ります。

また、電流を調整する(?)ためのドライバーもいるようです。

交流電流!?

HiLetgo社が120円で販売している「LED定電流ドライバー」を合わせて購入しました。

パワーLEDの「+」「-」と、定電流ドライバーの「V+」「V-」をはんだ付けし、ドライバーの「N」と「L」から電力を供給しますが・・・

あれ??「入力電圧:AC85-265V」という仕様。

ACって交流電源!家庭用コンセントに直接つなぐ!?

仕方なくコンセントのコードを購入し、ワニ口クリップで接続します。

交流なのでどちらが「+」「-」というのはないです。

それにしても・・・100Vが怖い。

今まで5Vとか3.3Vの世界だったのに、桁が2つ違います。

感電死しそうです。

覚悟を決めてコンセントを挿す

遠くに離れてコンセントを挿すと・・・

光りました!まぶしい!!

昼間でも十分認識できる赤い輝きです。

さらに、青色の光も試します。

おお! ・・・お? なんだか紫色っぽいです。

発色が想像と違いましたが、とりあえずレンズフレアが素敵です。

2つ同時につなげたら?

2つの「LED定電流ドライバー」の「N」と「L」をつなぎ、残った「N」と「L」をACコンセントに繋ぎます。

すると、高速で点滅しだしました。

光過敏性発作を起こしそうな強烈な点滅なので、動画掲載は避けます。

赤、青、高速で交互に点滅します。

謎です。同時に光らせるつもりだったのに・・・

同時に光らせるには?

2つの「LED定電流ドライバー」の「N」と「L」を、どちらもACコンセントにつなげば、当然ながら同時に光ります。

Arduinoで制御するには?

光らせているだけでは、ただLED電球を買ったのと変わりないです。

これをArduinoで制御するには・・・

分かりません。

 

100Vが恐ろしく、Arduinoとつなぐ気になれません。

リレーとか、トランジスタを使うのでしょうか・・・。

まだまだ勉強が必要です。