続:7セグメントディスプレイを配線4本で

以前、つまづいて出来なかったadafruit社の「I2C通信の7セグメント4桁ディスプレイ」に再チャレンジです。

配線4本は魅力的で、ここで諦めるわけにはいきません。
もう一度最初から見直します。

※2022年3月追記
現在、すでに情報が古く、サンプルスケッチをダウンロードしてコンパイルすると、エラーが出る可能性があります。

はんだ付けと配線

adafruit社のサイトに写真付きで丁寧にはんだ付けの仕方が掲載されています。

配線は図解はないものの、記載があります。

Connect CLK to the I2C clock – on Arduino UNO thats Analog #5, on the Leonardo it’s Digital #3, on the Mega it’s digital #21
Connect DAT to the I2C data – on Arduino UNO thats Analog #4, on the Leonardo it’s Digital #2, on the Mega it’s digital #20
Connect GND to common ground
Connect VCC+ to power – 5V is best but 3V also seems to work for 3V microcontrollers.

Arduino UNOの場合、アナログ入力4番、5番を使うようです。
出力ではないのがちょっと違和感・・・。

一応、fritzingで回路を描きます。

ここから日本語情報を求め、スイッチサイエンスの資料ページに行くと、つまづきます。

掲載されているライブラリが足りないためです。

adafruit社の説明ページを最後まで頑張って読むべきでした。

ライブラリのダウンロード

7セグメントディスプレイに数字を出すには、最低2つのライブラリが必要です。

それぞれ、GitHubからダウンロードします。

キャプチャ:GitHub

zipでダウンロードされます。

ライブラリをインクルード

2つのzipは、そのまま圧縮された状態でIDEへインクルードできます。
(Windows10 Arduino IDE 1.8.1環境)

IDEのメニューから
スケッチ > ツール >ライブラリをインクルード >.ZIP形式のライブラリをインストール
の順番で選びます。

サンプルスケッチで確認

環境の準備が整ったので、サンプルスケッチを使って、動作確認をします。

IDEのメニューから
ファイル > スケッチ例 >Adafruit LED Backpack Library >sevenseg
を選びます。

後はArduinoに書き込めば、数字が表示されます。

配線が4本、スッキリです。

任意の数字を表示させるプログラムも簡単です。

matrix.println(val); // valに表示させたい数字を入れる
matrix.writeDisplay();

Arduinoで簡単に7セグメントディスプレイを使いたい場合、重宝とするでしょう。

反面、ライブラリの中身は私にとってブラックボックスなので、イレギュラーな対応では苦労することになります。

Arduino Unoではなく、ESPr Developerで使いたいのですが・・・きっと苦難の道のりになるでしょう。

ブログを続けて思うこと

なんとか平日は毎日ブログ記事を書いています。

3日坊主にはならず、年度末、繁忙期もなんとか乗り越え、4か月以上経過しました。

ここで、ブログを書く習慣について、少し振り返ろうかと思います。

良かった点

  • ブログを書くにあたり、調査や行動が増え、知識・技術が身に付く
  • 平日毎日という縛りは、技術の学習速度を上げる
  • 仕事の説明書類の素材が蓄積されていく

 

悪かった点

  • 時間を食う
  • 平日毎日縛りだと、ときどき世の中に出しても仕方ない記事を書いてしまう

 

当初、今さらブログをはじめる出遅れ感がありましたが、総合評価としては、はじめて良かったと感じます。

ただ勉強して知識を得るより、ブログを書いた方が学習スピードが上がっている感覚があります。

 

 

車いすのバリアフリーを考える

競技用車いすではなく、普通の車いすに乗る機会がありました。

想像以上に動きが重いです。

段差と坂の苦労

体験用に無料貸し出しされている車いすに乗って、交通公園を散歩します。

段差と坂が大変なのはベビーカーと同じですが、想像以上に上り坂は重くて進まず、息切れしました。

今まで乗った競技用のハの字車いすが、いかに機動性に優れているかが分かります。

ハの字の方が手を広げたときにフィットして、力を入れやすい感じも受けます。

残念ながら、日用で使う車いすでハの字にしてしまうと、幅を取り、狭いところを通れないことがデメリットになるでしょう。

特に日本は狭いところが多いので。

コストはかかるかもしれませんが、簡単にハの字の角度を切り替えられる車いすがあれば、もっと楽をできそうです。

汚れる!?

段差と坂道の大変さは、一般常識レベルでも想像できますが、意外と気になったのは車輪で袖が汚れること。

厚着だと特に袖が擦れて汚れます。

・・・犬の糞を踏んでしまったら悲惨なことになるでしょう。

バリアフリーって段差をなくすだけではなく、ゴミをなくすことも重要なのかもしれません。

 

温度センサーとコンデンサー

はんだ付け練習用に部品をたくさん注文したら、足の3本はえた黒いカマボコみたいな部品を見つけました!

ラッキー、温度センサーだ!

しかし、Arduinoで回路とプログラムを組んでも、正しく温度を計測できません。

しょせん、はんだ付け練習用のジャンクパーツか。

 

月日が流れ・・・

たまたま目にした電子工作の記事で、これはコンデンサーということに気づきました。

・・・で、コンデンサーて、なんだろう。

説明を読んでもいまいち分からない。

 

振ると音がするリオのメダル

リオパラリンピックのメダルを、ちゃっかり妻と次男が触ってました。

車椅子ラグビー日本代表が獲得した銅メダルです。

振ると音がする

リオパラリンピックのメダルは、振ると音がします。このことを知ったときは衝撃を受けました。

視覚障害者に配慮したものですが、点字と違い、言葉も障害も越え、誰もが振って音を楽しめるデザイン(設計)となっています。感動です。

中に鋼の玉が入っていて、メダルの色によって入っている玉の数が違い、音も違います。

点字が刻まれたメダルは昔からありましたが、音がするのはリオが初めてです。

東京ではどんなメダルのデザインになるのでしょうか。

 

私もメダルに触りたかった・・・無念。

仮想現実を走り抜ける!車椅子型VRレーサー

赤坂サカスで車椅子型VRレーサー「CYBER WHEEL」を体験しました。

VR初体験です。

車椅子型VRレーサーとは

パラリンピックの陸上競技では、「レーサー」と呼ばれる走りに特化した車椅子が使われます。

このレーサーをVR・・・仮想現実で体験できます。

西暦2100年の東京をイメージした世界を、疾走できるとのことです。

仮想現実世界に入り込む

車椅子型VRレーサーを体験させてもらいました。

ゴーグルを着けた瞬間驚きです。
VRががここまで進化しているとは!

「目の前に画像が出てくる」くらいのイメージでしたが、全然違います。

仮想現実世界に入り込みます。

こぐことに集中してしまう

VRを楽しむことは、3秒くらいで忘れちゃいます。
車いすをこぐのが楽しくなってしまい。

障がい者スポーツのイベントに参加しても、今まで競技用車いすを、おもいっきりこぐ機会はありませんでした。

夢中になってしまいます。

400メートルの道のりを走り抜けます。

 

・・・そしてゴール。

記録は45秒28。やりました。
リオパラリンピック金メダリスト46秒65※を超えました。

※男子400m車いすT54(障害が最も軽いクラス)の記録

そんなバカな。

スピードが出すぎるのは、地面との摩擦や、風圧がないからなのでしょう。

体感的には、車椅子に加える力に対して、速く走りすぎる感じを受けましたが、爽快感があって良い気もします。

早く走るほど前から風が強く吹くと、もっと臨場感が出るかもしれません。

子供が体験できる配慮が優しい

VRに年齢制限があるのことは知っていました。

今回のVRゴーグルも、子供が着けると酔ってしまう可能性があり、12歳以下はヘッドホン+スクリーンでの体験となります。

子供が楽しめるよう、代替手段をしっかり用意していることに、運営者のやさしさを感じます。

非常に満足度の高い体験でした。

説明をしてくれるスタッフさんの喋りもうまく、子供の対応もうまく、VR技術の披露以外のところにも、力を入れているからだと思います。

 

シュート困難!?車いすバスケ

車いすバスケを体験してみました。

やってみると、意外なことに気が付きます。

ゴールにボールが向かわない

単に私が下手だったという可能性も否定できませんが、シュートを打つと思わぬ方向に飛んでいきました。

普通のバスケでは、足腰も使ってシュートを打つのですが、車いすバスケでは、ほとんど手だけでシュートを打ちます。

それだけでコントロールが効かなくなり、さらに飛距離も想定より短くなります。

子供がシュートを打つと、車いすから腰が離れ、無意識に立ってしまうことからも、シュートには足腰が重要だと分かります。
(車椅子から立ち上がるのは当然反則です。)

パラリンピックの車いすバスケは別次元

リオで観戦していたときは、当たり前のようにゴールが決まっていましたが、実はとんでもなく高度なシュートを繰り出していたのです。

3ポイントなんて、届くだけでもすごいことです。

見るのとやるのはだいぶ違い、障がい者スポーツの体験会は、新たな驚きの事実を発見させてくれます。

感情を定量化して満足度を測れるか?

Cloud Vision APIの画像認識を調べていて、FACE_DETECTION(顔検知)で感情も取得できることを知りました。

これを利用すれば、イベントの満足度を定量的に判断できるかもしれません。

アンケートより有効?

アンケート用紙で「1.楽しかった 2.まあまあ 3.楽しくなかった」という回答を集めるよりも、イベントを撮影してCloud Vision APIに解析させた方が、より役立つ集計データになるような気がします。

例えばボッチャのイベントで、どんな実況の時、どんなプレーの時、笑顔が増えるか?といった、来場者の満足度を細かく分析することができるので、イベントの改善に役立つでしょう。

感情解析の実験

足立区で行われたボッチャイベントと、港区(赤坂サカス)で行われたボッチャイベントの動画から、盛り上がっている瞬間のキャプチャをとり、FACE_DETECTIONを実行してみました。

なお、音声のピークを盛り上がりの瞬間として、キャプチャしています。

まずは足立区のイベントの解析から。

音声のピークは、逆転の投球で歓声が上がっているシーンでした。

キャプチャをCloud Vision APIに送り、画像解析を頼みます。

・・・。

結果・・・あれ?

レスポンスデータが長いので省略しますが、「VERY_UNLIKELY」が28個も返ってきました。

「VERY_LIKELY」が1個、「LIKELY」が1個。

「anger」や「sorrow」という、怒りと悲しみの単語が並びます。

そこまで悲惨で、不幸せになるようなイベントではなかったはず・・・。

感情解析はまだ発展途上?

港区のボッチャイベントは、満面の笑顔の人たちが写るキャプチャです。(掲載は避けます。)

さすがに「VERY_LIKELY」でしょう。

Cloud Vision APIに送ります。

・・・。

結果・・・え。

「VERY_UNLIKELY」だらけ。足立区のキャプチャより、笑顔が多いのは目に見えて分かるのですが、解析上では大差ありません。

まだ感情解析は業務実用レベルではないという、残念な結果となりました。

 

ただ、画像解析AIが、これからも進化していくはずなので、今後も試してみたいと思います。

物体検知できるか?Google Cloud Vision API

久しぶりに画像解析「Google Cloud Vision API」を試してみました。

1年前はβ版で、欲しかった機能がまだなかったのですが、今は充実しているかもしれません。

ボールの座標を取れるか?

顔の座標を取ることはできるのですが、物体の座標を取ることはできるのでしょうか?

この画像を解析してみます。

赤いボール2つ、白いボール1つ、青いボール1つ。

すごく分かりやすそうな画像です。

「Google Cloud Vision API」に解析をお願いするときに、解析の種類を決める必要があります。

Google Cloud PlatformのFeature Typeの項目で、解析の種類一覧があるので選びます。

ボール検出に使えるのは・・・

LABEL_DETECTION(カテゴリ検出)
IMAGE_PROPERTIES(色検出)

くらいでしょうか。

 

「Google Cloud Vision API」に解析お願いします。

・・・。

JSONが返ってきました。

{
 "responses": [
  {
   "labelAnnotations": [
    {
     "mid": "/m/01sdr",
     "description": "color",
     "score": 0.9688637
    },
    {
     "mid": "/m/01fklc",
     "description": "pink",
     "score": 0.9311038
    },
    {
     "mid": "/m/06fvc",
     "description": "red",
     "score": 0.9167749
    }
   ],
   "imagePropertiesAnnotation": {
    "dominantColors": {
     "colors": [
      {
       "color": {
        "red": 115,
        "green": 115,
        "blue": 111
       },
       "score": 0.35743248,
       "pixelFraction": 0.40888888
      },
      {
       "color": {
        "red": 58,
        "green": 112,
        "blue": 226
       },
       "score": 0.055576902,
       "pixelFraction": 0.0024603175
      },
      {
       "color": {
        "red": 205,
        "green": 188,
        "blue": 215
       },
       "score": 0.050076347,
       "pixelFraction": 0.001984127
      },
      {
       "color": {
        "red": 242,
        "green": 240,
        "blue": 249
       },
       "score": 0.04152352,
       "pixelFraction": 0.005079365
      },
      {
       "color": {
        "red": 222,
        "green": 50,
        "blue": 93
       },
       "score": 0.017801886,
       "pixelFraction": 0.005873016
      },
      {
       "color": {
        "red": 162,
        "green": 36,
        "blue": 58
       },
       "score": 0.0063587446,
       "pixelFraction": 0.0037301588
      },
      {
       "color": {
        "red": 192,
        "green": 70,
        "blue": 108
       },
       "score": 0.0024180475,
       "pixelFraction": 0.0015873016
      },
      {
       "color": {
        "red": 99,
        "green": 96,
        "blue": 89
       },
       "score": 0.08766081,
       "pixelFraction": 0.39690477
      },
      {
       "color": {
        "red": 74,
        "green": 119,
        "blue": 211
       },
       "score": 0.039106563,
       "pixelFraction": 0.0018253968
      },
      {
       "color": {
        "red": 233,
        "green": 225,
        "blue": 248
       },
       "score": 0.035073526,
       "pixelFraction": 0.0018253968
      }
     ]
    }
   },
   "cropHintsAnnotation": {
    "cropHints": [
     {
      "boundingPoly": {
       "vertices": [
        {},
        {
         "x": 1279
        },
        {
         "x": 1279,
         "y": 718
        },
        {
         "y": 718
        }
       ]
      },
      "confidence": 0.79999995,
      "importanceFraction": 1
     }
    ]
   }
  }
 ]
}

カテゴリが「色」「ピンク」「赤」って!?

せめて「ボール」って答えてほしかったところ。

 

色の値がいっぱい返ってきましたが、ボールの座標はとれないようです。

 

「Google Cloud Vision API」は、非常に簡単に使えるのですが、物体検知には向いていない気がします。

学習コストがかかりますが、あきらめて「OpenCV」を学ぶか・・・。

カエルは人感センサーに反応するか?

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

野外学習です。人感センサーは人間以外にも反応するか、調べます。

カエルがいた!

土手に出かけ、お母さんが川を覗き込んでいると・・・

「!!カエルと目が合ったぁぁぁ げぇぇぇぇ!!」

運よく(運悪く?)、大きいサイズのカエルと遭遇しました。

まだ寒くて、寝ぼけているのか、まったく逃げなかったので、簡単に捕まえられました。

カエルは人感センサーに反応するのか?

プログラムは前回と変わりません。

回路も可変抵抗器が、人感センサーに変わっただけです。

カエルを芝生に置き、人感センサーを向けます。

人感センサーが反応して、7セグメントディスプレイに710くらいの数字が表示されています。

いや、違います。

これは子供たちが反応しているだけです。

 

子供たちに、どいてもらいました。

カエルと人感センサーのにらみ合いが続きます。

・・・。

・・・。

・・・ほんとうにこのカエル、動きません。

 

らちが明かないので、我が家に招待して、カエルに人感センサーを向けておきます。

パソコンとArduinoを接続し、1秒ごとに人感センサーの値を記録するようにしました。

数時間観測すると、カエルは動いていたのですが、人感センサーに反応した記録はありません。

水槽の内部に人感センサーを取り付け、さらに数時間観測しても、やはり反応がありません。

結論:カエルに人感センサーは反応しない

人じゃないと反応しないのか・・・。

人感センサーの原理について「何か動いたら反応する」と仮説を立てていたのですが、違うようです。

カエルに反応しないということは、体温が関係あるのでしょう。

恒温動物の熱を感じ取っているのかな?

今度は恒温動物で、そこら辺にいるハトで試してみたいと思います。