赤外線温度計を作ろう

赤外線温度センサーがちょっと遊んでみようか、というレベルの値段になっているので講習会で使ってみました。

GY-906というモジュールでMelexis MLX90614という赤外線センサーが使われています。Web上の情報ではESFBAAというタイプのようですがGY-906の回路図が見つかりませんでしたので正しいかどうかはわかりません。Melexisからデータシートが公開されているので、ESFBAAが正しいとするとOperating Temperature Rangeは-40℃から85℃で、TO-39型ケース、3V動作(モジュール内で5V→3V変換)、シングルゾーン(視野が単一)、標準パッケージ(視野角90°)ということです。測定できる温度は-70℃から+380℃です。

Amazonでは HiLetgoで670円でした。

https://www.amazon.co.jp/gp/product/B071VF2RWM/ref=od_aui_detailpages00?ie=UTF8&psc=1

AliexpressではMT Technology Co., Ltd.でさらにいくらか安い$4.05でした。

https://ja.aliexpress.com/item/Free-Shipping-GY-906-MLX90614ESF-New-MLX90614-Contactless-Temperature-Sensor-Module-For-Arduino-Compatible/32465344732.html?spm=a2g0s.9042311.0.0.aeFeEN

I2Cですのでライブラリを追加して配線4本でOKです。UNOでは(Nanoでも同じですが、)SDAをA4、SCLをA5に接続します。

表示器も欲しいということになって、I2CのOLED Display Module 128X64も接続しました。これもAmazonの HiLetgoで420円でした。
https://www.amazon.co.jp/gp/product/B071ZPFDWW/ref=od_aui_detailpages00?ie=UTF8&psc=1

AliexpressではHwa Yeh Tech CO.,LTDでいくらか安い$3.00でした。表示器のライブラリはAdafruit_SSD1306を使用しました。ディスプレイへの表示用ライブラリAdafruit_GFXも合わせてインストールします。Adafruit_SSD1306を使う時には使用しているディスプレイの解像度に合わせてAdafruit_SSD1306.hのコメントアウトの行を変更する必要があります。行番号72からの数行を抜き出しましたが、下記が変更後です。

 

講習会ではArduino Nano互換機を使いましたが、この記事を書いている今は手元にあったUno互換機を使っています。

 

この記事を書きながらセンサーの資料を見返していたら、放射率の補正が間違っていたことが分かりました。下のスケッチは訂正済みです。

赤外線温度センサーMelexis MLX90614は5.5μmから14μmの波長域の赤外線を受光して、赤外線で加熱された受光面の温度を多数の熱電対で測定して赤外線の量を求めているようです。赤外線を放出している物体は黒体(放射率=1.0)と仮定して、センサーの温度測定値も用いて、測定対象の温度を推定しています。実際は物体の表面によって放射率は異なり(1よりも小さくなる)、放射率の低い金属表面を測定した場合は黒体に比べて赤外線の放出量が少ないので測定結果は実際の表面温度よりも低い値を出力します。

MLX90614に内蔵されたEEPROMに測定対象の放射率を書き込んで補正した結果を出力するように設定することができます。しかしながらライブラリでは対応していないことと、書き込むためには通信エラー検出用のPEC値も書き込む必要があり、かなり面倒みたいなので、Arduinoのプログラムで補正をすることにしました。放射率E(0~1.0)と、センサー温度(K) Tsnr、測定対象の温度(K) Tact、赤外線量から推定した温度(K) Tmeasの関係式がMelexis社の資料に書かれています。

https://www.melexis.com/en/documents/documentation/application-notes/application-note-mlx90614-changing-emissivity-setting

放射率が分かっていればこの関係式を使って測定対象の温度に変換することができます。

実際の表面の放射率は分からないことが多いので、熱電対等で実測して赤外線センサーでの測定値がその値を示すように放射率で調整する使い方になるようです。

 

2017.08.15

手作りの大型7セグメントフルカラー表示器(デモ版)

メイカーフェア東京2017では、LEDの点滅状態がわかりやすいように、加工前のシリアルLEDと2個ずつセグメント状態に配置した表示器を並べて展示しました。

表示器で数値をカウントアップ、カウントダウンするだけなので、プログラムがシンプルで分かりやすいと思います。下の写真が全体の画像です。左端に14個のLEDが並んだシリアルLED、右下が1セグメントに2個のLEDを配置した7セグメント表示器、右上がプリント基板です。どちらのLEDもNanoの5V、GND、D7に接続しました。

LEDは次の写真のように0から13までの順番でつながっています。

 

OLYMPUS DIGITAL CAMERA

プリント基板のパターンは、右端中央から信号が入り、左端中央から次の桁に信号を伝えるように考えました。基板の面積を最小限にできるようにナルト模様のようにしました。基板を近づけて配置するときに有効な方法だと思います。基板は木工CNCで切削してパターンを作成しました。バリがあると指に刺さったり、短絡してしまったりするので、ヤスリで削ってあります。

OLYMPUS DIGITAL CAMERA

左側の14個の切断していないLEDと7セグメント表示器の14個のLEDは、電気的には全く同じように直列に14個接続されたもので、Nanoの同じ端子に接続されています。

OLYMPUS DIGITAL CAMERA

全て点灯させると以下のように光ります。写真では色がわかりにくいですが、2個のシリアルLEDはNanoに近い方から末端まで同じ色に光っています。

OLYMPUS DIGITAL CAMERA

数字の4はこのように点灯します。

OLYMPUS DIGITAL CAMERA

ソフトウェア

seg[0]からseg[6]までの配列でセグメント0からセグメント6に対応させて、表示する数値によってセグメントを点灯するときはHIGH、消灯するときはLOWにします。具体的にはSeven_seg_Mask(int i)関数で、seg[0]からseg[6]まで設定します。rainbowCycle_Mask(uint8_t wait)関数はサンプルプログラムのrainbowCycle(uint8_t wait)関数をベースにseg[0]からseg[6]までのHIGH/LOWでHIGHの場合だけ点灯するように改造しました。ここで、セグメントに2個LEDを配していることに注意して、i番目のLEDのHIGH/LOWはseg[i/2]で表わしました。

rainbowCycle関数を使った色の設定と、セグメントHIGH/LOWを掛け合わせることで簡単にカラフルな数値表示を実現しています。

(2017.08.10)

Maker Faire Tokyo 2017 お立ち寄り御礼 (Thank you for coming)

180cmのテーブルいっぱいに「手作りの大型7セグメントフルカラー表示器を使った置き時計」、オガールラボでの電子工作講習会の作品紹介、キッチンスケールをハックしてArduinoとLabVIEW Home版を連携させたリアルタイム重量計測のデモを展示しました。大勢の方々に興味を持って話を聞いていただきました。ありがとうございました。

展示を見て7セグメントフルカラー表示器を作ろうと思ってくださった方が多かったと感じましたので、これまでの記事を整理して電子工作に慣れていない方でも取り組みやすいような構成でまとめたいと考えています。

オガールでの電子工作講習会に興味を持っていただいた方も多くいらっしゃいました。講習会のテキストなどダウンロードできるよう関係者と調整したいと思います。

LabVIEW Home版についても多くの方に興味を持って聞いていただきました。デモで使用したArduinoのシリアル出力を受け取るプログラムについて記事を書きたいと思っています。

Maker Faire Tokyoに海外からこられた方々にも大勢立ち寄っていただきました。ありがとうございます。現物があり、同じ興味を持っている方々でしたから、なんとか内容を伝えることができたのではないかと思います。ほぼ同じ構成で時計を作ったばかりだという方もいて、Web上では何人かの方がシリアルLEDで大型表示器を作られていることは把握していましたが、直接会話ができてとても楽しく感じられました。

At my booth I did the following three types of exhibits at 180 cm wide tables.
(1) Clock using a handmade large 7-segment full color display
(2) Works of electronic work seminar at OGAL Lab
(3) Real time weight measurement created with Arduino and LabVIEW Home version by hacking the kitchen scale
Thank you for seeing a lot of people interested.

I felt that there were more people who thought about making a 7-segment full color display by looking at the exhibition. I plan to write a new article so that even those who are not familiar with electronic work can easily deal with it.

Many people were interested in electronic workshops at OGAL Lab. I would like to be able to download the materials of the course.

Many people were also interested in LabVIEW Home edition. I’d like to write an article about the program that receives the Arduino serial output used in the demo.

People from overseas also came. Thank you very much. I think that I was able to communicate the contents somehow because it was people who have the same interest in front of the work. I was able to talk with someone who was just about making the clock with almost the same composition and felt it was fun.

 

キッチンスケールをHackして デジタル出力の秤を作ろう

MFT2017でデモしたLabVIEWプログラムやスケッチは以下のURLからダウンロードできます。

北東北LabVIEWユーザー会
https://forums.ni.com/t5/北東北-LabVIEWユーザー会/メイカーフェア東京2017でのLabVIEW-Home版のデモの紹介/gpm-p/3674153

 

測定結果が保存できる秤が欲しかったので、市販のキッチンスケールのセンサー(ロードセル)と筐体を利用して作成しました。
シリアル通信で測定結果をPCに伝えますが、PC側のソフトウェアとしてLabVIEW Home Editionを使うとメーターやグラフやデータ保存などのプログラムが簡単なので紹介します。

ロードセル用アンプHX711は小型でデジタルインターフェースなのでロードセルの直近に配置できます。Amzonで150円ぐらいで購入できます。ライブラリも幾つか提供されていますが、スケッチのコメントに書いたライブラリを使いました。

Macで使っていてノイズが少なくて安定していたのですが、Windows PCに置き換えたところノイズが目立ちました。Windows PCではUSBから取っているNanoの5Vがやや高めになっているのが気になって、HX711を3.3V駆動に変えたらOKになりました。

Arduino用スケッチ

 

NI LabVIEW Home Editionは秋月で購入できるようになりました。

LabVIEWプログラム

Maker Faire Tokyo 2017に持っていきます。

手作りの大型7セグメントフルカラー表示器を使った置き時計

夜中に目が覚めた時、もう一寝入りするか、そろそろ起きるか、知りたくなりますね。身動きせずにねぼけた目を開けるだけで時刻がわかる大きなデジタル時計が欲しいと思いました。日中は明るくカラフルで楽しい表示でも、暗くなったらまぶしくない明るさで落ち着いた色で表示してくれる時計があったらいいですね。

アナログの掛け時計は秒まで合っていなくとも気になりませんし、数分違っていてもそのまま放置している人が多いと思います。時刻表示がついている家電製品は身の回りにたくさんありますが、多少時刻がずれていても気にならないものです。でも、大きくて目立つデジタル時計の場合は分単位でキビキビ生活している人でなくとも、テレビの時報や朝の時刻表示とずれていると残念な気持ちになるでしょう。

さて、一般的には数字を表示する方法として7セグメントLEDが使われています。大きな7セグメントLEDも販売されていますが単色でしか光らず高価ですので、手作りで大きな7セグメントLEDを作ってみようというのが私の提案です。
普通のRGBフルカラーLED(例えばOSTA5131A-R/PG/B)を制御するには3本のPWM出力が必要です。1桁分に7個のRGBフルカラーLEDを使うと21本のPWM出力ですから電気回路が大変になります。そこでLEDに制御用マイコンが入っているフルカラーシリアルLEDテープを使用します。NeoPixel Digital RGB LED StripとかWS2812B led strip lightとか色々な名前で販売されています。1セグメントに2個*7セグメント*4桁=56個のLEDを使うと、価格は、例えばスイッチサイエンスで購入したとすると、3000円ぐらいです。AliExpressをうまく使えれば1/5ぐらいの値段で手に入ります。

置き時計のアバウトな仕様
・数字は縦10cmぐらいの大きさ
・時分だけ表示(時刻合わせは秒まで)する
・環境光により夜昼モード切り替えできる
・インターネットや電波(標準電波、GPS)がいらない
・USB給電

ハードウェア
・Arduino (Nano互換機)
(Amazon)HiLetgo Nano V3.0 (380円@170705)
・バッテリーバックアップ付きリアルタイムクロック (DS3231)
(Amazon)HiLetgo DS3231時計モジュール (210円@170705)
・照度センサーと抵抗(22kΩ)
(秋月)照度センサ NJL7502L (100円/2個)
・フルカラーシリアルLEDテープ
・タクトスイッチ2個

配線
Arduino Nano
D2————-Rボタン(他端はGND)
D3————-Lボタン(他端はGND)
D7————-SerialLED信号
5V————-VCC(SerialLED)
GND————-GND(SerialLED)
A0————-NJL7502L(短い足)と抵抗(22kΩ)を通してGND
5V————-NJL7502L(長い足)
A4————-SDA(DS3231モジュール)
A5————-SCL(DS3231モジュール)
5V————-VCC(DS3231モジュール)
GND————-GND(DS3231モジュール)

ソフトウェア
– – – – メイカーフェア東京2017で使用したスケッチ(SimpleClock31)
昼夜モードの判断は照度センサの値を10回測定した平均値で行って、閾値付近でモードの切り替えが頻繁に発生することを防止しています。昼はカラフルなrainbowCycleをベースにしました。rainbowCycleは明度が一定で色相が360度回転する関数でAdafruit_NeoPixelライブラリのサンプルスケッチのstrandtest内で使われています。夜は明度を落としてオレンジ色の光で表示します。

どちらのモードでも時刻の取得、時刻設定ボタンの状態チェック、56個のLEDの点灯設定、点灯、待機(delay)を繰り返します。時刻の取得はRTCライブラリの関数で現在の時刻を調べて、表示している時分と異なる場合は4桁の数値の更新と全てのLEDについて1(ON)か0(OFF)か配列に書き込みます。時刻設定ボタンの状態チェックで、両方のボタンが一定時間押されていれば時刻合わせモードに入ります。

時計合わせがプログラムの半分ぐらいを占めていますのでフローチャートを書いてみました。

(170811)

Makers Faire Tokyo 2017に出展します

8月5日、6日に東京ビックサイトで開催されるMakers Faire Tokyo 2017に出展できることになりました。

私のブースのメインの展示品は「手作りの大型7セグメントフルカラー表示器を使った置き時計」です。

デジタルクロック(RTC:DS3231版)の記事から若干の変更を行いました。1セグメントに1個だったLEDを、1セグメントに2個に増やして視認性を向上しました。LEDの配線が大変な手間でしたので、CNCルーターでプリント基板を作成してハンダ付けを楽にして、信頼性も少しだけ向上したと思います。プログラムも変更が必要でしたので別の記事としてアップしたいと思います。

(2017.06.26)

 

デジタルクロック(RTC:DS3231版)

リアルタイムクロックDS3231を使用したデジタル壁時計を作成します。

DS3231

 

 

Arduino Nano
OLYMPUS DIGITAL CAMERA

 

使う主な部品
Arduino Nano互換機DS3231シリアルRGB LEDで作成した時計表示板照度センサー押しボタンスイッチ2個、22kΩ抵抗1本(照度センサー用)

購入したRTC基板はコイン型リチウムイオン電池(LIR2032)の充電回路が組まれているのですが、購入時に入っているのは充電できないCR2032なので私は充電のパターンをカッターでカットしました。

機能の説明
GPSやNTPサーバーの正確な時計に定期的にアクセスすれば、手動で時刻合わせをする必要がありません。市販の時計のようにボタンで時刻を合わせるのはプログラムを考えるのが大変なので避けてきたのです。以前使ったリアルタイムクロック(RTC)DS1302はひどく精度が悪くて一晩で数分ずれていましたので、RTCは諦めてGPSに頼り切った方が楽だなと考えていました。GPSでも我が家のような木造で窓際ならば問題ありませんが、ビルの中でも使えるかというとさすがに無理な場面も出てくるでしょう。

そんなことを考えながらDS1302よりも高精度と言われているDS3231を試しに購入したところ、カタログ性能は文句のつけようもなく良くて、数日使ってもDS1302とは比べ物にならないほど正確に時を刻んでいます。

しょうがないのでボタン2個で時刻を合わせるプログラムを書くことにしました。ついでに機能も追加して時計としての魅力をUPさせました。部屋の明るさを照度センサーで検知して、暗い時には明かりを抑えたナイトモード、明るい時には華やかなフルカラーモードにしました。表示した数字の色が徐々に変化するようにプログラムしたのですが、AdafruitのシリアルLEDのデモプログラムのRainbowに数字表示のマスクをかけて比較的シンプルに実現させました。アナログの壁時計なら数分ずれていても許せるのですが、デジタルの場合は、朝のテレビ画面の隅で表示している時刻とつい比べてしまうので、秒の表示は無くても同じタイミングで切り替わって欲しいものだと感じます。数字の色の変化はゆっくりなので、時刻表示が切り替わる時にはR→G→Bでフラッシュしてちょっと注意を引くような小細工も入れました。

ボタン2個の同時押しで、時刻合わせモードに入ります。モードが変わったことが直感的に分かるように時刻合わせモードの時は緑です。時→分→秒の順でセットするのですが、ボタンを押さずにいると自動的に時刻合わせモードから抜けます。

時刻合わせモードに入ると”時”だけを緑色で表示します。右ボタンで1アップ、左ボタンで1ダウンします。”時”が合わせ終わったら、ボタン2個の同時押しで、”分”だけを表示します。アップダウンは同様ですが、PCなどの秒まで分かる正確な画面を見て1分先に合わせます。設定したら2個の同時押しで、時分を表示します。PCの秒表示が”00″になる時にどれかボタンを押すとPCの時刻と運動神経レベルで一致させることができます。

回路図
Eagleを勉強中なのでそのうち練習を兼ねて書こうと思います。
照度センサーの短い足を22kΩの抵抗でGNDに落としています。長い足は5Vです。短い足の電圧をA0ピンで測定します。LEDの信号はD7、スイッチはD2とD3、RTCのSDAがA4でSCLがA5です。

プログラム
RTCのライブラリはRTClibを使いました。半分以上は時刻合わせのために書かれています。rainbowCycle()とnightClock()が通常の時計機能でリストの下の端に書かれています。大部分の時間それらの関数の中で動作しているので、時刻合わせモードに入る関数wantAdjust()はそれらの関数の中に置かれていて、”2個の同時押し”を検知するとadjustClock()に入って時刻合わせが始まります。
表示に関してはint ledClock[28]とint ledMask[28]でLEDのON/OFFを行っているので比較的シンプルにできているのではないかと思います。

 

(2017.03.30)

 

「おしゃべり伝言パック」を組み立てる会(2017年2月18日)

— 難しいことは置いといて、電子工作を始めよう —
電子工作 冬のイベント(2月18日土曜日)@オガール2階
<<事前申し込みが必要です。>>
オガールのITサポートまで直接申し込みに来ていただくか、下記までメールをお願いします。
info@go-forward-japan.org
会費は1000円の予定です。出来上がった「おしゃべり伝言パック」は持ち帰って活用してください。

ベースはサウンドボトルです。マイクを取り外すのは難しいのでパックを開けて録音します。

サウンドボトルの記事と重複しますが、部品リストを書いておきます。
ISD1820 音声録音再生モジュール
Arduino Nano互換機
超音波距離センサー
USBポート付き充電用電池ボックス(100円ショップのCan Do(キャンドゥ))
USB(Mini-B)ケーブル
ブレッドボード
ワイヤー、ピン、ランチパック
中国直送は春節の影響なのか軒並み在庫なしの表示(170125現在)です。私が注文した分は発送済みなので来週届く予定です、多分。

ランチパックにしたのは中の構造が見えると楽しい気がするからです。加工が楽で値段が安くて言うことなしです。

組み立て終わって一通り楽しんだら、レーザーカッターでケースを自作する楽しみも残してあります。ケースはスピーカーボックスを兼ねますから私はバスレフ型を考えたいなと思っています。

Digital Wall Clock (1st trial)

寝室用に明るさを抑えた壁掛けデジタル時計を作りました。

ESP8266(ESPr Developer)でRTCから時刻を読んで、7セグメント表示器風にフルカラーLEDを28個配置して時刻を表示します。せっかくのフルカラーLEDなのでランダムに表示の色を変更します。1日1回NTPサーバーにアクセスして時刻を校正します。照度センサーで室内の明るさをモニターして暗くなったらLEDも暗くします。

ESP8266は時分の表示が終わると、電力削減のため50秒間Deepsleepします。NTPサーバーにアクセスする直前はWiFi ONで起動し、それ以外はWiFi OFFで起動します。

LEDの信号線は15ピン、照度センサーは20kΩと10kΩで分圧してTOUTピン、RTC(DS1302)は3ワイヤーという通信なので CLKを12ピン、DATを13ピン、RSTを14ピンに接続しました。Deepsleep後の起動用に16ピンをRESETに接続します。

筐体は5mm厚のMDFをレーザーカッターで切り抜きます。セグメントの中央にLEDを配置して表面に経木(紙のように薄い板)を貼りました。セグメント内での光の均一性にもう一工夫必要です。

 

 

2017.1.21

5V駆動のステッピングモーターを試す

28BYJ48 DC 5V 4-フェーズ5線式ステッピングモータとULN2003ドライバボード
これも去年の春に購入したまま眠っていたパーツです。中国直送で200円前後で購入できます。

便利なライブラリを見つけて動かしてみたという段階です。通常のstepperライブラリではなく、AccelStepperというライブラリを使うことでハーフステップで滑らかに駆動することができます。28BYJ-48モーターでの使い方は42Botsの記事に従いました。

回転数は1000pps(およそ15rpm)が上限で、それ以上はトルクが小さくなり指でシャフトをつまむと止まってしまいます。