LabVIEWでミニCNCフライスを制御して測定治具にする方法

部品の検査で複数箇所の寸法を測定するときに、3軸ステージにセンサーを載せてセンサーを移動させて測定する場合がよくあります。安価なCNCフライス組み立てキット(送料込みで$220)を見ていると、まさに3軸ステージです。測定をLabVIEWで行うとするとCNCフライスもLabVIEWで制御した方が治具としては効率的に運用できるはずです。

OLYMPUS DIGITAL CAMERA

このCNCフライスはGrblという制御用ファームウェアでG-codeを受けてステッピングモーターのパルスと主軸用PWMを生成しています。そしてGrblはAtmega328pチップを使用するArduinoボードに書き込めるオープンソースのファームウェアなのです。CNCキットを使わない場合でも、パルスモーターを使った計測治具をArduinoとGrblを使ってLabVIEWで制御したら簡単で便利です。

さて、G-codeは3軸から6軸のCNC工作機械に使用される数値制御用プログラム言語です。NISTのG-code標準書「The NIST RS274NGC Interpreter」はありますが、メーカー毎の独自規格が用いられているようです。Grblの開発は「LinuxCNC」を参考に進められているとのことですから、Grblで使用するG-codeについてはGrblの資料とLinuxCNCがレファレンスになります。

G-codeはコマンドとパラメータを行単位で記述して機械の動作を指示します。
例えば、「G1 X30.0 Y10.0 F250」は、250という速度(F250)で、XY座標の(30.0, 10.0)まで直線的に移動(G1)するという指示です。mmやinchなどの単位系の指定や絶対座標あるいは相対座標などの座標系の選択は事前に指示されているものが使われます。

G-codeプログラムは、一連の動作をG-codeで記述したものをテキストファイルで保存します。PCからG-codeプログラムをGrblなどのファームウェアに送るアプリケーションをG-code Senderといいます。Grblで使えるG-code Senderとしては[bCNC]や[Universal G-code Sender]など多くの種類があります。フライスの軌跡表示、ボタンによるマニュアル移動、先読みバッファへの効率的なコマンド発信など機能が充実しています。LabVIEWでG-code Senderを作成する意味合いは、G-codeとGrblを使った簡便で安価な位置制御と計測とを統合することにあります。

生産者・消費者デザインパターンで、UIイベントループ、G-code送信&レスポンス受信ループを作成し、さらに測定ルーチン用にループを追加しました。G-codeではカッコ内はコメントとして受け取られるので、UIイベントループから”(measure)”を送信することで測定用のキューを生成し、測定ループの動作タイミングを作り出しています。

測定のための動作例を紹介します。ワーク座標の原点(0,0,0)に移動し、3秒待機した後、250の速度で(20,20,0)に直線補完で移動します。0.5秒待機し、(Measure)というコメントを受けます。LabVIEWプログラムでは(Measure)をトリガーにして測定を行います。測定に要する3秒待機した後、原点に戻ります。

 

GrblはAtmega328pチップを使用するArduinoボード(Uno, Duemilanove, Nano, Micro, etc)で動作します。ArduinoのSketchではありませんが、ブートローダ領域を残したまま書き込むことができるとのことです。GitHub-gnea/grblからZipファイルをダウンロードしてArduino IDEにライブラリとして追加します。サンプルフォルダにある「grblUpload.ino」を開いて「マイコンボードに書き込む」ボタンを押すと書き込まれてGrblが動き出します。

UNOの場合のピン配置は次のようになっています。
D2/D5:X軸Step Pulse / X軸Direction
D3/D6:Y軸Step Pulse / Y軸Direction
D4/D7:Z軸Step Pulse / Z軸Direction
D8:Stepper Enable/Disable
D9:X軸Limit SW
D10:Y軸Limit SW
D11:主軸PWM
D12:Z軸Limit SW
D13:主軸回転Direction

A0:Reset/Abort (DI Pullup)
A1:Feed hold (DI Pullup)
A2:Cycle Start/Resume (DI Pullup)
A3:Coolant Enable
A4:(NotUsed/Reserved)
A5:Probe

AVRチップの優れた機能を駆使して精密なタイミングと非同期の動作を実現し、30kHzまでジッターなしで制御できているとのことです。

Grblではパルスモーターなどハードウェアに関連するパラメータを$xxx変数としてEEPROM領域に記憶します。実際にX軸のStep Pulse(D2)の出力をオシロスコープで測定してみました。

パルス幅($0): 10μsec
step/mm($100): 250steps/mm
F(Feed Rate): 500mm/min
等速移動の周波数: 2.1kHz

パルス幅($0): 10μsec
step/mm($100): 250steps/mm
F(Feed Rate): 10000mm/min
等速移動の周波数: 41.5kHz

 

lv-G-SenderはLabVIEW2014以降で動作します。ダウンロードはここから。CNCが手元に無くとも、Arduino UNOと2相4線のパルスモーターとPulse/Direction入力のドライバーがあれば楽しむことができるのではないかと思います。

上記内容は10月25日のNIDays2017の会場の片隅で行われるユーザー会で紹介する予定です。

<<コメントはスパムがひどいため受け付けないようにしています。トップ画面の下の方に連絡先のメールアドレスがありますのでご連絡ください。スパムでなければメールは大歓迎です。>>

(2017.10.11)

赤外線温度計を作ろう

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

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