2018年1月23日火曜日

ArduinoでSD記録ロガーを作ってみよう

井戸ポンプ用制御回路をArduinoで作りましたが動作状況は次のように確認できます。
1.本体のLED
2.Bluetoothで測定温度と10秒間平均値をモニター
リアルタイムでの確認の他にはBluetooth経由でタブレットに記録を残すことはできます。

一日の動作状況を確認したいのでSDメモリーにログが残るようにしたいと思います。
今使用しているArduino_pro_minのプログラムメモリーは十分な記憶容量が残っているので、機能を追加する事にします。

Arduinoにはタイマー機能がないので外部RTCと記録用のSDアダプタをamazonで手に入れました。
(ブレッドボードで試作し動作確認を行っています)
右から、Arduino_Nano、RTC(DS3231)、SD、真ん中手前がレベル変換器
電源はPCのUSBから供給しています。


後はArduino_IDEのライブラリーからRTCとSDのスケッチを参考にして作成するだけ。
(合体するだけです。ははは・・)

RTC用スケッチの改造点はRTCの年~秒のデータをシリアルポートに垂れ流しているのを一つの文字列に合体してからシリアルポートに出力することです。
SD用のスケッチからライブラリーとファイルオープン・クローズ関係の記述をRTC用スケッチに移植します。SDへの記録データは先に作った文字列をそのまま使用しました。
実験なので途中で電源を切ってもデータが確実に残るよう、データ1個毎にファイルのオープン・クローズを行っています。
delayを1000mSとしているのでファイル処理の時間分の遅れが蓄積し7~8秒に1回取りこぼしが発生しています。


参考にさせていただいたのは↓です。ありがとうございました。
   https://ht-deko.com/arduino/rtc_ds3231.html
   https://qiita.com/hikoalpha/items/c7812a34182db07036ef

メモ
#include <DS3231.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
File myFile;
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
byte year, month, date, DoW, hour, minute, second;
int temperature;
int das[10];
char* dat[]={"-","-"," ",":",":"," "," "};
void setup() {
Wire.begin();
Serial.begin(9600);
   while (!Serial) {
    ;
   }
   Serial.print("Initializing SD card...");
   if (!SD.begin(4)) {
     Serial.println("initialization failed!");
     return;
     }
   Serial.println("initialization done.");
}
void ReadDS3231()
{
  das[5]=Clock.getSecond();
  das[4]=Clock.getMinute();
  das[3]=Clock.getHour(h12, PM);
  das[2]=Clock.getDate();
  das[1]=Clock.getMonth(Century);
  das[0]=Clock.getYear();
  das[6]=Clock.getTemperature();
}
void loop() {
  myFile = SD.open("test.txt", FILE_WRITE);
  ReadDS3231();
  String tes="20";
  for (int i=0;i<=6;i++){
  if (das[i]<10){tes.concat("0");}
  tes.concat(das[i]); tes.concat(dat[i]);
  }
  Serial.println(tes);
  myFile.println(tes);
  delay(1000);
  myFile.close();
}


2018年1月16日火曜日

5vと3.3vの電圧レベル変換

arduinoでSDカードの使用にはarduinoの信号(5V)とSDカードの信号(3.3V)を接続するためのレベル変換器が必要となります。方法としては5V側の送り信号を抵抗により分圧、3.3V側の送り信号はそのまま接続すればOKの様です。
そのほかにはレベル変換用の専用ICが有るようなので今後の事も考えレベル変換器を購入することにしました。

amazonでチェックすると4回路の物が260円で有ったので3個ほど購入し使ってみるとこれが動かない。3個ともダメなので別に購入した物を使うと正常動作でするので原因の調査を行うことに。
【赤=正常動作   青=不良】

5Vの信号として10MHzのVXOCを分周したTTL信号をレベル変換器に入力して動作チェック。結果は3.3Vに変換されるがオーバーシュートで5Vがおよそ1μS出力されていました。これではSDカード側が壊れてしまいます。


正常動作するレベル変換器ではしっかり3.3Vに変換されており、オーバーシュート・アンダーシュートはほとんど有りませんでした。


amazonの出品者に連絡を取ると返金処理していただけるとの事で良かったです。
今回の物は中国からの国際便で届きましたので中華製と思われますが、安くて良い物も在りますが玉石混同だなと思います。でもトラブル対応が非常に良かったのは救いですね。

2018年1月7日日曜日

井戸ポンプの制御とarduinoについて(2)

正月のうちに井戸ポンプの制御装置をほぼ完成させました。
駐車場の融雪用なので、気温に合わせた動きとした。基本的に雪は気温が3℃以下となった場合に降るそうなので3℃以下で動作するようにしています。
こんな感じです。
 1.3.0℃以上  不動作
 2.1.5~3.0℃ 5分間動作後に5分間停止
 3.1.5℃以下  連続動作
 4.手動でON-OFF操作可能
 1.5℃以下で連続動作としたのは散水パイプの凍結防止のためです。

 ポンプ制御装置は屋外に置くのでケースには防水が必要ですが簡単に作ってみました。
 材料は100均(セリア)で購入しました。黒い蓋付きボックスです。真ん中のLEDが赤く光っている箱と2種類を手に入れました。
         

arduinoを入れている蓋つき箱で、温度によってLEDが点灯します。
【左から青:1.5℃以下、緑:1.5~3℃、赤:3℃以上】

arduino_pro_miniがユニバーサル基盤上のコネクタに実装されています。
基盤にはarduinoのコネクタとLED点灯用の抵抗他が少々付いているだけです。

初代のセンサーです。LM-35とLM358を使って1℃当たり100mVとしています。この後、LM-35の取付方を変更しています。

井戸ポンプの電源入切の制御です。秋月の半導体リレー(20A)を使っています。負荷がモーターなのでゼロクロス・コントロール出来る所が気に入りました。
タッパーを加工して実装しました。絶縁重視です。

全部箱に入れたところです。

手前にarduinoの箱がありますが、その左側にオレンジ色のコードで温度センサーが繋がっています。
AC100Vを内蔵のコンセント(2個口)でポンプ用プラグとACアダプタを接続しています。
ここで問題が発生。半導体リレーの電圧降下分が熱となりほんのりと温かくなり、結果してケース自体が暖めれて温度センサーに影響が出るようでした。このためLM-35の取付方を工夫しケースの外に出しました。

だいたい上手く動いておりますが、この後、ソフトを改良し遊んでおります。
現在は温度検出を1秒間に1回実施し10回の平均値で動作を決める様にしています。また、1秒ごとの温度検出結果と平均をタブレットでモニターできるようにしています。
(Bluetooth経由です)

2018年1月4日木曜日

タブレット(LAVIE Tab)の電源が入らなくなったが・・・後に復活(修理)

 arduinoにはまり井戸ポンプ制御回路の動作確認を屋外で実施するため、久々にLAVIE_Tabを使おうと思い電源を入れたら全然起動しない。
 多分長期に渡り電源を入れていなかったのでバッテリーが完全放電したのだと思われる。
 一晩充電し再度起動してみたが反応が無い。少々焦り、ネットで再起動方法の情報検索をしたがLAVIE_Tabについては見つけられなかった。
 ASUSのTabと同じように色々とスイッチを操作したりリセットをかけても全然起動できなくあきらめ掛けた。(ここまで3日)

 最後は壊しても良いと思いつつ裏蓋を開けてバッテリーを一旦取り外し基盤の完全リセットを行う事とした。
 Tabを観察し蓋の外し方を考えた。
 USB端子やwindowsのスイッチがある黒い部分を基準にして、裏蓋に力を入れ後ろへズラスすと少し隙間ができたので、隙間に爪を入れユックリと本体-裏蓋を分離していくときれいに外れた。

 本体の裏に薄いバッテリーユニットが確認でき、基盤へ電池パックを接続するコネクタも発見した。
 コネクタは基板から浮かすように基盤側から爪で上に上げるとスルリと外れた。この状態で1~2分放置し再度コネクタを接続した。


 ドキドキしながら電源SWを入れたが反応が無い。やっぱり駄目かと諦め悔しさ紛れに電源スイッチを数回乱打したら画面にNECのロゴが出てビックリ。


 その後、サインイン画面に移行し無事起動できた。
 ちなみにバッテリーの充電状況は80%でした。(起動できるだけ充電しているのになぜ?起動しない?)
 レジューム状態でバッテリーが完全放電したので通常のリセットでは起動できなかったのかな?

 結果して多分ラッキーで復活したのだと思う。参考にされる場合は自己責任で行ってください。

 早速arduino_IDE_1.85を入れて使ってみよう。




2017年12月23日土曜日

井戸ポンプの制御とarduinoについて

雪国の我が家は降雪期の除雪が大問題となる。
降り積もった雪を除雪するのだが年々雪を捨てる場所が無くなっている。
そこで敷地内に積もった雪は井戸水で消雪しているが、ポンプを動かす電気代も馬鹿にならない。
今は、日中の温度が2~3度を超える時はタイマーを使って15分間隔で運転・停止を繰り返し23時~7時は連続運転とし、2度以下の場合は融雪水が凍結するのを防ぐため連続運転としている。
以上を全て人手で行っていたが今年からある程度自動化することとしてシステムを考え、amazonで中華製の温度センサーを購入してハードウエア構成を設計していたが、ふとした機会にarduinoを知った。
これを詳しく調べてみるとBASICと同様なプログラムが組めI/Oも充実しているのにトテモ安い!。
今回は勉強も含めarduinoを使ってみることにした。

最初はamazonでKUMANkitsを購入した。これはarduinoを勉強するに当たり本体と周辺部品+プログラムが含まれているので実習するのにピッタリでした。
(しかも安い)

サンプルプログラムをBASICを比較して違いを把握・互換することで何とか成ることが分かり自信がつきました。
kitsにはarduino-unoが入っていましたが、井戸ポンプ制御用には別の物を手配、価格が安いことから予備と称し数種類手に入れました。
arduino-UNO
arduino-NANO
arduino-pro-min


作業手順や流れは以下のとおり
1.PCにインストールしたarduino-IDEでプログラム作成
2.arduino-UNOでハード試作
3.arduino-UNOにプログラム転送
4.動作検証が
5.PCでプログラムデバック⇒2に戻る


井戸ポンプ制御システム製作紹介(まだ途中)
1.温度センサー(LM-35を使用)
 LM-35は0℃で0mV、以後1度上昇する毎に出力電圧が10mV上昇する(10℃で100mV)
 井戸ポンプは0~3℃で制御するので0~30mVでの制御となるが、aduinoのアナログ入力分解能は5Vで1024bit、つまり5V/1024bit⇒4.88mV/bit
(2bit/℃)のため3℃で約6bitと何かノイズレベルでの制御となってしまう。
 そこでOPE-AMPを使ってLM-35の出力を10倍にしてaruduinoに入力した。これで分解能が20bit/℃となり0.05℃/bitとなる

2.aduino
 価格が安く小型のarduino-pro-minを使った(1個279円)
 これはNANOのUSBインターフェースを省いた物とのこと。USB/シリアルアダプタが在ればUNOやNANOと同様に通信できるそうである。
 いざUNOで検証したプログラムをminにインストールして動作検証し同様に動作することを確認。次にバージョンアップした物をminに書き込みしようとしたら受け付けない?何度やっても駄目。
 頭が???と成ったが別のminで試したら異常なし。最初の物は壊れたと思っていたら、別の方も2回目から書き込みができなくなった。

 これは何かあると思いがネットで調べたら儀式?が必要とのこと。【以下自分用メモ】
 a.arduino-minの本体のリセットスイッチを押しっぱなしとする。
 b.PCからIDEで書き込み開始。
 c.USB/シリアルインターフェースの送信ランプが点滅したらリセットスイッチを離す。
 d.書き込み開始しとなり正常終了となる。

 以上の手順でプログラム書き換えができました。
 不便と感じるかと思いますが、arduinoを実機に組み込んだ後は悪意あるイジクリを防止する為にも安易にプログラム変更を不可能としていることは とても有効な事と思います。
 そもそもminは組込み用で1度プログラムをインストールしたら二度と書き換える事は無いかもしれません。
 
 

2017年8月4日金曜日

ノートPCのHDD交換(HDDクーロン、コピー)

最近普段使いのノートPC(acer)から起動時やレジュームからの復活時に「ガチャラッ!!」と異音がする。
このPCはもう5年以上使っているのでハードディスクが弱っているようだ。
このままだとハードディスク(HDD)が壊れて使えなくなりそうなので交換することにした。

今までもパソコンのHDD交換は何度も行っていたのだが、SATAタイプのHDDは初めて。
ノートPC内蔵のHDDは2.5インチ500GB_SATA。
過去に行ったHDDのコピーはIDE接続、SATA用は持っていない。

PCのHDD交換で一番簡単なのは、HDDを交換してからリカバリーDVDにより初期状態に戻すことだが、再度各種プログラム等をインストールする手間が掛かる。
また、現在のOSはwindows7だが、一度windows10にしてから7に戻しており、何時でもアップグレード可能な状態がパーになってしまう。

今のHDDをOSを含めクーロンすれば良いのだが、これが難しい。
ノートPCなのでクーロン先のHDDをUSB接続しての作業だとOSのブートが上手く行かない。
HDDコピーソフトにも「OSを含めたコピーは直接接続(IDE,SATA)してください」とか小さく書いて有る場合もある。

過去に行ったHDDのコピーはディスクトップPCを使ってIDE接続して行っていた。
ノートPCの場合は内部のSATAへ接続することが難しい。

いづれSATAをUSBで接続するしかないので「USB-SATA」アダプタをネットで検索すると、gureenhouseの物が良いとの記事があった。
amazonで物を探すと「sanwa supply」の「SATA_HDD/SSD⇒USB3.0」が目に留まった。

このアダプタ単体でHDDをコピー(クーロン)する事が出来るというのだ。
使い方もHDDを新旧接続しスタートボタンを押すだけと超簡単。本当?と思うほど。

上手く以下なくてもSATA-USB3.0のアダプタとして使えそうなので、これに決めamazonへ発注。(3k円)
ついでにHDDもTOSHIBAの1TB/5400rpmを購入した。(6k円)

2日後宅配で届いたので早速作業

1.ノートPCからHDDを外す。
(1)PCをシャットダウン
(2)電源アダプタとバッテリーを外す

(3)裏蓋のネジ2本を外し裏蓋を外す(結構力が要る)

(4)HDDマウンタのネジ1本を外す
(5)HDDを左側にスライドさせコネクタより分離する

(6)HDDマウンタの突起がPC本体に引っかからない位置から取り外す
(7)HDDマウンタからHDD固定ネジを外してHDD単体となる。

2.HDDのコピー
(1)SATAアダプタの左側にコピー元HDD,右側に新HDDを接続
(2)SATAアダプタに電源アダプタを接続し本体の電源を入れる
(3)SATAアダプタ本体のコピー開始スイッチをダブルクリックするとスタートする
(4)アダプターのインジケーターの左端が緑にフリッカーし開始したことがわかる

(5)80Gあたり50分との事なので完了まで7時間位掛かる模様。進行により緑インジケーターが増えていく。
(6)完了すると緑インジケーターが消灯する

(7)本体電源スイッチを切り、HDDを外して完了。

3.クーロンHDDをノートPCへ接続
 1.の逆の手順で元に戻す。

作業が完了してノートPCの電源を入れると何時もと同様に起動した。
本当に簡単で時間が掛からなかった。

今までは結構トラブルが有って何回かやり直したり、ブート出来なくなったりしてトホホな状態に陥ったりもしたのだが(それが楽しかったのもある?)
新HDDは1TBだが、コピーした状態では500GBと表示される。残り500GBは別のパーティーションとして再設定する必要がある。

手間隙を考えれば今回使用したSATA-USBアダプタはとても安い買物でした。
でも、次に使うことはしばらく無いだろうな。

2016年12月11日日曜日

ICF-9740の修理(チューニング周りの修理)

SONY製のラジオICF-9740を手に入れた。

 自宅で物を作ったり寛いで居る時はもっぱらラジオを聞いている。
 オークションで気になっていて、ネットで調べたら感度が良くスピーカーも16cmと大きいので音質が良いそうである。
 従って人気が有り、程度が良いものは結構高値のようだ。なんたってケースが木製なので湿気や水濡れ等で木が腐っている物の出品がある。

 今回手に入れた物は、ケースは綺麗だがチューニングが動かなくジャンク品で出品されていた。予想ではチューニングの糸が何処かに引っかかっていると思われた。もしくは、誰かが手を加えて壊したか。

 現物が届き外観を確認したら、とても綺麗であった。チューニングと音量、音質のツマミに若干の発錆が有ったが綺麗に除去できるレベルでした。


 内部確認のため裏蓋ネジを外したが今までに開けた跡が無かった。

  基板を外してチューニングの糸を見たら、ダイヤル軸のギヤに糸が噛み込んで巻き付いている。何らかの拍子に糸を噛み込み無理して回した様な感じでした。

 下部に2個プーリーが有るが糸が外れた状態だったので、プーリーに糸を掛けダイヤル軸の糸も掛け直したが長さが合わず上手く掛けられない。

 ネットで糸の状況が判る画像を探したが全体が見える物は無かった。ただ、周波数表示インジケーターの糸が真っ直ぐ上部に向かっていたので上部にもプーリーが有るはず。
 良く探したがプーリーが無いので、更に良く観察したらプーリーが有る位置にプラスチックが破損した様な後を見つけた。糸が噛んだ状態で無理に回したためプーリーが捥げた様だ。

 それならばラジオ内部に取れた部品が有るはずなので探したら取れた白いプリーを見つけた。プーリーの軸には折れたプラスチック軸が残っていた。


幸いなことにプーリーが内部に残っていたので本体に取り付けることに。
プーリーの内径は2mmだったので1.5mmのドリルで軸の元位置に穴を空け、2mmのネジでプーリーを固定し復旧。締めすぎるとプーリーが回転しなくなるので調整する。

糸を掛けなおした。若干の緩みがあるが調整のしようが無いのでそのままとしたが、動作に影響は無い模様。(でも、この緩みがギヤへの噛み込、故障の原因だったのかもしれません)



 糸を掛け直してから、インジケーター位置をダイヤルの10に合わせ、基板のバリコンを時計方に回しきってから基板を本体に収める。AM/FM切替,ラウドネスの切替スイッチも合わせておきます。

 基板固定をネジ4本で固定し修理完了、電源を接続し受信テストをしました。
AMはNHK第一、第二、ローカル放送等、FMも同様に受信してみて正常で有ることを確認。
周波数インジケータと実際の周波数がズレテいたのでインジケーターの位置を調整しました。
ダイヤル位置を最初に10.4位として丁度良かったです。

 修理後は居間に置いてラジオを聴いています。スピーカーが大きい・ケースが木製のためか音がすごく良く和みます。

 何か、子供の頃に床屋さんで聞いたラジオ、新聞配達の準備場所で聞いたラジオ、を思い出しました。