スライド式調光ライトを作ろう

スライド式のつまみを入手しました。

「スライドポテンショメータ」というらしく、可変抵抗器の一種です。

これを使い、調光式のライトを作ってみましょう。

同時に、格安Arduino Nano互換機のAnalog入力が、まともに動作するか確認します。

スライドポテンショメータ接続

今回入手した「Grove スライドポテンショメータ ボリューム モジュール」は、ピンが4本あります。

ピンの1つに「LED」と書かれていますが、何を挿せば良いのか分からないので、無視します。

光の強さが変わるプログラム

スライドポテンショメータを動かすと、光の強さが変わるようにします。

#define PIN 10
int val = 0;
 
void setup(){ 
 pinMode(PIN, OUTPUT);
 Serial.begin(9600);
}
 
void loop() {
 val=analogRead(0);
 Serial.println(val);
 analogWrite(PIN,val/4);
 delay(100);
}

Analog入力値が0から1023なのに対し、Analog出力が0から255なので、出力時は4分の1にしています。

シリアルモニタでも見られるよう、Serial.begin(9600);とSerial.println(val);も入れておきます。

 

とりあえず、このプログラムを書き込み、調光式ライトは完成です。

思惑通りスライド操作で、光を調整できました。

 

心配していた格安Arduino Nano互換機ですが、Analog入力も動作するようです。

これは、お買い得です。

動くのか?Arduino Nano互換機

サイズの小さい「Arduino Nano」互換機を購入しました。

Amazonで「Mini USB Arduino Nano V3.0 改造バージョン 互換ボード ATmega328P搭載」という商品名で売られているものです。

はんだ付け不要で、480円の安価なマイコンボードです。

動くのか?

安いArduino互換機は、動くかどうか、ワクワクします。

商品の見た目は、なかなか雑で、ピンが豪快に曲がっていたり、白い曇りのようなもので、基盤の文字が読めなかったり・・・。

IDEで認識させる

USBで繋ぎますが、アンドロイドスマホなどの「Micro-B」タイプではなく、「Mini-B」タイプという、少し形状が特殊なUSBとなります。

USBで接続すると、Windows10の場合、ドライバ無しで認識してくれました。

IDEの
ツール > ボード > Arduino Nano
を選択し、プログラムの書き込みも問題なく行われます。

Lチカさせてみよう

単純なLチカ回路を作ります。

はたして動くのか・・・

光る!

チカチカする!

安くて、雑な作りだからこそ、光ったときの喜びが倍増します。

引き続き、Analog入力も動作するか試していこうと思います。

感圧センサーで楽器を作ろう

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

感圧センサーで楽器を作ります。

感圧センサーの触る位置によって音の高さを変え、音楽を奏でる予定です。

接触位置センサーを使う

感圧センサーにもいろいろあるのですが、今回はたまたま手元にある「SoftPot接触位置センサ100mm」を使います。

押す位置で抵抗が変わるセンサー、つまり押す位置を数値化できるので、楽器制作と相性が抜群と思われます。

 

さっそく回路を組み立てましょう。

ジャンパーワイヤーのオス-メスを持っていれば、接触位置センサーの取り付けは簡単です。

押した位置を音に変えるプログラム

単純です。

接触位置センサーのAnalog入力値(0~1023)を、tone()の第2引数に入れるだけです。

#define PIN 10
int val = 0;

void setup(){ 
 pinMode(PIN, OUTPUT); 
 Serial.begin(9600);
}

void loop(){
 val=analogRead(0);
 Serial.println(val);
 if(val > 10){
  tone(PIN,val,100);
 }
 delay(100);
}

接触位置センサーは、触れてないときAnalog入力値は0となります。

一応、10以下の時は触れてないと判定し、10より大きい場合は音を出すようにしています。

また、音感に自信がない私は、シリアルモニタでAnalog入力値を確認できるようにしています。

基準の「ド」が262となり、この接触位置センサーが100mmなので、だいたい4分の1くらいの25.6mm (100mm × 262 ÷ 1024)の位置が、基準の「ド」なのでしょう。

楽器を演奏してみよう

鍵盤を書けば、もっと楽器らしいですが、まずは試しに演奏します。

・・・。

思惑通り、押す位置によって音の高さは変わりますが、音の高さの調整が難しいです。

「ドレミ」がひけない。

「かえるのうた」すらひけない。

 

子供たちも頑張って演奏(?)してくれました。

これで遊んでいると、音痴になりそうです。

多分、250から270の間は、262(ド)を出すというように、しっかり鍵盤を意識してプログラミングをしなければ、いけなかったのでしょう。

あと、音も安定して流れていないので、その調整も必要そうです。

まだまだ楽器と呼べるものを作るには、道のりが長い気がしました。

離れた場所から温度を測ろう

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

新学期が始まり、四男が保育園に入園しました。

毎朝、保育園に通う3人(次男、三男、四男)の体温を測るのは、なかなか大変です。

非接触体温計を使って、パパッと測れたらなんと素敵でしょう。

非接触温度センサーを探す

体温計の定番、オムロン社が非接触温度センサーを出していました。

性能的には信頼できるかな・・・と、思ったのですが、7,000円くらいして断念しました。

代わりに1,200円くらいの「MLX90614ESF」を購入します。

離れたところの温度を赤外線で測るようです。

まずは試作回路

実用性を考えると、Arduino miniを使ってコンパクトにした方が良さそうですが、まずは試作でサイズは気にしません。

前回の人感センサー回路の7セグメントディスプレイをそのまま流用し、新たに赤外線温度測定センサー(非接触温度センサー)を組み込みます。

赤外線温度測定センサーには、10KΩ抵抗器が2つ必要なようです。

ライブラリを読み込もう

次にプログラムです。

Adafruit社のライブラリを使って、簡単に温度を取得できます。

Arduino IDEのメニューで、
スケッチ>ライブラリをインクルード>ライブラリを管理
を選択し、「MLX90614」で検索すると、「Adafruit-MLX90614-Library」が見つかります。

これをインストールします。

そして、ライブラリを読み込み、温度を取得しましょう。

#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

#define led_1 9
#define led_10 10
#define led_100 11 
#define led_1000 12 
 
int val = 0; // 表示する数字
int val_1 =0; // 数字の1の位 
int val_10 =0; // 数字の10の位 
int val_100 =0; // 数字の100の位 
int val_1000 =0; // 数字の1000の位 
 
void setup(){
 mlx.begin();
 for (int i=1; i<=8; i++){
 pinMode(i,OUTPUT);
 }
 pinMode(led_1, OUTPUT);
 pinMode(led_10, OUTPUT);
 pinMode(led_100, OUTPUT); 
 pinMode(led_1000, OUTPUT);
}
 
//7セグの数字
boolean Num_Array[10][8]={
 {1,1,1,0,1,0,1,1}, // 0
 {0,0,1,0,1,0,0,0}, // 1
 {1,0,1,1,0,0,1,1}, // 2
 {1,0,1,1,1,0,1,0}, // 3
 {0,1,1,1,1,0,0,0}, // 4
 {1,1,0,1,1,0,1,0}, // 5
 {1,1,0,1,1,0,1,1}, // 6
 {1,1,1,0,1,0,0,0}, // 7
 {1,1,1,1,1,0,1,1}, // 8
 {1,1,1,1,1,0,1,0} // 9
};
void NumPrint(int Number){
 for (int w=0; w<=7; w++){
 digitalWrite(w+1,Num_Array[Number][w]);
 }
}
 
void loop(){
 val = mlx.readObjectTempC()*10;
 val_1 = val % 10; 
 val_10 = val /10 % 10;
 val_100 = val /100 % 10;
 val_1000 = val /1000 % 10;
 
 digitalWrite(led_1000,1);
 digitalWrite(led_100,1);
 digitalWrite(led_10,1);
 digitalWrite(led_1,0);
 NumPrint(val_1);
 delay(3);
 digitalWrite(led_1000,1);
 digitalWrite(led_100,1);
 if(val < 10){ //10未満なら非表示
  digitalWrite(led_10,1);
 }else{
  digitalWrite(led_10,0);
 }
 digitalWrite(led_1,1);
 NumPrint(val_10);
 delay(3);
 digitalWrite(led_1000,1);
 if(val < 100){ //100未満なら非表示
  digitalWrite(led_100,1);
 }else{
  digitalWrite(led_100,0);
 }
 digitalWrite(led_10,1);
 digitalWrite(led_1,1);
 NumPrint(val_100);
 delay(3);
 if(val < 1000){ //1000未満なら非表示
  digitalWrite(led_1000,1);
 }else{
  digitalWrite(led_1000,0);
 }
 digitalWrite(led_100,1);
 digitalWrite(led_10,1);
 digitalWrite(led_1,1);
 NumPrint(val_1000);
 delay(3);
}

前回から変わったのは、ハイライトした3行目のみ。

小数点を表示しないで、10倍する手抜きを行っています。

温度を測ってみよう!

電源を入れると、数字が早速でてきます。

天井?もしくは室温が21.5℃。
小数点がないので、215と表示されます。

それでは、手をかざしてみましょう。

30.3℃!体温低い。

表面温度なので、低く出てしまいます。

体温計にするには、足し算か掛け算で補正したほうがよさそうです。

 

今回は試しに、冷たい物も測ってみましょう。

氷水です。

0.4℃!

意外と遠くからでも、温度を測れます。

体温を測る目的でしたが、いろんなものの温度を測る実験をしても楽しいです。

73歳差対決 ボッチャ

年齢差・・・そんなの関係なしに楽しめるのが、ボッチャの魅力です。

73歳差の対決

6歳の息子 対 79歳の祖母・・・齢の差73歳の対決が実現しました。
祖母から見れば、ひ孫との対決です。

初めてボッチャをする祖母には、白い球に近い方が勝ちという基本的なルールを伝えた後、ただ白い球に寄せればいいだけじゃないという、戦略的な説明もしました。

 

それでは、第1ピリオド開始。

息子はまず、手前の方にボールを置き、祖母の投げるコースを邪魔します。

祖母も自分の投球で、別のボールをはじく高度な技を使い応戦します。

戦略がボッチャの醍醐味

ボッチャを、白い球に寄せるだけのゲームだと思うと、相当つまらないと感じてしまうでしょう。

陸上やバスケなどと違い、ダイナミックなプレーがあるわけではないので、どれだけ戦略を理解しているかが、ボッチャをやるとき、観戦するときの重要なポイントだと思っています。

祖母に試合前に戦略について説明したのは、試合を楽しんでもらうためです。

試合は白熱

第1ピリオドは息子が3点取り、第2ピリオドは祖母が2点取返し、一進一退の攻防が続きます。

ピリオドが進むにつれて、制球が定まってきます。

2人とも、ボールの動摩擦力の影響が分かってきたようで、次元の高い戦いを繰り広げています。

1点差で迎えた第3ピリオド。

祖母がいいます。

「これは頭使うね!」

・・・!?

その言葉に、衝撃が走りました。

1兆円くらい医療費浮かないかな!?

高齢者や、運動しないで今後高齢になる人が、ボッチャをやるようになったら、日本の医療費を抑えられるのではないでしょうか?

超高齢社会の日本で、2020年には20兆円近く後期高齢者医療費がかかると言われますが、ボッチャなどのユニバーサルスポーツが普及した場合、心身の健康改善や痴呆症予防により、後期高齢者医療費が5%程度減り、1兆円改善されるのでは!

・・・後で調べましょう。

話を戻します。

ボッチャ対決の結末

73歳差の壁を超えた、白熱のボッチャ対決。

本当に熱くなったようで、うちわで仰いでいました。

第3ピリオドは、祖母が1点取り、同点に!

 

迎えた第4ピリオド。

 

・・・邪魔が入り、無効試合となりました。

戦略云々になると、幼い弟たちにはつまらないか・・・

新のユニバーサルスポーツを目指し、1歳から楽しめる仕組みも考えていこうと思います。

ボッチャ 隙間計測器(失敗)

ボッチャは時に、1mm以下の接戦となります。

審判をやっていると、赤ボール、青ボール、白ボールがすべてくっついているように見え、目視で判定できなくなることがあります。

そんなわずかな隙間を、計測できる機器は作れないか試みました。

感圧センサーを使う

長細いペラペラの金側板(?)で、押した位置を取得できる、感圧センサーを購入しました。

感圧センサーを、先の尖った定規に取り付け、ボールの隙間に差し込み、ボールに触れた時点の距離を取得できれば・・・。

 

いや、これは失敗。

思った以上に感圧センサーに圧力が必要で、ボールが動いてしまいます。

・・・ボッチャ隙間計測器のアイデアは他にもあるので、再度チャレンジします。

ボッチャ スマートグラス観戦

昨日紹介したIoT定規を開発した理由は、ボッチャ観戦の改善のためです。
(こんな観戦できたらいいなという空想です。)

2016年リオパラリンピックの観戦では、とにかく試合状況が見えないことが、ボッチャを楽しむ弊害になると感じました。

2階席だとボールが遠くて見えませんし、かといって1階席でボールを横から見ても、距離感がつかめません。

電光掲示板も角度が悪ければ見えず、点数がよく分からなかったり・・・観戦課題が山積みでした。

試合情報を補うためには?

スマホで手元に試合情報を表示する施策が、今後東京大会に向けて進んでいくかと思います。

ボッチャの場合、見えないボール距離を数値で送信する仕組みが、観戦改善に役立つかもしれません。

そしてきっと東京大会では、ボッチャコートを真上から4K・8Kカメラで撮影し、映像解析により、リアルタイムでボールの推定距離を手元の端末で見られるようになるでしょう。

他にも試合の得点や、ルール、見どころ、選手情報も、手元で見られるようになると思います。

ただ、スマホ片手に観戦するより、もっと良い観戦方法があるのでは?

スマートグラス観戦してみる

スマホを持っていると手がふさがる上、スマホを覗き込んでいるときは、試合が視界から外れます。

せっかく会場に足を運んで、スマホを覗き込むのは嫌だ・・・。

そこで、スマートグラス観戦を試してみましょう。

EPSONが販売している「MOVERIO BT-300」を使います。

審判がIoT定規で測っているボール間隔を、リアルタイムで目の前に表示させてみます。

上の写真は、スマートグラス越しに撮影したものです。

ボール間隔の距離が、視界に表示されます。

意外とクッキリ表示されます。EPSONすごい!

とはいえ、スマートグラス観戦が3年で実用化レベルにいくかは未知数です。日本企業の技術力に期待します。

ついにIoT定規!

IoT定規(試作機)の完成です。

測った長さを、遠隔で確認できます。

何に使うかは後ほど・・・。

つまみの値をブラウザで

前回に引き続き、つまみ(可変抵抗器)を回すと変動する電圧値を、ブラウザで閲覧できるようにします。

そのためにはWi-Fiで数値を送る必要がありますが・・・やり方がよくわからずmgo-tec電子工作ブログを参考とします。

「ESPr Developer」の神様のような人が、情報をたくさん提供してくれます。

掲載コードを参考に、「ESPr Developer」をJSONP吐き出しサーバーとしました。

クライアント(ブラウザ)側で、入力電圧値を非同期通信で1秒ごとに取得します。

これでなんとか、一定時間ごとにブラウザに電圧値が表示される仕組みを構築できました。

IoT定規の組み立て

厚紙を可変抵抗器に挿すだけです。

コンパスのような形の定規を作りました。開いた角度で長さを測ります。

厚紙の長さによって、計測する長さの係数が変わると思いますが・・・ここらへんは大雑把に、本物の定規で測りながら係数を調整しました。

計測してみよう!

離れた場所で計測している結果が、ほぼリアルタイムで手元に届きます。

IoT・・・モノのインターネットを体感できます。

 

なぜこんなものを作っているかは、次回記載します。

ESPr Developerに挑戦

Wi-Fi搭載の「ESPr Developer」を使い、前回「Arduino Uno」で作った可変抵抗器で数字が変わる仕組みを作ってみます。

Wi-Fi接続と小型化を同時に実現します。

プログラムを流用できるのか?

「I2C通信の7セグメント4桁ディスプレイ」×「ESPr Developer」の組み合わせの情報が、ネットで見つけられません。

ライブラリが動作するか、不安がいっぱいですが、とりあえずプログラムを書き込み開始・・・。

・・・。

何事もなく書き込めました。

回路は一体?

「ESPr Developer」はAnalog入力が一本も見つかりません。

調べると、「TOUT」が唯一のアナログ入力らしいです。

OUTなのに入力?

しかも、0V~1Vの入力範囲のため、電圧を下げないといけません。

さらに、入力範囲が狭まったことにより、僅かな電圧のブレで入力値が変わってしまうので、電圧を安定させる必要があります。

分圧回路とコンデンサーの利用

だいたい1V上限になる分圧回路を作ります。

3.3Vの出力なので、3分の1くらいにするには・・・2:1の抵抗で回路を作ればよいみたいです。

手元にある1KΩと510Ωを使うと、抵抗器の間の電圧は1.11になる計算です。

 

細かいところに詰め込みすぎ、なんだか良くわからない図になってしまいました・・・。

とりあえず動作します。

電圧を安定させるために、コンデンサーを初めて使いましたが、これを挿したら電圧が本当に安定しました。

すばらしい。

 

次回は、「TOUT」の入力値をWi-Fiで、ブラウザ表示できるようにします。

可変抵抗器で7セグメント操作

可変抵抗器とI2C通信7セグメントディスプレイを組み合わせます。つまみを回すと数字が変わるだけの基本的な回路です。

コンパクトに!

できるだけ制作物をコンパクトにするため、ブレッドボードミニを使っています。

Arduino Unoが大きすぎますが、これも次回、小型のESPr Developerに置き変えます。