星は空の彼方、月よりも遠く

晴観雨作、晴れたら星空観望、降れば望遠鏡工作、永遠のビギナーを抜けられず、日々悶々としています。

カテゴリ: 工作(◯×の横好き)自作や改造

玄関先にサイクルポートを作りました。これまで20年以上自転車を雨天でも放置していたのですが、電動アシスト自転車はさすがに放置するとまずいだろうと思ってとりあえず屋根だけでもと思い、サイクルポートのキットを通販で買って組み立てることにしました。庭木が成長しているのでなかなかいい場所がなかったのですが、木を掘り起こしたり枝を切ったりして、玄関先に設置しました。支柱が片持ちなので深さ55cmまで埋めなくてはならず基礎のコンクリートは思いのほか大量に必要でした。砕石をかなり混ぜ込みましたが市販のモルタル用コンクリート150㎏近く使いました。経費は合計で8万円くらいになりました。安価にしようと思えば単管パイプでも雨よけぐらいはできるのですが、玄関先なので、見栄え重視です。
 
DSC_0490
  
DSC_0491


一番時間がかかったのは場所を決めて庭木や根を処理しながら穴を掘るところだったでしょうか。組立て自体はトータルで1日(8時間)はかからなかったと思います。
サイクルポート内に残った枝を処理しきれていないので、現状で有効面積は本来の3割減くらいです。

C11の副鏡光軸修正ネジ(その3)(2021/10/28)


前回、

http://thought-of-stars.blog.jp/archives/7363551.html
の最後で、使用感を報告すると書いておきながら、そのままになっていました。

そう、あまり使用感が良くなかったのです。

ドライバーを使うよりは良いと思ったのですが、直径12mm程度では、結構頑張って指に力を入れないと安心の閉まり具合までにはならず、最後の調整には不満でした。


そこで、いろいろとネットを見ていたところ、「★多摩の星空」様のブログに、
http://io2europa.blog.fc2.com/blog-entry-481.html

http://io2europa.blog.fc2.com/blog-entry-485.html
のような記事がありました。


副鏡支持部の化粧カバーと望遠鏡キャップの間には、隙間はほとんどないと思っていたので、思い切ってネジのつまみ部分を化粧カバーの上にはみ出させるという発想はありませんでした。まさにコロンブスの卵です。参考にさせていただくことにしました。感謝します。


この記事によれば、5mmくらいはクリアランスがあるようで、それだけあれば多少つまみがはみ出しても大丈夫そうです。


早速、手持ちの材料で試作してみました。

材料は、プリント基板の固定時のスペーサーなどに用いられる、長さ10mmのM3高ナット(長ナット?)と普通のM3ナット、そしてM3のネジ(長さ40mmmと30mm)です。その後、調整用に平ワッシャも用いました。


加工手順は以下の通りです。作業自体は1時間程度でした。

(1) 高ナットの端から2mmの位置にΦ2.5mmの穴を開けて、M3のタップを立てる。

(2) そこへ長さ40mmのM3ネジを真ん中までネジ込む。

(3) 高ナットのもともとのネジ穴へ30mmのM3ネジをネジ込んで、先の40mmのネジを固定する。なお、30mmのネジにはあらかじめ普通のナット(厚さ2mm)をつけておいて、高ナットにダブルナットで固定する。

(4) 40mmのネジの頭を金切りノコでカットする。

(5) 30mmの方は、ネジ部が約12mm残るようにカットする。(注1)

(6) 切断面等はケガしないようにヤスリで丸めておく。以上です。


DSC_0152
この調整ネジ(試作品)を、一つ一つ、今ある調整ネジと交換していきます。3つまとめて外してしまうとミラーが落ちてしまうそうです。試したことはないですがトラップですね。


DSC_0153

こんな感じです。見る角度のせいかもしれませんが、つまみ部分のネジが非対称に見えます。はみ出さないように調整が必要かもしれません。ネジがピカピカですが散乱光の影響は直接にはないはずです。回した感じはとても良く、スムースに回ります。調子に乗って締め付けすぎないように注意が必要です。この状態でキャップをして動かしてみても、擦っている感じはありませんでした。


(注1)ですが、副鏡調整ネジの取り付け部分の座繰り深さを考慮すると、もう少し長くした方が良かったようです。座繰りを考慮せず交換したら、意外と深く入ってしまい、見事に化粧カバーの「faster」のロゴの下の部分を擦ってしまいました。擦り傷が見えると思います。そこで、平ワッシャをかませて、座繰り部分より浮かせましたが、その分、ネジが入り込んでいる部分が短くなってしまいました。


最後に改めて、「★多摩の星空」様に感謝します。











温湿度ロガーその後(2021/10/06

 

温湿度ロガーについては、使用例を以下の通り報告していますが、

http://thought-of-stars.blog.jp/archives/722262.html

本体仕様については

http://thought-of-stars.blog.jp/archives/722226.html

が最後で、その後報告していませんでした。

 

その後、測定データを基に、一定湿度以上になると望遠鏡を覆ったビニール袋に乾燥空気を送って、湿度が下がったらポンプを止めるような制御をしています。

乾燥空気は、空気を送るエアチューブの途中にシリカゲル(ドライフラワー用の低湿度用、A型)を充填したペットボトルを入れて空気を乾燥させています。ペットボトルを出た直後では湿度5%くらいになっているようです。

 

エアポンプには、水槽用のものらしいモータータイプのものを用いていました。

このモーターの電源を、オープンコレクタのトランジスタ回路でON-OFF制御していましたが、最近になってノイズがひどくなり温湿度ロガーの動作に影響を及ぼすようになってしまいました。そこで、100V仕様の静かなエアポンプ(たぶんモーターではなく電磁石でダイヤフラムポンプを動かすもの)をソリッドステートリレー(SSR)でON-OFFできるように変更しました。

部品構成写真は以下の通りです。

DSC_0140

 

左上はArduino Unoの上に、データロガーシールドを載せたもので、温湿度センサー(DHT22)からのデータを読み取って、RTCから読み取った時刻データとともにSDカードに書き込んでいます。測定・制御の頻度は1分間隔にしています。

表示素子には、これまで、162行のものを用いていましたが、時刻、望遠鏡の温湿度、室内の温湿度を表示させようとすると3行は必要になるので、写真下に見えるように204行のものに変えました。このLCDモジュールは、162行のものと同じくI2Cバスで制御できるので、プログラム上の大きな変更はありません。

 

右上にあるのが、SSRモジュールです。ACコードは、延長用のものの線の片方を切断したもので、Arduino からの制御信号で、AC電源をON-OFFしています。回路的には片切りなので、感電しないように注意が必要です。AC100Vであることに対する注意は言うまでもありません。

 

以下は、2021930日の24時間の温湿度変化です。

20210930温湿度

室内湿度は5570%くらいですが、望遠鏡(赤道儀の電子回路付近)の湿度は、鋸歯状ですが2530%に保たれています。

窓を開け放って風が吹き込むせいか、室内湿度は時折小刻みに変化しています。

なお、今年は望遠鏡周辺温度が45℃近くになることもありました。例年は40℃以上になることはほとんどなかったのですが、夏の暑さは年々厳しくなってきています。原理的には温度での制御もできるので、ペルチェのようなものと組み合わせればよいのですが、かなり電力を消費するので今後の検討課題にしたいと思います。

 

 

ScanSnap S510のフィードローラーの交換(2021/07/14

 

10年以上前のスキャナを入手して使おうとしたら、変な音がして紙が送れませんでした。

ローラー部分をのぞいてみると、完全にベタベタに溶けていて、回転できない状態でした。

とりあえず、溶けた物質(固めのゴムのようなスライムのようなもの)を取り除いてみたところ、モータは回るようになりましたが、当然、紙送りエラーが出ます。

 

DSC_0053

フィードローラーだった溶けた何かをはがした状態

 

DSC_0055

新しいフィードローラーに交換した状態

 

 

 

富士通のホームページを見ても、フィードローラーの交換部品は販売されていませんでした。適当にビニールテープを巻いて代用できないかとも考えましたが、ネットで検索してみたところ、交換部品は、AliExpressでそれらしいものが売られていることと、交換手順の記事があることがわかりました。結構大変そうですが、ものは試しと挑戦してみました。

なお、主に以下の2件の記事を参考にさせていただき、交換してみました。

https://zigsow.jp/item/39393/review/238472

https://p--q.blogspot.com/2019/07/scansnap-s500.html

 

ちばとどさん様、p—g様ありがとうございました。

 

手順はわかりやすく書かれており3時間近くかかったものの特に迷うこともありませんでした。多分、2回目があれば、半分くらいの時間でできるのではないかと思いました。

 

以下、気の付いた点です。

 

・フィードローラーの入手

私は、AliExpressで購入しました。意外と早く、10日くらいで届きました。念のため、別々の2カ所から購入しましたが、見た目の色などは若干の差があるものの、触った感じ等はほぼ同じでした。値段も両方とも9ドル弱でした。耐久性の差まではわかりません。

DSC_0052

 

 

・配線・コネクター周り

コネクターは、指で配線をちょっとだけ引っ張って、コネクターに隙間ができたらマイナスドライバー(薄いもの)でゆっくりとこじ開けるようにして外しました。配線が切れると大変ですね。

組立ての時、底面の鉄板の穴にコネクターと配線をくぐらせますが、配線を十分に引き出しておかないと、配線が変なところに挟み込まれて長さが足りなくなってしまいます。しかし、無理に引っ張ると、鉄板の穴の角が切りっぱなしなので傷をつけそうですので気を使いました。

 

・プラスチック部品の取り外し

カバーなどのプラスチック部品はスナップインで固定されているので、外すときは、何カ所も同時に外さないといけないので、部品をねじるようにして変形させながら順番に外しました。ツメが折れないように気を使いました。

逆に組み立てるときは、軽く押し当てるだけでパチパチッと自動的に嵌っていく感じでした。

 

・軸とローラー

新品のローラーはゴムというには硬くて手指で挿入するのは無理でした。ラジオペンチの先を、軸をつかむ寸前の開き具合で持ち、ラジオペンチの側面でローラーを押すようにして嵌め込みました。

なお、組み立ててからではローラー位置の微調整は硬くてできないと考えたほうが良いので、軸を取り外す前に、軸のどの位置までローラーを嵌め込むのかマークをつけておいたほうが良さそうです。

 

・ベルト

うまく分解組立てをすれば、ベルトは外さないで済むのですが、うっかりギヤを落とすなどしてベルトが外れてしまうと、ベルトを通す場所がわからなくなる可能性があるので、注意が必要です。よく覚えておきましょう。

 

・フィードローラーの相手側のローラーの掃除

フィードローラーでは紙を挟んで送りますが、その時圧力をかけるために相手側の押さえのローラーが存在します。フィードローラーの軸は丁寧にベタベタを取り除きましたが、相手側の押さえのローラーにも、ベタベタがわずかに残っていました。スキャンしたところ、原稿の方にわずかにベタベタが付いていたので気が付きました。こちらもきれいにしておかないと不具合の原因になりそうです。

 

 

C11の副鏡光軸修正ねじ(その2)(2020/11/24

 

やっぱりこれで4K円近いのは苦しいので、AMAZONで、以下のようなM3のつまみタイプのナット(ロ―レットナットというようです。)を購入しました。構造的には、つまみ付きのビスのほうが簡単なはずですが、首下長さ12mmに相当するものが見当たらず、ローレットナットに適当な長さのビスを入れて、必要なら固定(ダブルナットまたは接着剤)してしまおうと思います。

 

uxcell ローレットナット サムナット M3 x 0.5mm 厚さ3.2mm メタル ニッケルメッキ 11x7mm 10個入り

価格:     525

ねじサイズ: M3 x 0.5mm.

サイズ:(全体)11x7mm ;厚さ(ローレット部): 3.2mm

材質:良質の金属製、ニッケルメッキ仕上げ、耐摩耗性および使用耐久性。

 

Amazonで注文して翌朝には着きました。早いです。


DSC_1633S

一番左が、今回購入したローレットナットで、真ん中が手持ちのM3のビスです。首下(実際のねじ部の)長さは20mm(あとで25mmに変更)くらいです。これらを組み合わせると、右のようになります。ドライバーで力いっぱい締め付けましたが、もし緩むようなら接着剤で固定しようと思います。

 

DSC_1648

(追記)ビスが20mmだと、後述のように不具合があり、実際には、25mmのビスを使い、もう一段ローレットナットを加えて、首下が12mm、ローレット部が13mmになるようにして使用しました。もちろん、ローレットナットではなく、ねじ部が12mm露出するようなスペーサになるものなら何でも構わないと思います。

 

C11の修正ねじとの交換作業は簡単にできました。

ただし、交換するねじが下になるように鏡筒を回転しながら、順番にひとつずつ交換しないと、副鏡が向こう側に倒れてしまって、ねじが届かなくなりますので注意が必要です。

 

DSC_1645

3本とも交換しました。

 

 

DSC_1646

 

横から見るとこんな感じです。最初に考えたように、ナットが一つだけだと、カバーの段差に遮られて、指でローレットを回すのが難しいです。そのため、ローレット部がカバーより少し外側に出てくるように、ビスを25㎜に交換して、ローレットナットをスペーサ代わりにしました。なお、首下部が元の12mmより長くなると、内部で副鏡セルと干渉しそうですし、つまみ部がこれ以上長くなると、鏡筒キャップ(ふた)と干渉して閉まらなくなります。25mmの長さのねじを用いて、ねじ部が12mm露出するようにスペーサを入れると大丈夫のようです。

 

DSC_1647

 

カバーより、ちょっとだけ、ローレット部が外に出ています。指でつまんで回すのに、ちょうどよい感じでした。

 

さて、実際の使用感はどうでしょう。次回報告します。

 

 

 

 

 

 

 

 

 

乾燥空気は湿った空気より重い (2020/11/20

 

先日から、C11用のロングフードを作っていましたが、プラダンでの加工・組立てはほぼ終わりました。若干、材料が足りなくて、一部、巻き数が異なりますが、たぶん差し支えないはずです。

 

次に、フード内に乾燥空気を供給して、冷却された空気(+水蒸気)が過飽和にならないようにしようと思います。

 

さて、供給する空気はフードの先端から入れるべきでしょうか。根本の方から入れるべきでしょうか。閉じた空間ならある程度時間がたてば適当に拡散するので均一化されますが、過渡的な場合、どこから供給するかによってフード内の湿度に偏りが生じますが、できれば、補正板表面に近いところの湿度が低くなってほしいのです。

 

この時、空気(気体)の重さも問題になるかもしれません。例えば、ガス漏れの時、二酸化炭素は下にたまるけれど、水素は上に逃げてしまう、というような話があります。

 

結論から先に言うと、乾燥空気は湿った空気より重いのです。ですからフードの上から乾燥空気を供給しても補正板表面まで下りてくるので大丈夫ということになります。

 

0℃、1気圧の標準状態で、体積22.4リットル中に、気体はその種類に関わらず、1mol存在することが知られています。気体分子が6.02214076×1023個あるということです。

molの窒素は約28グラム、酸素は約32グラム、水蒸気は約18グラムです。乾燥空気1molの重さは、窒素80%、酸素20%として、約28.8グラムになります。

Eq_1


一方、18℃の飽和水蒸気圧は約0.02気圧なので、この湿った空気1molの重さは約28.584グラムになります。

Eq_2


ごくわずか、乾燥空気の方が重いです。

 

とはいえ、ごくわずかですし、すぐに拡散してしまいそうなので、やはり乾燥空気はフードの根元の方から供給することにします。


C11用フードの自作(2020/11/20

 

火星を見ていてしばらくすると、補正板に夜露が着いてしまします。ドライヤーで熱風を当てて曇りを消していたのですが、そのあと、像が落ち着くまでが大変です。何のための温度順応なのだかわかりません。

ドライヤー以外の対策としては、長めのフードを付ける、熱風ではなく乾燥空気を供給するなどが考えられます。C11のように補正板がほぼむき出しの場合は、ある程度フードを延長しないと乾燥空気を供給してもあまり効果がないのではないかと思われますのでいずれにしてフードがあったほうが良いです。

 

C11用フードは、簡単な塩ビシート巻き付けタイプから、FRP製のものなど、数種類が8千円から2万円程度で市販されておりますが、簡単なものなので自作してみました。

 

材質は、扱いやすいプラダン(プラスチック段ボール?)を用いました。厚さ4㎜、1820mm×910mmの黒のポリプロピレン製です。ホームセンターで約800円でした。その他プロプロピレン用の接着剤を何本か準備しました。

 

100mmくらいに切ったプラダンを補正板のセルに数回巻き付けて取り付けたときに安定するようにします。なお、1周ごとに円周の長さが変わってくるので最終的には現物合わせで調節しました。

プラダンは、段ボールと同じように内部に波状の板が入っていますので、3本に1本程度の割合であらかじめ筋を付けておくと、巻き付けたときにスムースに鏡筒に沿って円筒状になってくれます。この筋付け作業は地味に根気がいります。

 

 

まだ接着剤の養生中なので、カラーゴム糸で固定しています。思いのほか良い感じに出来上がりました。プラダン1枚分ちょうど使い切った感じです。

フード全景1


 

C11に取り付ける方です。補強してあります。

フード基部

 

 

 

C11に取り付ける部分は、補強のほか、鏡筒取り付けレール(アリ型)のための切れ込みや、フードが傾かないようにするためのガイドなど、細かな工作もしてみました。

この部分の内径は補正板セルの外径とほぼ同じですが、セルにはねじの頭が数本出ているので、ぎゅっと押し込むことで良い具合に固定されます。

フード基部拡大

 

 

 

諸元

主鏡セル側  内径320mm、外径376mm

補正板セル側 内径360mm、外径376mm

フード全長  550mm(うち70mmは補正板セルとの重なり部分)

有効長    480mm(実際にフードが延長された長さ)

 

 

原材料費自体は2千円程度でしたが、人件費などを考えると市販品1万円は多忙な方にはリーズナブルかもしれません。


C11の副鏡光軸修正ねじ(2020/11/20)

 

C11の副鏡の光軸は毎回星像テストして調整したほうが良さそうですが、ねじの頭が小さな+ねじなので、ドライバーを差し込むのに若干苦労しています。

何気なしに協栄さんのホームページを見ていたら、交換用のツマミの大きなものが販売されていました。ただし、多くの国内ショップでは、3個一組で約3800円と高価です。幸い、手元のC11の場合はインチねじではなくメートルねじの可能性もあるようなので、ホームセンターで探せば似たようなものが見つかりそうな気がします。

 

http://www.bobsknobs.com/SCT/page25/C11.html

英文説明を読むと、メートルねじとインチねじの両方の可能性があるようです。

 

 

国内では、いくつかのショップで取り扱っているようです。

 

https://www.kyoei-osaka.jp/SHOP/bobsknobs-screws.html

 

http://kokusai-kohki.com/products/Bobknob.html

 

 

 光軸修正ねじC11用


で、C11faster用が適合するようです。






 

乾燥空気供給装置を作ってみましたが(別途後ほど報告)動かし続けると湿度が下がり過ぎることがわかりました。その上、動かしっぱなしだとすぐにシリカゲルが湿気を吸いすぎて使えなくなるので、湿度が下がったあとはエアポンプを止めていましたが、そうすると湿度が上がってしまいます。そこで、再度エアポンプのスイッチを入れるのですが、面倒くさいです。

 

前に作った温湿度ロガーですが、arduinoベースなのでデジタルポートやアナログポートがいくつもあって、いろいろな制御信号の出力も出来ます。DHT22から取得した湿度データを基に、エアポンプの電源を制御してみることにしました。

 

湿度データを読み込んだ後で、基準値と比較し、例えば、A%以上ならONB%以下ならOFFになるようにします。ABの間の場合は、結果的に履歴依存になります。

 

 最初に使用していたエアポンプがAC100V用のものだったので、ソリッドステートリレーを使ってONOFFしようかと思いましたが、ちゃんとしたケースに入れないと怖いので、DC6Vで動くエアポンプを探しました。今回使用したのは、多分、電子血圧計用の部品のようです。Amazonで売っている部品の中には仕様がよくわからないものもあり、オウンリスクになります。

 

ポンプの電圧はarduinoと同じくUSBから供給しても大丈夫と思われますが、起動時の電流負荷が大きいので、別途外部電源を用意して、ダーリントントランジスタを介して制御するようにしました。スロースタートにすれば、USB電源でも使えるかも知れませんので、RC遅延回路、または、arduinoPWM出力でのプログラムの応用を考えてみたいと思います。

 

 この制御を行って、温湿度ロガーに記録された2017816日の温湿度のグラフは以下の通りです。横軸は時刻で、縦軸は湿度(%)または気温(℃)です。望遠鏡環境の湿度が25%と30%の間で制御されている様子がわかります。

 なお、天気は小雨模様で、昼も夜も気温も湿度もほとんど変わらない1日でした。

夏なのにずっと気温が20℃台前半なのは過ごしやすいですが、晴れてほしいものです。

 

イメージ 1

 

 

温湿度の測定・記録が可能なシステムをarduinoDHT21センサーを用いて自作ましたが(https://blogs.yahoo.co.jp/thought_of_stars/18416366.html)、現在のシステムでは、センサーを2個同時に繋いで2箇所の温湿度を1分間隔(リアルタイムクロック付き)でSDカードに記録するようにしています。
測定したデータの1例を示します。これは、20170617日の1日分のグラフです。
 
イメージ 1

 
当ブログにもありますように(https://blogs.yahoo.co.jp/thought_of_stars/18530645.html)、この日は、朝4時ころ月や金星の撮影をしており、その時に一度赤道儀のビニールカバーを外して大気に開放し、その後、その大気を取り込んだままビニールカバーを掛けています。ビニールカバーの根本はピラー部にきつく密着するようにゴム紐で縛られており、完全ではありませんが、カバー内部への外部の空気の出入りはある程度制限されています。
 
このグラフの変化から、過去に取り込んでカバー内に有った空気は相対的に湿度が低い状態でしたが、一度大気に開放され入れ替えられたため、その後は湿度が高くなってしまったことがわかります。また、カバー内の空気中の水分の絶対量はあまり変化しないと考えられ、温度が上がると湿度が下がり、温度が下がると湿度が上がります。相対湿度は飽和蒸気圧と水分量の関係等で計算されます(例えばhttp://www.s-yamaga.jp/nanimono/taikitoumi/kukichunosuijoki.htm)が、ビニールカバー内の空気は温度上昇に伴い水分の供給なしに体積が増加し、かつ、ビニールカバーの容積変化は限界があるため、温度上昇に伴う膨張で圧力が上昇し空気が漏れることがあるので、実際にはもう少し複雑です。熱力学的に見れば、断熱系ではなく十分な熱エネルギーの移動があり、かつ若干の物質の移動もある不完全な閉鎖系という状態です。
 
さて、静的な状態の解析は別問題として、屋外放置の赤道儀としては課題は以下の2つです。
(1)赤道儀を高温にしたくない。
(2)赤道儀に結露させたくない。
温度対策は、まず日射が問題と考えられるので、ビニールカバーにアルミ断熱シートなどを被せようかと思います。災害用の熱反射シートも良いでしょう。
湿度対策は、ビニールカバーの中にシリカゲルを入れるのが簡単ですが、それだけだとつまらないので、レンズの結露防止用に最近よく使われている乾燥空気を供給する方法も試してみたいと思います。
結露させたくないだけなら温度が下がらないようにすれば良いのですが、使用時にはカバーを開放しなくてはならないので、最悪、そのような夏季の高温多湿状態を長時間維持することになってしまうのは避けたいですね。
 
*では工作ができたらまた報告します。
 
 
(参考)
飽和水蒸気圧(飽和水蒸気量)のグラフ
イメージ 2










 前回のふたご座74番星の星食の時に、インターネットのNTPサーバーに同期した後でも、パソコンの時計とGPS世界時計のPPS信号との同期ずれが大きく、例えば、PPSパルスのLEDが、パソコンの時計でx23.6秒に発光した場合、それを23.0秒と補正すべきか、24.0秒とすべきか、いまいち確信が持てないという問題が生じました。そこで、その曖昧さを除くために、GPS世界時計の正分パルスで発光するLEDを追加しました。
 
 これまでのLEDは格安の接写リングの中に取り付けてありますが、追加LEDはその隣に並べて付けました。接写リング後方から見ると隅の方に並んでいることになります。ついででしたので、将来の拡張のため、3個並べておきました。PPSパルス用に最も高輝度な赤色LED、正分パルス用に青色LED、予備に緑色LEDとしました。記録をカラーモードにするとどれが発光したのか識別することができるかも知れません。
 
 以下に、実際に記録した画像の一部を示します。

イメージ 1

イメージ 2

イメージ 3

イメージ 4

イメージ 5

イメージ 6

イメージ 7

イメージ 8


 記録エリアは200x100ピクセル、記録モードはRAW8ビットです。
SharpCapのタイムスタンプ機能により、画面上端にパソコン内部時計基準の時刻が印字されています。
 
また、PPSパルス(160μ秒)が赤色、正分パルス(0.1秒)が青色で、発光の様子が記録されています。
 
PPSパルスは毎秒0.970秒頃に出ているようです。
 
正分パルスのLED(青)は、59.888秒のコマの最後付近から発光し始め、59.993秒のコマの最後あたりで消灯しています。
 
 59.969秒のコマには、それに加えてPPS信号のLED(赤)が重なっています。正分パルスは予告動作なので、正分パルス開始直後のPPSパルスが毎分の0.00秒になります。
 
 今回の改良で、パソコンの時計が少々ずれていても、曖昧さの無い測定ができるようになったものと期待できると思います。
 
 晴れれば、週末に2重星のポリマ食です。
 
 

これまでに、一応の温湿度記録ができるようになっていましたが、リアルタイムクロックとSDカードが一枚のシールドに載っているDeekRobotのデータロガーシールドがAmazon で入手できましたので、これを使ってみることにしました。リアルタイムクロックで4本、SDカードで6本、合わせて10本の配線が省略できます。
 
イメージ 1

 
これに搭載されているリアルタイムクロック(I2C接続、0x68)はDS1307ですが、特にスケッチの変更無しに動きました。LCDディスプレイ(I2C接続、0x27)についても変更有りません。
 
温湿度センサー(DHT22AM2302)との通信は、これまでデジタル2番ピンを使用していましたが、配線の位置を整理するため、アナログ2番ピンをデジタルピンとして使用することにして、スケッチを変更しました。これで、LCDディスプレイを含めて配線がシールド基板の片側のみに集約できました。
 
SDカードは、前回のmicroSDではなく、フルサイズのSDカードです。SPI接続で、配線の必要はありませんが、チップセレクトがデジタル10番ピンになっています。他のサンプルスケッチではデジタル4番ピンなど別のピンにアサインされていることもあるので注意が必要です。DeekRobotのデータロガーシールドの情報が乏しく、最初これが分からずにSDカードが認識できなかったのですが、基板のパターンを見れば一目瞭然でした。
 
また、しばらく使ってみたところ、放っておくと、同じファイルにずっと書き込み続けるので、後の整理が面倒だと思いました。そこで、ファイル名を日付にして、1日分毎に別ファイルとするようにスケッチを変更しました。
 
データの取得頻度は約1分ごとですが、loop()の最後のdelayで調節していますので、ここを書き換えれば変更できます。また、省エネのため、最初の約5秒が経過したところで、LCDのバックライトを高速で点滅させて暗く見えるようにしました。表示そのものは残したままです。
 
あとは適当な箱(ケース)に入れて使いやすくしたいと思います。
 
 
 
 
//--スケッチ--------------------------
#include <Wire.h>
#include <SD.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <SPI.h>
 
#define DHTPIN A2    // what digital pin we're connected to
//#define DHTTYPE DHT11  // DHT 11
#define DHTTYPE DHT22  // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21  // DHT 21 (AM2301)
#define RTC_addr 0x68
#define ASCII_ZERO 48
 
const int chipSelect = 10;//SDcard
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
 
String str_cmd = "";
char* pchDate = "1990/01/01";
char* pchTime = "00:00:00";
char* filename = "datafile.csv";
int i = 0;
 
void setup() {
  Serial.begin(19200);
  Wire.begin();
  dht.begin();
  lcd.begin();
 pinMode(A2, INPUT)
 
 Serial.print("Initializing SD card...");
  if(!SD.begin(chipSelect)) {
   Serial.println("Card failed, or not present");
   lcd.setCursor(12,0);
   lcd.print("SD?!");
    return;
  }
 
 Serial.println("card initialized.");
  lcd.setCursor(12,0);
 lcd.print("SDOK");
 Serial.print("    DHT");
 Serial.println(DHTTYPE);
 
  File dataFile =SD.open(filename, FILE_WRITE);
 
  if (dataFile) {
   dataFile.print("No, Date, Time, Humidity,Temperature, ");
   dataFile.print("   DHT");
   dataFile.println(DHTTYPE);
    dataFile.close();
  }
  else {
   Serial.println("error opening dataFile !");
  }
 
//  lcd.setCursor(0,0);
//  lcd.print("Humand Temp ");
}
 
 
void loop() {
  // Wait a few secondsbetween measurements.
  /* Make sure thebacklight is turned on */
  lcd.backlight();
 
  delay(1000);
 
  // Readingtemperature or humidity takes about 250 milliseconds!
  // Sensor readingsmay also be up to 2 seconds 'old' (its a very slow sensor)
  float h =dht.readHumidity();
  // Read temperatureas Celsius (the default)
  float t =dht.readTemperature();
  // Read temperatureas Fahrenheit (isFahrenheit = true)
  float f =dht.readTemperature(true);
 
 
  // Check if any readsfailed and exit early (to try again).
  if (isnan(h) ||isnan(t) || isnan(f)) {
   Serial.println("Failed to read from DHT sensor!");
    lcd.setCursor(0,1);
    lcd.print("DHT?!      ");
    return;
  }
 
  // Compute heat indexin Celsius (isFahreheit = false)
  float hic =dht.computeHeatIndex(t, h, false);
 
  Serial.print(++i);
  Serial.print("\t");
 
  RTC_read1();
 Serial.print(pchDate);
 Serial.print(",");
 Serial.print(pchTime);
  Serial.print("\t");
 
  //  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print("%\t");
  //  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print("");
 Serial.print((char)223);
 Serial.println("C ");
 
  /* Output the testdata to the LCD */
  lcd.setCursor(0, 0);
  lcd.print(pchTime);
  lcd.print("");
//  lcd.print(pchDate);
// lcd.print("      ");
  lcd.setCursor(0, 1);
  lcd.print(h);
  lcd.print("%  ");
  lcd.print(t);
  lcd.print((char)223);
  lcd.print("C");
 
  // make a string forassembling the data to log:
  String dataString ="";
 
  // open the file.note that only one file can be open at a time,
  // so you have toclose this one before opening another.
 
 
Serial.println(filename);
 
  File dataFile =SD.open(filename, FILE_WRITE);
 
  // if the file isavailable, write to it:
  if (dataFile) {
    dataFile.print(i);
   dataFile.print(",");
   dataFile.print(pchDate);
    dataFile.print(",");
   dataFile.print(pchTime);
   dataFile.print(",");
    dataFile.print(h);
   dataFile.print(",");
   dataFile.println(t);
    dataFile.close();
   lcd.setCursor(12,0);
   lcd.print("SDOK");
  }
  // if the file isn'topen, pop up an error:
  else {
   Serial.println("error opening datafile ");
   lcd.setCursor(12,0);
   lcd.print("SD?!");
  }
 
  delay(1665);
  delay(2000);
  lcd.noBacklight();
  for(i = 0; i <5500; i++) {
    lcd.backlight();
    delay(1);
   lcd.noBacklight(); 
    delay(9);
  }
    
 
lcd.noBacklight();
  delay(10000);
  delay(10000);
  delay(10000);
  delay(10000);
  delay(10000);
}
 
 
 
int myReadLine(void) {
  int cnt_buf = 0;
  str_cmd ="";
  char ch;
 
  //
  if(Serial.available() > 0) {
    delay(100);
    cnt_buf =Serial.available();
    for (int iii = 0;iii < cnt_buf; iii++) {
      ch =Serial.read();
     str_cmd.concat(ch);
    }
  }
  return cnt_buf;
}
 
//
void I2C_action1(void) {
  if (str_cmd =="RTC") {
    RTC_read1();
   Serial.println(pchTime);
  } else if (str_cmd =="RTC_set") {
    RTC_set1();
  }
}
 
//
void RTC_read1(void) {
 
  byte sec = 0;
  byte mini = 0;
  byte hour = 0;
  byte day = 0;
  byte date = 0;
  byte month = 0;
  byte year = 0;
 
 Wire.beginTransmission(RTC_addr);
  Wire.write(0x00);
 Wire.endTransmission();
 
 Wire.requestFrom(RTC_addr, 7);
  if (Wire.available()>= 7)
  {
    sec = Wire.read();
    mini = Wire.read();
    hour = Wire.read();
    day = Wire.read();
    date = Wire.read();
    month =Wire.read();
    year = Wire.read();
 
    pchTime[0] =bitRead(hour, 5) * 2 + bitRead(hour, 4) + ASCII_ZERO;
    pchTime[1] = (hour& B00001111) + ASCII_ZERO;
    pchTime[3] = (mini>> 4) + ASCII_ZERO;
    pchTime[4] = (mini& B00001111) + ASCII_ZERO;
    pchTime[6] = (sec>> 4) + ASCII_ZERO;
    pchTime[7] = (sec& B00001111) + ASCII_ZERO;
 
    filename[0] = pchDate[0] = '2';

    filename[1] =pchDate[1] = '0';

    filename[2] =pchDate[2] = (year >> 4) + ASCII_ZERO;

    filename[3] =pchDate[3] = (year & B00001111) + ASCII_ZERO;

    filename[4] =pchDate[5] = bitRead(month, 4) + ASCII_ZERO;

    filename[5] =pchDate[6] = (month & B00001111) + ASCII_ZERO;

    filename[6] =pchDate[8] = (date >> 4) + ASCII_ZERO;

    filename[7] =pchDate[9] = (date & B00001111) + ASCII_ZERO;

  }

}

 

//

void RTC_set1(void) {

  // 2017/03/09 08:02:00

  byte sec = B0000000;

  byte mini =B00000010;//02

  byte hour =B00001000;//08

  byte day =3;//probably day of the week, sunday, monday, tuesday,,...

  byte date =B00001001;//09

  byte month =B00000011;//03

  byte year =B00010111;//17

 

  delay(100);

 Wire.beginTransmission(RTC_addr);

  Wire.write(0x00);

  Wire.write(sec);

  Wire.write(mini);

  Wire.write(hour);

  Wire.write(day);

  Wire.write(date);

  Wire.write(month);

  Wire.write(year);

 Wire.endTransmission();

  delay(50);

 

 Serial.println("RTC_set");

}

 



 

ArduinoUnoまたはNano)互換ボードに、温湿度センサー(DHT22AM2302))、SDカード、I2C接続LCD16文字2行の液晶表示器)、I2C接続RTCDS3231M、リアルタイムクロック)を接続して、測定日時、湿度、温度をmicroSDカードに記録することができるようになりましたので、忘れないうちに中間まとめをしておこうと思います。
 
イメージ 1

 
(1)各モジュール(シールド)とArduinoとのピン接続
*各モジュールには一般にVCCGNDピンがありますが、VCCは+5Vに、GNDGNDに接続していますので、説明は省略します。
→印の左が各モジュール(シールド)に書かれている記号、右側がArduinoのピンの名前です。なお、例えばI2C接続のSDAArduino基板ではA4ピンと同等ですのでどちらにつないでもかまわないようです。ここでは、代用できる場合はSDAA4)と書きます。
 
(a)DHT22AM2302)温湿度センサー
   out → D2
 
(b)DS3231Mリアルタイムクロック(ZS-042?)(アドレス0x68
   32K → 未接続 (EEPROM用)
   SQW → 未接続 (割り込み用)
   SCL → SCLA5
   SDA → SDAA4

(バックアップ電池は、充電回路をパターンカットしてCR2025使用)

 
(c)LCDI2Cアダプター付きのHJ1602B)(アドレス0x27
   SCL → SCLA5
   SDA → SDAA4
 
(d)SDカードアダプター(CATALEX?)
   CS → D4
   SCK → D13
   MOSI → D11
   MISO → D12
 
(2)ライブラリーとスケッチ
Arduino開発環境は1.6.5を使っており、一般に標準ライブラリーを使用する他、必要に応じて各モジュール固有のライブラリー等を適宜ダウンロードしてきて使用しています。また、ライブラリーについてくるサンプルスケッチも参考にし、また利用させていただきました。

スケッチ本体は、UnoでもNanoでもスケッチ自体は変更無しで使えました。(書き込み時にボード選択の変更は必要です。)

 
(a)DHT温湿度センサー
以下のようなライブラリーをダウンロードして使用しました。
DHT-sensor-library-master.zip」から展開

https://github.com/adafruit/DHT-sensor-library

Adafruit_Sensor-master.zip」から展開

https://github.com/adafruit/Adafruit_Sensor

 

(b)I2C接続LCDディスプレイ
以下のようなライブラリーをダウンロードして使用しました。
Arduino-LiquidCrystal-I2C-library-master.zip」から展開

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

 

(c)SDカードアダプター
Arduinoの標準ライブラリーを使用しました。

 

(d)リアルタイムクロックの利用
ダウンロードした他のライブラリーがうまく使えなかったので、次の記事を参考にさせていただきました。

http://shirotsuku.sakura.ne.jp/blog/?p=949

なお、関数のオリジナルのソースコードを一部改変しましたので、他の方の混乱を避けるため、変更したものは関数名を少し変えてわかるようにしました。
 
今回、実際に動かしてみた以下のスケッチは、とりあえず私の予想通りの動作をしますが、要求仕様すべてを満たしたものでは無く、あちこち妥協した部分があり、開発途上です。
 
//-------------------------

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Adafruit_Sensor.h>

#include <DHT.h>

#include <DHT_U.h>

#include <SPI.h>

#include <SD.h>

 

#define DHTPIN 2     // what digital pin we're connected to

//#define DHTTYPE DHT11   // DHT 11

#define DHTTYPE DHT22   // DHT 22 (AM2302), AM2321

//#define DHTTYPE DHT21   // DHT 21 (AM2301)

#define RTC_addr 0x68

#define ASCII_ZERO 48

 

const int chipSelect = 4;//SDcard

 

LiquidCrystal_I2C lcd(0x27,16,2);

DHT dht(DHTPIN, DHTTYPE);

 

String str_cmd = "";

char* pchDate = "1990/01/01";

char* pchTime = "00:00:00";

char* filename = "datafile.csv";

int i = 0;

 

void setup() {

 Serial.begin(9600);

 Wire.begin();

 dht.begin();

 lcd.begin();

  

 Serial.print("Initializing SD card...");

  if(!SD.begin(chipSelect)) {

   Serial.println("Card failed, or not present");

   return;

  }

 

 Serial.println("card initialized.");

 Serial.print("    DHT");

 Serial.println(DHTTYPE);

 

 File dataFile = SD.open(filename, FILE_WRITE);

 

  if(dataFile) {

   dataFile.print("No, Date, Time, Humidity,Temperature, ");

   dataFile.print("   DHT");

   dataFile.println(DHTTYPE);

   dataFile.close();

  }

 else {

   Serial.println("error opening dataFile !");

  }

   

 lcd.setCursor(0,0);

 lcd.print("Hum and Temp ");

}

 

 

 

/* RTC sample

void loop() {

  //マスターから受信したら

 if(myReadLine() > 0){

   I2C_action1(); 

  }

 else {

   RTC_read1();

   Serial.print(pchDate);

   Serial.print(",");

   Serial.println(pchTime);

   delay(1000);

  }

}

*/

 

void loop() {

  //Wait a few seconds between measurements.

  /*Make sure the backlight is turned on */

 lcd.backlight();

 

 delay(1000);

 

  //Reading temperature or humidity takes about 250 milliseconds!

  //Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)

 float h = dht.readHumidity();

  //Read temperature as Celsius (the default)

 float t = dht.readTemperature();

  //Read temperature as Fahrenheit (isFahrenheit = true)

 float f = dht.readTemperature(true);

 

 

  //Check if any reads failed and exit early (to try again).

  if(isnan(h) || isnan(t) || isnan(f)) {

   Serial.println("Failed to read from DHT sensor!");

   return;

  }

 

  //Compute heat index in Celsius (isFahreheit = false)

 float hic = dht.computeHeatIndex(t, h, false);

 

 Serial.print(++i);

 Serial.print(" \t");

     

   RTC_read1();

   Serial.print(pchDate);

   Serial.print(",");

   Serial.print(pchTime);

   Serial.print(" \t");

   

// Serial.print("Humidity: ");

 Serial.print(h);

 Serial.print(" %\t");

// Serial.print("Temperature: ");

 Serial.print(t);

 Serial.print(" ");

 Serial.print((char)223);

 Serial.println("C ");

 

  /*Output the test data to the LCD */

 lcd.setCursor(0,0);

 lcd.print(pchTime);

 lcd.print("      ");

 lcd.setCursor(0,1);

 lcd.print(h);

 lcd.print(" %  ");

  lcd.print(t);

 lcd.print((char)223);

 lcd.print("C ");

 

  //make a string for assembling the data to log:

 String dataString = "";

 

  //open the file. note that only one file can be open at a time,

  //so you have to close this one before opening another.

 

 File dataFile = SD.open(filename, FILE_WRITE);

 

  //if the file is available, write to it:

  if(dataFile) {

   dataFile.print(i);

   dataFile.print(",");

   dataFile.print(pchDate);

   dataFile.print(",");

   dataFile.print(pchTime);

    dataFile.print(",  ");

   dataFile.print(h);

   dataFile.print(",  ");

   dataFile.println(t);

   dataFile.close();

  }

  //if the file isn't open, pop up an error:

 else {

   Serial.println("error opening datafile ");

  }

 

 delay(8670);

 

}

 

 

 

int myReadLine(void){

  intcnt_buf = 0;

 str_cmd = "";

 char ch;

  

  //受信したら

 if(Serial.available() > 0){

   delay(100);

   cnt_buf = Serial.available();

   for (int iii = 0; iii < cnt_buf; iii++){

     ch = Serial.read();

     str_cmd.concat(ch);

    }

  }

 return cnt_buf;

}

 

格安RTCモジュールをAmazonで探すと何種類かありますが、今回は「HiLetgo DS3231AT24C32 時計モジュール リアル時間時計モジュール」(ZS-042というプリントあり)を購入しました。2月に注文したときは110円でした。(これで、送料無料で中国から届くので、個人的にはうれしいですが、ビジネスモデルとして破綻しないか心配です。フェアトレードについて勉強しないと。)
 
このモジュールはI2C接続で、I2Cアドレスは0x68(デフォルト)とのことです。また、Amtel24C32という32kEEPROMも搭載されていますが今回は使用しません。DS3231には、温度センサーも内蔵されていて、時刻と同時にチップの温度も得られます。
 
 注意すべき点がひとつありました。バックアップ電池についてarduino forumhttps://forum.arduino.cc/index.php?topic=278270.0に書かれていましたが、モジュール基板には簡易充電回路が組み込まれており、通常の一次電池(CR2032等)ではなく、充電可能なLIR2032等の電池を使用しないと危険だそうです。応急措置として、充電回路(ダイオードと電流制限抵抗)のパターンをカットすれば充電されないので、そうしてからCR2032を使用すれば大丈夫ではないかとの意見もありました。CR2032でも年単位でバックアップできるのではないかとのことです。(追記:近所のコンビニでCR2032が無かったのでCR2025で代用しましたが、今のところ問題無いようです。Arduino互換機から抜いた後で再接続しても、ほぼ正しい時刻を表示できました。)
 
さて、実際に使うにあたって、時刻の書き込みと読み出しですが、次の記事を参考にさせていただきました。
 
この記事を参考に、掲載されているスケッチを一部変更させていただいて、次のようなスケッチ(1)で動かしてみました。
シリアルモニターで改行コード(LF,CR)無しで「RTC」と送信すると、時分秒が表示されます。「RTC_set」と送信すると、void RTC_set()の内部で設定されている日時が書き込まれます。何も入力しないでいると、約1秒間隔で年月日、時分秒をシリアルモニターに出力するようにしてあります。
 スケッチは、標準のWireライブラリーだけで、他のライブラリーは使っていないようで、簡単で良いです。
 
 ただし、まだ工夫が足りず、シリアルモニターに時刻を送信後のdelay(1000)が終わってからでないと次のシリアル入力を受け付けないので、時刻設定の精度は1秒程度です。いずれ改良したいと思います。
 
 モジュールの配線は、電源(VCCGND)とI2C信号(SCLSDA)の4本のみ、Arduino Uno互換ボードの対応ピンに接続しました。モジュールには後2本ピンがありますが、割り込み処理用と、EEPROM用とのことです。こちらはいずれ必要に応じて学習してゆきたいと思います。まずは、リアルタイムクロックとして読み出し(たまに書き込みも)ができ、他のモジュールと共存できるようになりたいと思います。
 
 
//スケッチ(1)----------
//_20170308_RTC_SET_OK
 
#include<Wire.h>
 
#defineRTC_addr 0x68
#defineASCII_ZERO 48
 
Stringstr_cmd = "";
char*pchDate = "1990/01/01";
char*pchTime = "00:00:00";
 
voidsetup() {
  Serial.begin(9600);
  Wire.begin();
 
}
 
voidloop() {
  //マスターから受信したら
  if(myReadLine() > 0){
    I2C_action(); 
  }
  else {
    RTC_read();
    Serial.print(pchDate);
    Serial.print(",");
    Serial.println(pchTime);
    delay(1000);
  }
 
}
 
intmyReadLine(void){
  int cnt_buf = 0;
  str_cmd = "";
  char ch;
  
  //受信したら
  if(Serial.available() > 0){
    delay(100);
    cnt_buf = Serial.available();
    for (int iii = 0; iii < cnt_buf; iii++){
      ch = Serial.read();
      str_cmd.concat(ch);
    }
  }
  return cnt_buf;
}
 
//アクション選択
voidI2C_action(void){
  if(str_cmd == "RTC"){
    RTC_read();
    Serial.println(pchTime);
  }else if(str_cmd == "RTC_set"){
    RTC_set();
  }
}
 
//日時を取得
voidRTC_read(void){
 
  byte sec = 0;
  byte mini = 0;
  byte hour = 0;
  byte day = 0;
  byte date = 0;
  byte month = 0;
  byte year = 0;
  
  Wire.beginTransmission(RTC_addr);
  Wire.write(0x00);
  Wire.endTransmission();
 
  Wire.requestFrom(RTC_addr, 7);
  if(Wire.available() >= 7)  
  {      
    sec = Wire.read();
    mini = Wire.read();
    hour = Wire.read();
    day = Wire.read();
    date = Wire.read();
    month = Wire.read();
    year = Wire.read();
    
    pchTime[0] = bitRead(hour,5)*2 +bitRead(hour,4) + ASCII_ZERO;
    pchTime[1] = (hour & B00001111) +ASCII_ZERO;
    pchTime[3] = (mini>>4) + ASCII_ZERO;
    pchTime[4] = (mini & B00001111) +ASCII_ZERO;
    pchTime[6] = (sec>>4) + ASCII_ZERO;
    pchTime[7] = (sec & B00001111) +ASCII_ZERO;
      
    pchDate[0] = '2';
    pchDate[1] = '0';
    pchDate[2] = (year>>4) + ASCII_ZERO;
    pchDate[3] = (year & B00001111) +ASCII_ZERO;
    pchDate[5] = bitRead(month,4) + ASCII_ZERO;
    pchDate[6] = (month & B00001111) +ASCII_ZERO;
    pchDate[8] = (date>>4) + ASCII_ZERO;
    pchDate[9] = (date & B00001111) +ASCII_ZERO;
    
  }
}
 
//日時を設定
voidRTC_set(void){
  //例)2017/12/31 23:59:50
  byte sec = B01010000;
  byte mini = B01011001;//59
  byte hour = B00100011;//23
  byte day = 3;//probably day of the week,sunday, monday, tuesday,,...
  byte date = B00110000;//31
  byte month = B00010001;//
  byte year = B00010111;//17
  
  delay(100);
  Wire.beginTransmission(RTC_addr);
  Wire.write(0x00);
  Wire.write(sec);
  Wire.write(mini);
  Wire.write(hour);
  Wire.write(day);
  Wire.write(date);
  Wire.write(month);
  Wire.write(year);
  Wire.endTransmission();
  delay(50);
  
  Serial.println("RTC_set");
}
 
-----------------------------------
 
 
 
 次に、http://programresource.net/2015/04/05/2519.htmlを参考にした以下の別のスケッチ(2)も試してみました。
 
このスケッチ(2)では、RTCモジュールから時刻を読み出すだけで、初期設定は出来ませんので、電源を入れると、200011000秒になります。
 
//-----スケッチ(2)-------------------------------------
#include<Time.h>
#include<Wire.h>
#include<DS3231RTC.h> // A simple DS3231 Library meant for use with Time.h alsoimplements temp readings
 
 
voidsetup() {
Serial.begin(9600);
setSyncProvider(RTC.get);// the function to get the time from the RTC
if(timeStatus() != timeSet)
Serial.println("Unableto sync with the RTC");
else
Serial.println("RTChas set the system time");
}
voidloop()
{
digitalClockDisplay();
delay(1000);
}
 
voiddigitalClockDisplay() {
 
setSyncProvider(RTC.get);// the function to get the time from the RTC
if(timeStatus() != timeSet)
Serial.println("Unableto sync with the RTC");
else;
 
//digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print("");
Serial.print(day());
Serial.print("");
Serial.print(month());
Serial.print("");
Serial.print(year());
Serial.print("");
Serial.print(RTC.getTemp());//These last few lines are the only other change to the the Time.h example!
Serial.print((char)223);
Serial.print('C');
Serial.println();
 
}
voidprintDigits(int digits) {
//utility function for digital clock display: prints preceding colon and leading0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
 
//-------------------------------------------------------------
 
 
なお、スケッチ(1)で時刻設定をすると、このスケッチ(2)で年月日を読み込む場合に上手く行かないようです。時分秒は大丈夫のようです。書き込み方が違うのかも知れません。奥が深いです。
 
 
 
 



 正確に言うと、赤道儀の電子回路を温度、湿度の変化から保護するためですが、温度の方は、最近はアルミ蒸着の断熱材が簡単に入手できるのでそれを用いたカバー等を着ければなんとかなる気がします。
 湿度については、条件次第で結露する場合が多く、その影響は温度より甚大になる可能性が高いです。
 実際には、温度と湿度、結露には密接な関係があるので、どちらかだけで良いというわけには行きません。
 
 大気中の水分に関して、今回は、山賀様のホームページの記事を参考にさせていただきました。感謝を込めてURLを以下にご紹介致します。
 
 これから、何回か測定しなくてはならないと思いますが、試しに自宅スカイバルコニーに常置している赤道儀の付近で測定した、2017228日夜から31日夜にかけてのほぼ24時間の温度湿度変化は以下の通りでした。
イメージ 1

青が湿度で左側の目盛り(%)、赤が気温で右側の目盛り(℃)です。横軸は、まだリアルタイムコロックが実装されていないので正確な時刻になっていませんが、ほぼ10秒間隔で測定したデータの番号です。
 当日の天候は、雲量7~8くらいで、風もほとんどありませでした。気温は夜から明け方にかけて-2℃くらいまで緩やかに下降し、日の出とともに上昇、その後昼過ぎから夕方にかけて下降するという変化をしています。
 湿度はちょうどその反対の変化をしており、大気中の水分量そのものはあまり変化せずに気温の変化に応じて飽和蒸気圧との関係で相対湿度が変化しているような状況であったものと思われます。
 
 さて、対策をどうしましょうか。天体写真を撮影する時に、気温が低い場合の結露(または霜)は当たり前に経験しているわけですが、保管状態でも常に対策するのは結構面倒そうです。少し考えてみたいと思います。
 
 
 
 
【温湿度ロガーについて】
 今回は、Arduino UNO R3互換品に、DHT22AM2302)温湿度センサー、SDカードアダプター、I2C接続LCDディスプレイを付けたものを自作して使用しました。リアルタイムクロックはスキル未熟につき未実装です。
 
 

DHT22端子とArduinoUno端子の接続は以下の通りです。

+  → 5V

out  → D2

-  → GND
DHT22はプルアップ抵抗が実装してある基板付きのものを使用しました。)
 
SDカードアダプターは、ISCP接続ですが、都合によりデジタルピンを使用して、以下のようにしました。
CS  → D4
SCK → D13
MOSI → D11
MISO → D12
VCC → 5V
GND → GND
 
I2C接続LCDディスプレイは、I2C接続(別名WireTWI等)ですので、以下の通りです。SCLSDAはそれぞれA5A4と同じです。
SCL → A5SCL
SDA → A4SDA
VCC → 5V
GND → GND
 
 
DHT温湿度センサーは、以下のようなライブラリーをダウンロードして使用しました。
DHT-sensor-library-master.zip」から展開
Adafruit_Sensor-master.zip」から展開
 
I2C接続LCDディスプレイのライブラリーは以下のようなライブラリーをダウンロードして使用しました。
Arduino-LiquidCrystal-I2C-library-master.zip」から展開
 
SDカードアダプターに関してはArduinoの標準ライブラリーを使用しました。
 
UnoでもNanoでもスケッチ自体は変更無しで使えました。(書き込み時にボード選択の変更は必要です。)
一般に以下のスケッチではライブラリーのexamplesにあるサンプルスケッチを参考にしており、基本的にはパブリックドメインです。
 
-----------------------------------------------------

#include<Wire.h>

#include<LiquidCrystal_I2C.h>

#include<Adafruit_Sensor.h>

#include<DHT.h>

#include<DHT_U.h>

#include<SPI.h>

#include<SD.h>

 

#defineDHTPIN 2     // what digital pin we'reconnected to

 

//Uncomment whatever type you're using!

//#defineDHTTYPE DHT11   // DHT 11

#defineDHTTYPE DHT22   // DHT 22  (AM2302), AM2321

//#defineDHTTYPE DHT21   // DHT 21 (AM2301)

 

LiquidCrystal_I2Clcd(0x27,16,2);

DHTdht(DHTPIN, DHTTYPE);

constint chipSelect = 4;/* SD Card */

 

inti = 0;

 

voidsetup() {

  Serial.begin(9600);

  Serial.print("Initializing SDcard...");

  if (!SD.begin(chipSelect)) {

    Serial.println("Card failed, or notpresent");

    return;
  }
 

  Serial.println("cardinitialized.");

  Serial.print("DHTxx test! ");
  Serial.print("    DHT");
  Serial.println(DHTTYPE);
 

  File dataFile =SD.open("datalog.txt", FILE_WRITE);

  if (dataFile) {
    dataFile.print("DHTxx test! ");
    dataFile.print("    DHT");
    dataFile.println(DHTTYPE);
    dataFile.close();
  }
  else {

    Serial.println("error openingdatalog.txt");

  }
 
  dht.begin();
  lcd.begin();
  lcd.setCursor(0,0);
  lcd.print("Hum and Temp ");
 
}
 

voidloop() {

 
  lcd.backlight();
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
 
  if (isnan(h) || isnan(t) || isnan(f)) {

    Serial.println("Failed to read fromDHT sensor!");

    return;
  }
 
  Serial.print(++i);
  Serial.print(" \t");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("\n");
 
  lcd.setCursor(0,1);
  lcd.print(h);
  lcd.print(" %  ");
  lcd.print(t);
  lcd.print(" C ");
 
  String dataString = "";
 

  for (int analogPin = 0; analogPin < 3;analogPin++) {

    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }
 

  File dataFile = SD.open("datalog.txt",FILE_WRITE);

 
  if (dataFile) {
    dataFile.print(i);
    dataFile.print(",  ");
    dataFile.print(h);
    dataFile.print(",  ");
    dataFile.println(t);
    dataFile.close();
  }
  else {

    Serial.println("error openingdatalog.txt");

  }
 
  delay(10000);
  
}
 
 
 

 
Arduino のサンプルスケッチには、dataloggerという、測定データをSDカードに書き込むものがあります。
これを応用して、前回のスケッチではシリアルポートに温度湿度のデータを流して表示させていたものを、SDカードに書き込むようにしたいと思います。
また、DHT11を少し精度の高いDHT22に変えています。小数点以下の数字が意味を持つようです。Amazonの「HiLetgo DHT22/AM2302 デジタル温・湿度センサー」という商品です。
 
SDカードに書き込むようなスケッチを自分で作ろうとするととても大変だと思いますが、ライブラリーが提供されているのでとても簡単です。
こちらも、Amazonの「HiLetgo Micro SD/ TF カードモジュール シールド モジュール 6 ピン SPI」という商品です。
 
それらをジャンパー線でつなぐとかなりごちゃごちゃしてしまいますが、まだ大丈夫です。この後、リアルタイムクロックとLCDディスプレイを接続したいのですが、その時は整理の仕方を考えないといけないでしょう。
ピンの接続番号等は、スケッチの初めの方に書かれています。
 
 
イメージ 1

 
 
 
記録された「datalog.txt」の内容は以下の様なものです。まだ時刻記録がないですが、おおよそ10秒間隔で記録しています。
 
イメージ 2

 
今回のスケッチは以下の通りです。まだ、修正中なので、いらないラインを消去しないでコメントアウトしているだけのところがあります。
 
/*
  SD card datalogger
 
 This example shows how to log data from threeanalog sensors
 to an SD card using the SD library.
 
 The circuit:
 * analog sensors on analog ins 0, 1, and 2
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created 24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
 
 */
 
//Example testing sketch for various DHT humidity/temperature sensors
//Written by ladyada, public domain
 
//Modifiedas sketch_feb28a_DHTtester_OK.ino on Feb.28,2017
//to use AM2302 chip
 
#include<Adafruit_Sensor.h>
#include"DHT.h"
#include<SPI.h>
#include<SD.h>
constint chipSelect = 4;
 
#defineDHTPIN 2     // what digital pin we'reconnected to
 
//Uncomment whatever type you're using!
//#defineDHTTYPE DHT11   // DHT 11
#defineDHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#defineDHTTYPE DHT21   // DHT 21 (AM2301)
 
//Connect pin 1 (on the left) of the sensor to +5V
//NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
//to 3.3V instead of 5V!
//Connect pin 2 of the sensor to whatever your DHTPIN is
//Connect pin 4 (on the right) of the sensor to GROUND
//Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
 
//Initialize DHT sensor.
//Note that older versions of this library took an optional third parameter to
//tweak the timings for faster processors. This parameter is no longer needed
//as the current DHT reading algorithm adjusts itself to work on faster procs.
DHTdht(DHTPIN, DHTTYPE);
 
inti;
voidsetup() {
  Serial.begin(9600);
 
  Serial.print("Initializing SDcard...");
  // see if the card is present and can beinitialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("cardinitialized.");
 
  Serial.print("DHTxx test! ");
  Serial.print("    DHT");
  Serial.println(DHTTYPE);
 
    File dataFile =SD.open("datalog.txt", FILE_WRITE);
 
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.print("DHTxx test! ");
    dataFile.print("    DHT");
    dataFile.println(DHTTYPE);
    dataFile.close();
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error openingdatalog.txt");
  }
 
  i=0;
  dht.begin();
}
 
voidloop() {
  // Wait a few seconds between measurements.
  delay(10000);
 
  // Reading temperature or humidity takesabout 250 milliseconds!
  // Sensor readings may also be up to 2seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit(isFahrenheit = true)
  float f = dht.readTemperature(true);
 
  // Check if any reads failed and exit early(to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read fromDHT sensor!");
    return;
  }
 
  // Compute heat index in Fahrenheit (thedefault)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit= false)
  float hic = dht.computeHeatIndex(t, h,false);
 
  Serial.print(++i);
  Serial.print(" \t");
//  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
//  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
//  Serial.print(f);
//  Serial.print(" *F\t");
//  Serial.print("Heat index: ");
//  Serial.print(hic);
//  Serial.print(" *C ");
//  Serial.print(hif);
//  Serial.println(" *F");
  Serial.print("\n");
 
  // make a string for assembling the data tolog:
  String dataString = "";
 
  // read three sensors and append to thestring:
/*
  for (int analogPin = 0; analogPin < 3;analogPin++) {
    int sensor = analogRead(analogPin);
    dataString += String(sensor);
    if (analogPin < 2) {
      dataString += ",";
    }
  }
*/
 
  // open the file. note that only one file canbe open at a time,
  // so you have to close this one beforeopening another.
  File dataFile =SD.open("datalog.txt", FILE_WRITE);
 
  // if the file is available, write to it:
  if (dataFile) {
    dataFile.print(i);
    dataFile.print(",  ");
    dataFile.print(h);
    dataFile.print(",  ");
    dataFile.println(t);
    dataFile.close();
  }
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error openingdatalog.txt");
  }
 
}

 スカイバルコニーという専用スペースで、準備作業をなるべく簡単にするために赤道儀(AZ-EQ6GT)を置きっぱなしにしてすることを計画しています。ここで問題となるのは、それなりのカバーは製作予定とはいえ、冬や夏の温度、湿度の変化に晒されることから電子制御回路の劣化が酷くならないかという懸念です。低温時の湿度(結露)と、夏にどれだけ高温になるかという2点がポイントでしょうか。
 
まず対策をするにしても、実際にどのような温度湿度環境なのか知らなくてはなりません。そのためだけに高価な自記記録計などを準備する余裕はないので、簡単なものを作ってみることにしました。ネットで調べてみると色々簡単にわかってしまう今の時代はとても素晴らしいと思います。
 
さて、温度や湿度をデジタルで出力する素子を検索すると、DHT11とか、DHT22またはAM2302などがよく使われているようです。型番に違いによって測定範囲や精度が若干異なるようですが、使い方はほぼ同じです。
 
【比較】()内はDHT22の値
DHT11DHT22
Ultralow costLow cost
3to 5V power and I/O(同じ)
2.5mAmax current use during conversion (while requesting data)(同じ)
Goodfor 20-80%0-100%humidity readings with 5% 2-5%accuracy
Goodfor 0-50°C -40 to 125°C temperature readings ±2°C±0.5°C accuracy
Nomore than 1 Hz0.5 Hz sampling rate (once every second)(once every 2 seconds)
Bodysize 15.5mm x 12mm x 5.5mm15.1mm x 25mm x 7.7mm
4pins with 0.1" spacing(同じ)
 
これをArduino Uno(パチモノ)に接続してデータを得てみます。
 
ライブラリーは、「DHT-sensor-library-master.zip」をダウンロードして展開しています。このなかの「examples」の中に「DHTtester.ino」というテストスケッチがありますが、今回は、これを少し変えて使ってみました。(末尾に掲載)
なお、コンパイル中にライブラリーとして、「Adafruit_Sensor-master.zip」を展開したものも要求されましたので追加しました。サンプルスケッチを使う場合のライブラリー関係はコンパイルしてみないとわからないところがあります。
 
センサーモジュールは、DHT11に外付け抵抗(プルアップ用と思われます)とヘッダーピンをつけたものです。DHT11の脚は4本ありますが、実際に使う配線は5VDataGND3本です。5VGNDArduino Unoの対応するピンにつなぎます。
Dataピンは、スケッチ上で変更はできますが、デフォルトは、D2ピンでした。
 
イメージ 1

 
 
次に、修正したスケッチをコンパイル、ボードに書き込んで、シリアルモニターを立ち上げると一定の時間毎にデータを読み込んで、シリアルモニターに表示してくれます。
イメージ 2

 
  
イメージ 3

 
今後の拡張予定としては、時刻を記録するためにリアルタイムクロックモジュールを付け、パソコンのシリアルモニターを使わなくても良いようにLCD表示モジュール、また、データ保存のためのSDモジュールなどを付けていきたいと思います。
 
 
【今回使用したスケッチ】
//Example testing sketch for various DHT humidity/temperature sensors
//Written by ladyada, public domain
 
//Modifiedas sketch_feb27a_DHTtester_OK.ino on Feb.27,2017
 
#include<Adafruit_Sensor.h>
#include"DHT.h"
 
#defineDHTPIN 2     // what digital pin we'reconnected to
 
//Uncomment whatever type you're using!
#defineDHTTYPE DHT11   // DHT 11
//#defineDHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#defineDHTTYPE DHT21   // DHT 21 (AM2301)
 
//Connect pin 1 (on the left) of the sensor to +5V
//NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
//to 3.3V instead of 5V!
//Connect pin 2 of the sensor to whatever your DHTPIN is
//Connect pin 4 (on the right) of the sensor to GROUND
//Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
 
//Initialize DHT sensor.
//Note that older versions of this library took an optional third parameter to
//tweak the timings for faster processors. This parameter is no longer needed
//as the current DHT reading algorithm adjusts itself to work on faster procs.
DHTdht(DHTPIN, DHTTYPE);
 
inti;
voidsetup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");
  i=1;
  dht.begin();
}
 
voidloop() {
  // Wait a few seconds between measurements.
  delay(5000);
 
  // Reading temperature or humidity takesabout 250 milliseconds!
  // Sensor readings may also be up to 2seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit(isFahrenheit = true)
  float f = dht.readTemperature(true);
 
  // Check if any reads failed and exit early(to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read fromDHT sensor!");
    return;
  }
 
  // Compute heat index in Fahrenheit (thedefault)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit= false)
  float hic = dht.computeHeatIndex(t, h,false);
 
Serial.print(i++);
Serial.print("\t");
//  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
//  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
//  Serial.print(f);
//  Serial.print(" *F\t");
//  Serial.print("Heat index: ");
//  Serial.print(hic);
//  Serial.print(" *C ");
//  Serial.print(hif);
//  Serial.println(" *F");
  Serial.print("\n");
}

世界時で2016年の最後にうるう秒が追加されました。日本時間だと、2017年1月1日午前85959秒の後に、5960秒が追加されました。うるう秒の理由は原子時(原子の振動数基準)と協定世界時(地球の自転周期基準)の差が大きくならないようにするためのものですが、手持ちのGPS世界時計(いまは絶版ですが、秋月電子通商で販売されていた)でどのように表されるのかムービーモードで撮影してみました。
一部を静止画像として取り出してトリミングしたものです。
85959秒の次が85960秒で、その次が90000秒になっています。

イメージ 1


イメージ 2


イメージ 3


イメージ 4





EQ-DIRECTUSB接続のケーブルの作り方は、THEEQMOD PROJECThttp://eq-mod.sourceforge.net/の他、数多くの記事で紹介されています。

 

今更ですが、私も1つ作ってみました。

 

まず、RS232CUSBを変換するためのアダプターですが、一番有名なFTDI社のTTL-232R-5Vを購入しました。他にも価格にずっと廉価なものもありますが、今回はあえて冒険はしませんでした。購入先は秋月電子通商で1950円でした。

 形状的には片側6ピンのピンジャック、反対側がUSBのケーブルですが、変換用の素子がUSBコネクター本体の中に入っているということです。

http://akizukidenshi.com/catalog/g/gM-05841/

 
イメージ 1


本製品は電圧5VTTLレベルのものです。AZ-EQ6GTのコントロールポートは、5V耐圧の3.3V入力とのことですので、大丈夫だと思います。
 

6ピンのコネクターの信号は、上から、黒:グラウンド、茶:CTS、赤:5V、橙:TXD、黄:RXD、緑:RTSとなっています。ピン番号はカラーコード+1になっています。
 
一方、http://eq-mod.sourceforge.net/eqdirect2.htm から、接続に関する部分のみを抜粋すると以下のようになります。


HEQ5 / AZEQ6-GT
You will need to splice a RJ45 cable to the flying lead of the TTL232R. Connect as follows:
Solder Pin 4 of the RJ45 to the TTL232R Black wire (GND)
Solder Pin 5 of the RJ45 to the TTL232R Yellow wire (RXD)
Solder Pin 6 of the RJ45 to the TTL232R Orange wire (TXD)

 

HEQ5 / AZEQ6GT

Solder Pin 4 of the RJ45to the Black wire (GND)

Solder Pin 5 of the RJ45to the Yellow wire (RXD)

Solder Pin 6 of the RJ45 to the Orange wire(TXD)

 
RJ45というのは、形状的には一般に使われているLANケーブル(8ピンモジュラー)と同じだと理解しています。UTPも同じ。
 

モジュラーのコネクター用製作工具を持っているひとは、TTL-232R-5Vのコネクターを切って工作すれば良いのですが、持っているひとは少ないでしょう。

 

CAT5LANケーブルのコネクターの片方を切って、TTL-232R-5Vにつなげるのが簡単と思われます。この時、LANケーブルの中の電線被覆の色と、ピン番号の対応を確認しなくてはなりません。

 

(1)規格を調べる。

(2)透明なコネクターを拡大して見る。

(3)テスターで導通を測る。

などの方法いずれでも良いのでしょうが、念のためクロスチェックしてみました。
まず、規格ですが、A配線、B配線の2種類があり、両側が同じならストレートケーブル、違っていればクロスケーブルとのことです。
Aの場合
(1ピン)白・緑
(2ピン)緑
(3ピン)白・橙
(4ピン)青
(5ピン)白・青
(6ピン)橙
(7ピン)白・茶
(8ピン)茶
 
 
Bの場合
(1ピン)白・橙
(2ピン)橙
(3ピン)白・緑
(4ピン)青
(5ピン)白・青
(6ピン)緑
(7ピン)白・茶
(8ピン)茶
 
4ピン、5ピンの色は、どちらでも青、白・青で同じです。かんたんに見分けるには2ピンまたは6ピンのどちらが橙か緑かを気をつければ良いようです。
 

 
イメージ 2

手持ちのLANケーブルをルーペで見てみると、2ピンが橙、6ピンが緑のようです。ちなみに、見ただけではよくわかりませんが、1ピンは白・橙のパターンのはずです。そう言われてみればそう見えます。
 
従って、このLANケーブルの場合は、以下のように接続すれば良さそうです。
LANケーブルの青   - USB変換ケーブルの黒
LANケーブルの白・青 - USB変換ケーブルの黄色
LANケーブルの緑   - USB変換ケーブルの橙
 
 
ここで、次に考えたのは、LANケーブルの長さです。切って接続する場合、後から長さを変えることは出来ません。そこで、短めに作っておいて、長さが足りない時は、次のような延長コネクター(ダイソー製、108円)でケーブルを繋げれば良いだろうと考えたのですが。
 
イメージ 3

 
ふと、力をかけてコネクターをひねってみると。
 

 
イメージ 4

簡単に分解できてしまいました。このコネクターの配線に直接、USB変換ケーブルの配線をつないでしまえば、LANケーブルの長さを気にすることもなく、ケーブルを切ることもなく出来てしまいそうです。
また、ピン番号と、配線色のチェックをしなくてなりませんが、これは簡単に見分けられるので、以下のようになっていました。規格でもなんでもないので、この情報は他では役立ちません。
1-青、2-橙、3-黒、4-赤、5-緑、6-黄、7-茶、8-白
 
表側
イメージ 5

裏側
イメージ 6

 
従って、こちらの接続は、以下の通りです。
コネクターの赤 - USB変換ケーブルの黒
コネクターの緑 - USB変換ケーブルの黄
コネクターの黄 - USB変換ケーブルの橙
 

 
イメージ 7

コネクターを介して、USB変換ケーブルと、LANケーブルが接続できました。このEQ-DIRECT準拠のケーブルを用いれば、SynScanコントローラー無しで、PCAZ-EQ6GTが直接、接続され、プラネタリウムソフトでコントロールできるはずです。
 
 
 
 
 
 

 動画モードで撮影して、タイムマークを1秒毎に入れれば簡単に現象の起こった時刻がわかる、というのは、まあ、正しいのですが、撮像面をライン走査して画像を得ているので、いわゆるローリングシャッターの影響で、フレームの露光開始時刻とタイムマークの時刻の関係や、現象の起こる画像上の位置と時刻の関係は、考え方を整理しておかないと混乱してしまいます。

 正確な記録時刻(フレームの最初のラインの記録開始時刻、下図のt1またはt4)を得るためには、フレームとフレームの間隔(sec)(下図のt4-t1、フレームレートの逆数)と、1ラインを走査する時間(sec/line)(下図の(t2-t1)/(Lb-Lt))を知る必要があります。
イメージ 1


 フレームレートは、一般に1280x720の(セミ)ハイビジョン規格(720p)では59.94frames/sec)と決められています。また、ライン走査時間は、以前に述べたように、高速で点滅するLEDを高速シャッターで撮影することで求めることも出来ます。

 でも、いずれにしても規格通りかどうかわからない、別途基準周波数源が必要になるなど、美しくありません。

 今回は、GPSPPS信号によるLED発光を記録するだけで得られるように検討してみました。
 
 使用したのは、以前に紹介したGPS世界時計(Tristate社製、秋月電子通商販売)です。GPSに同期した秒信号(PPS)は、パルス幅80μsecのオープンコレクタ出力で、100mAのドライブ能力があります。この出力に接続した高輝度LEDを接写リング内に取り付けてEOS60Daの撮像面を照射します。

 動画モードは、1280x720(約60fps)の(セミ)ハイビジョンモードを使いました。

 この構成で約30秒間動画撮影し、その動画から約2000枚のJPG画像を抽出し、その中から連続した6フレームを下に示します。

イメージ 2 イメージ 3 イメージ 4 イメージ 5 イメージ 6 イメージ 7

3
フレーム目下半分と、4フレーム目上半分に露光されています。

 この画像から、各フレームの中の各々のラインの露光時刻を求めますが、シャターのタイミングと、LEDの発光タイミングの関係は先に示した図のとおりです。再掲して説明します。
イメージ 8

 横軸が時刻、縦軸が画面の中の縦方向のラインの位置です。斜めの青い線がシャッターが開くタイミング、赤い線が閉じるタイミングを示します。また、縦の緑の実線が、LEDの発光開始、終了のタイミングを示します。緑の破線はLEDの発光タイミングが異なる場合の例です。

 1秒間のフレーム数は完全に整数ではないので、フレーム露光とLED発光のタイミングはだんだんずれていきます。実は、完全に一致しているとこのような方法でスキャン時間を求めることは出来ないのですが、ズレていることを逆に利用してフレームレートとスキャン時間を両方共求めることが出来ます。少しだけズレている、揺らぎがあるということは、実は、非常に重要なことです。

 さて、この図において、フレーム1の上端のラインLtは、時刻t1に露光が開始されます。一定のスキャン速度で順次、次のラインの露光が開始され、時刻t2にはフレームの下端のラインLbの露光が開始されます。その後、フレームレートに応じた時間の経過後、フレーム2の上端のラインが時刻t4に露光開始されます。 なお、フレームレートをFRで表すと、FR=1/(t4-t1)になります。
下端のラインLbの下には、実際には画面がありませんが、時刻t4まで同じスキャン速度でスキャンしていれば到達できた仮想のラインの数をLvとします。
 一方、露光の終了は、フレーム1の上端では時刻t3、下端ではt7となります。また、LEDは、時刻t5に発光開始、t6に終了します。
 LEDは画面全体を照射していますが、画面内のラインの露光がされていない時には明るく記録されません。
フレーム1の場合、L3より上のラインは、LEDが発光開始した時には既に露光が終了しているので、明るくなりません。L3L4の間では、LEDが発光している間に露光が終了するので、徐々に明るく記録されるようになります。L4より下のラインは露光終了以前にLEDの発光期間全体が記録されますので、一定の明るさとなります。ただし、LEDの照射むらがあると変わります。

 フレーム2では、L2より下のラインは、露光が開始される前にLEDの発光が終了してしまうので、明るく記録されません。L1より上のラインは、露光開始後にLED発光の全期間が記録されるので一定の明るさとなります。

 実際には明るさの変化から、L4の位置、またはL1の位置を判断することは難しいので、LEDの明るさを極端に明るくして発光開始後直ちに露光飽和させることによってほぼ2値化させてしまい、L3L2の位置として求めることにします。

 なお、図の緑の破線のように、LED発光タイミングと露光開始、終了のタイミングが重ならない場合は、画面全体が明るいだけとなり、今回の目的のデータとしては利用できません。

 フレームレートは約60fpsなので、およそ60フレーム毎にLED発光が記録されます。L3の位置、またはL2の位置、どちらでも良いのですが、ここでは、L3の位置を測定し、フレーム番号を横軸としてプロットすると下図のようになります。フレームレートが整数ぴったりではないので、徐々にLED発光タイミングとスキャンがずれていく様子がわかります。
 
イメージ 9


2本の直線の横方向の距離をDFとすると、DFは、フレームレートFRの小数部分の倍数がちょうど整数になるのに必要な時間に相当します。図を考察すると、フレームレートは60fpsよりわずかに小さいことが推測されるので、(60-FR)*DF = 1と仮定して良さそうです。測定値からDFは約 998.25と求められましたので、FR = 59.940fpsとなりました。規格では59.94fpsなので問題ないと思われます。

一方、2本の直線の縦方向の距離は、先の説明図のLvに相当します。フレームレートFRとの関係を用いて、1ラインスキャンするのに必要な時間tls1/(Lv*FR)となります。測定値からLv=1090.3と求められましたので、1ラインあたり15.302μsecと計算されます。フレームの上端と下端までは720ラインなので、上と下で記録時刻が11.016msec違うことになります。

最後に、先の説明図のフレーム2の上端の記録開始時刻t4を求めます。

図では、L2の露光開始時刻とLED発光終了時刻がt6で一致しています。LED発光開始が正秒なので、LEDの発光パルス幅tled(=80μsec)とラインスキャン時間tlsから、t4=正秒-tled-L2*tlsとなります。

正秒が具体的に何時何分何秒なのか、正分パルスはGPS世界時計から出力されていますので、それも画面に記録できるように工夫が必要かもしれません。動画の音声チャンネルを使うという禁断の手もあるのですがどっちが簡単かなやんでしまいます。

【謝辞】
今回の検討にあたり、セッピーナさんのブログを参考にさせていただきました。いつもながら大変感謝しております。
主な参考ページ
「デジカメのセンサー走査時間を測る方法」
「動画の撮影時刻を知る(1)
 

1221日の撮影(http://blogs.yahoo.co.jp/thought_of_stars/17673234.html)で、5.5等星の星食はまず問題なくムービー撮影できることがわかりました。次に、どのモードでどのくらいの星まで記録できるのか確認のため、M45をムービー撮影してみました。
EOS60Daにはいくつかのモービー撮影モードがありますが、以下の4通りで撮影してみました。
 
(1)640x480ピクセル、60frames/sec
(2)1280x720ピクセル、60frames/sec
(3)1920x1080ピクセル、30frames/sec
(4)640x480ピクセル(クロップ)、60frames/sec
 
撮影後、EOS付属のソフトImage Browser EXJPG画像にして抽出して、明るさコントラストを補正した画像を調べます。
もちろん、実際の星食の時には明るい月がそばにあるので、背景のカブリが増え、実際に観測可能な等級はもっと明るいものに限定される可能性大です。
なお、明るさの基準として、M4530秒露光で撮影した画像を反転してネガにして、それに、高機能星図ソフトHNSKY*)で調べた等級を書き込んだ星図(一番下に掲載)を作りました。これと比較して、ムービー撮影で写っている星から限界等級を求めてみました。
 EOS60Daは赤い方の感度が視感度より高いので、赤い星は比較的明るく撮影されるはずで、視等級とは若干異なった結果となるかもしれません。
 
 
(1)640x480ピクセル、60frames/sec
イメージ 1
5.8等級、6.1等級などははっきりと写っています。7.2等級、7.3等級でも写っている星もあります。6.4等級、6.7等級でも写っていない星もあります。
 
(2)1280x720ピクセル、60frames/sec
イメージ 2

6.16.46.7等級あたりはだいたい写っています。7等級台になるとはっきりとしません。
 
(3)1920x1080ピクセル、30frames/sec
イメージ 4

露出時間が約1/30秒と長いので、7.17.4等級でもはっきりと写っています。場所がわかっていれば、8.18.3等級でも認識できます。
 
(4)640x480ピクセル(クロップ)、60frames/sec
イメージ 3


3例が、精細度は違っても、画角がほぼ同じでM45全体が写っているのに対して、クロップの場合は、中心部だけピクセルそのままに記録されるようです。約7倍に拡大されることになるそうです。
逆に言うと、他のモードではピクセルが間引きされているので、そのやり方によってはデータを捨てている可能性もあります。ビニングしているかどうかはかなり怪しいように思えますので位置によって明るさが変わる可能性が排除できません。
アルシオーネ付近だけの拡大になりますが、8.5等級でも良く写っています。
 
HNSKYで調べた等級(例えば3.9等級を392桁で表記)を記載したM45付近の写真(ネガ)(見にくい場合は拡大してください。)
イメージ 5


201512042046分ころ30秒露光で撮影(白黒反転)

AL107PH直焦点、AZ-EQ6GTで放置追尾

EOS60DaISO3200)、30秒露出

 
 

*HNSKYHello NorthernSky)は、TYCHO2++と呼ばれる星表をもとにした星図ソフトで、12.5等星まで約4500000の星が含まれ、星にポインターを合わせると等級などが表示されます。Northern Skyとありますが北天のみならず全天の星が表示されます。

http://www.hnsky.org/software.htm 、

日本語化は、http://e133n35jp.web.fc2.com/kaisetu/Hnsky_Convi.htm

 (2015/12/24にアップした文章は誤解している点があったので差し替えさせていただきます。既にお読みの方にはすみませんでした。2016/01/13


高速で点滅するLED光を撮像面全体に当てて高速シャッターで動画撮影すると下のような画像が得られます。LED光は全面に当てているのに縞模様になります。これについて考えて見ます。観測時刻精度を少しだけ向上させられる可能性があります。
 
イメージ 1
かつての銀塩フィルム一眼レフではフォーカルプレーンシャッターが一般的でしたが、CCDCMOSの撮像素子が実用化されてからは、電子式のシャッターが併用されることがあります。
どちらもそうですが、シャッターがレンズ主点付近にあるレンズシャッター式を除いて、シャッターが撮像面をスキャンすることになるので、撮像面上の位置によって、露光されている時刻は若干異なります。撮像面の位置によらず同時刻に露光されるものをグローバルシャッター、スキャンして露光するものをローリングシャッターというようです。
それとは別に、昔のテレビカメラでは、スキャンの方式として、インターレーススキャン(奇数ラインをスキャンした後で偶数ラインをスキャンして両方合わせて1フレームを構成する)とプログレッシブスキャン(1回のスキャンですべてのラインを読みだして画面を構成する)がありますが、EOS60Daの場合、30pとか、60pとあるようにプログレッシブスキャンのようです。
さて、話を戻して、ローリングシャッターの場合、撮像面上の位置によって露光された時刻が異なります。また、厳密にはライン転送かピクセル転送かによって異なりますが、私の知る限りの資料では、EOS60Daがどちらかわかりません。CMOSなのでピクセル単位と思われますが、どちらにしても常識的には横方向にはほぼ同一時刻(0.1m秒以下)と考えて大丈夫と思います。
 
●スキャン方向は上から下か? 下から上か?
  縞模様の画像からはどちらかわからないので、フレームレートよりLEDの点滅周期を長くして、フレームのスキャン途中で発光状態の違う画像を探します。
以下の画像は、短時間のPPSパルス信号(LED)を1/60のシャッター速度で撮影したもののうち、発光が記録された連続6コマの画像です。

イメージ 2 イメージ 3 イメージ 4 イメージ 7 イメージ 5 イメージ 6
      
3フレーム目では、シャッターが閉じる途中でLEDの発光が始まっていると考えられます。時間的に見て、前半はシャッターが閉じてからLEDが発光しているので、暗くなります。後半はシャッターが閉じる前にLEDが発光しているので明るくなります。
また、次のフレームでは、シャッターが開き始める途中でLEDが消灯していると考えられ、時間的に後半ではシャッターが開く前にLEDが消灯しているので暗くなります。
このようにして考えると、スキャン方向は、上から下に向かっていることがわかります。
 
●スキャンの速度は?
 縞模様画像に戻りますが、点滅の周期は(ほぼ)正確にわかっているので、縞の周期(ライン数)からスキャンの速度(ライン/sec)がわかります。逆に、縦のライン数は1080とか720、480と決まっているので、上端と下端では、露光時刻がどれだけ違うのか計算できます。
イメージ 8


 この例では、LEDの点滅周波数は200Hz*)、縞の周期が約295ラインなので、スキャン速度は約59000ライン/secとなり、1フレーム1080ラインであることから、その上端と下端の露光時刻の違いは、18.3msec1/54.6sec)だと考えられます。
 
*)プログラマブル水晶発振・分周器(SUWASEIKO8651A)を2kHzに設定し、10進カウンタ(SN7490AN)+10進デコーダー(SN7442AN)によって周波数200Hz(デューティサイクル1:10**))としてLEDを点灯させました。製造番号が古い!

 
イメージ 9

**)信号波形のデューティサイクルは1:10ですが、画像を見ると、明るいところの幅は周期の1/10になっていません。これは、LEDの発光波形(強度)がなまっているわけではないと思います。以下のようにLEDの点灯タイミングとシャッター速度及びスキャンのタイミングの関係で蓄積時間が変化し、LEDの発光波形と、画像の縞の強度パターンは相似にはなりません。
 以下の図で、横軸はスキャン開始からの経過時間(t1t2など)、縦軸がスキャン位置(ライン、L1L2L3L4など)です。

イメージ 10


各ラインはスキャン時間に応じた時間遅れで、シャッターが開放され、シャッター速度(ts)で決められる時間後に同じタイミングでシャッターが閉じられます。左上から右下への斜めの青線は各ラインの露光開始時刻(シャッター開)、赤線は露光終了時刻(シャッター閉)です。この例では、シャッター速度がフレームレートよりずっと短い場合です。

シャッターが開いている間にLEDが点灯(t1で点灯、t2で消灯)すれば、その時間の重なりの分だけ明るさが蓄積されます。L1では、シャッターが閉じる瞬間にLEDが点灯しますので、ここから明るくなります。蓄積時間は下のラインに行くに従って長くなり、明るくなります。L2では、シャッターが開くと同時にLEDが点灯し、シャッターが開いている間はLEDが点灯していますので、最高強度になります。その後、シャッターが閉じるときにLEDが消灯するL3まで、シャッターが開いている間はずっとLEDが点灯しているので最高強度のままになります。L3からはシャッターが閉じる前にLEDが消灯するので、徐々に蓄積時間が短くなり、L4ではシャッターが開くと同時にLEDが消灯するので明るさは蓄積されなくなります。

シャッター速度とLEDの点灯時間の関係によっては、L2L3は逆転する場合があります。

このように、LEDの発光波形が矩形でも縞の強度パターンは台形となり、縞の強度パターンのデューティサイクルはLEDのデューティサイクルより長く(大きく)なります。

 フレームレートより長いLED発光パルスで時刻計測しようとする場合、この比例部分の足(露光開始・終了時刻)の判定が精度に影響をあたえるかもしれません。
 一つの解決方法は、LEDの発光強度を極めて明るくして、わずかでも点灯したら蓄積時間に関わらず直ちに飽和してクリッピングしてしまうくらい明るくすることではないかと思います。
 
●フレームの露光時刻はいつ?
 予定では、GPSPPS信号でLEDを点灯させ、それを撮像面全面に当ててフレームの露光時刻を得る予定です。この時のLED発光はごく短時間なのですが、先に説明したように、シャッター速度に応じた分だけフレームの中のラインが明るくなるはずです。なるべく暗い星まで記録しようとすると、フレームレートとシャッター速度はほぼ等しくなるので、2フレームにまたがって明るくなるはずですが、その処理について今後勉強する予定です。LEDが十分に明るければ問題はないはずなのでここは楽観的に考えています。
 
【謝辞】
今回の検討にあたり、セッピーナさんのブログを参考にさせていただきました。いつもながら大変感謝しております。
主な参考ページ
「デジカメのセンサー走査時間を測る方法」
「動画の撮影時刻を知る(1)
 

学生の頃、星食観測をして水路部に報告したこともありました。望遠鏡で覗きながら、JJYと一緒に声を録音して後から聞いて0.1秒単位で記録していましたが、実質0.3秒の精度ぐらいだったでしょうか。
その後、8mmビデオで撮影してコマ送りして食の時刻を観測したりしたこともありましたが、なかなか周辺機材を揃える余裕がなく、今ひとつ精度が上がりませんでした。また、ビデオ画像の記録処理の問題と思いますが、一コマ約1/33秒にも関わらず、潜入時に明るさが暗くなり始めてから完全に消えるまで数コマかかっており、現象の時刻記録としては信頼がおけなかったのも今ひとつ力の入らなかった原因です。知識、道具、時間がもう少しあればなんとかなったかもしれませんが残念でした。当時、LimovieLight Measurement tool forOccultation observation used Video rEcorder)またはそれに類するものが使えれば、もう少し違った展開があったかもしれません。自分で自由に使えるPCを入手したのも2年ほど前ですから、デジタルデバイドの向こう側の住人でした。
さて、再開にあたって、時間基準にJJYではなくGPSを使ってみることにしました。
PPSパルス信号の出力のあるGPSモジュールはいろいろあるようですが、ここでは動作確認が容易と思われる、Tristate社製のGPS世界時計(販売:秋月電子通商、古野製特注GPSモジュール使用)の利用を考えています。先に購入したものです(http://blogs.yahoo.co.jp/thought_of_stars/17565379.html)。
UTCに同期したPPSパルス(パルス幅80μ秒、LED発光と定格100mAのオープンコレクタ出力)のほか、NMEAデータを元にした正秒、正分、正時、正日、正月パルス(パルス幅100m秒、LED発光と定格100mAのオープンコレクタ出力)が利用できます。
Tristate社に確認してみたところ、このモジュールは時刻予告型のNMEAだそうで、受信時点での次の正秒時刻が得られるような設計とのことです。具体的には$PFEC,GPastセンテンスで時刻を得た時点で正秒LEDが点灯開始するため、PPSパルスより早めに点灯することになります。どれだけ早いかは受信状態等に左右され、実際に測定してみた時は、最大0.1秒以上違うこともありました。
この辺りを、EOSの動画モード(公称約60コマ/秒)で撮影して確認してみました(実は、動画にとってみたら違うことがわかったのでメーカーに原因を聞いてみたというのが本当のところです)。
撮影したファイルをEOS付属のソフトImage Browser EXでコマ毎にJPGファイルに変換して比較してみます。ちょうど00秒になるところで、正秒LEDと正分LEDが同時に点灯するタイミングです。点灯時間が100m秒なので、約6コマに相当しますが、立ち上がりと立ち下がりはコマの中間なので足掛け7コマでLEDが点灯している様子が記録されています。PPSLED80μ秒と短いパルスなので、正秒LEDの点灯開始から6コマ目のみ写っています。
青いLEDがPPS信号、緑LEDが正秒、赤LEDが正分です。


(1)正秒LED、正分LED点灯前
イメージ 1


(2)正秒LED、正分LED点灯開始(立ち上がり)
イメージ 2


(3)正秒LED、正分LED発光中
イメージ 3


(4)正秒LED、正分LED発光中
イメージ 4


(5)正秒LED、正分LED発光中
イメージ 5


(6)正秒LED、正分LED発光中
イメージ 6


(7)正秒LED、正分LED発光中、PPSLED発光
イメージ 7


(8)正秒LED、正分LED発光終了(立ち下がり)
イメージ 8


(9)正秒LED、正分LED消灯
イメージ 9


 
別のケースだと、正秒パルスが早すぎて、消灯後5コマ目でPPSLEDが点灯していました。
(1)正秒LED、正分LED点灯前
イメージ 10


(2)正秒LED、正分LED点灯開始(立ち上がり)
イメージ 11

   (3)
正秒LED、正分LED発光中
イメージ 12

 
(4)正秒LED、正分LED発光中
イメージ 13


(5)正秒LED、正分LED発光中
イメージ 14


(6)正秒LED、正分LED発光中
イメージ 15


(7)正秒LED、正分LED発光中
イメージ 16


(8)正秒LED、正分LED発光終了(立ち下がり)
イメージ 17


(9)正秒LED、正分LED消灯
イメージ 18


(10)          正秒LED、正分LED消灯中
イメージ 19


(11)          正秒LED、正分LED消灯中
イメージ 20


(12)          正秒LED、正分LED消灯中
イメージ 21


(13)          正秒LED、正分LED消灯中、PPSLED発光
イメージ 23



(14)          正秒LED、正分LED消灯中
イメージ 22


 
したがって、実際の観測には正秒パルス(100m秒)ではなくPPSパルス(80μ秒)を使う必要があります。
 
 

この頃は全く手を出していませんが、星食などの観測の時には、事象の起こった時刻を正確に記録することが大切です。
ずっと昔は、望遠鏡を覗きながら、テープレコーダーにJJY報時音と一緒に、出た、隠れた、などという声を録音して、後で聞き直して記録をつけたりしました。
その後、例えば、秒単位で時刻記録できるビデオカメラで撮影し、コマ送りで再生して見る等、より精度の高い方法が簡単に行えるようになりました。
しかし、GPSユニット(または電波時計等)が内蔵されていたり、外付けで追加できる場合を除いてカメラの時刻は結構ずれていたりします。
 
まあ、どのように使うかということはいろいろな方法が考えられますが、実験用に信号を取り出すことのできる正確な時計が欲しかったので、秋月電子通商のGPS世界時計キットを買ってきました。(http://akizukidenshi.com/catalog/g/gK-04705/
 
GPS信号の中から位置情報ではなく、時刻情報を取り出して出力するものです。
出力される1ppsのパルスはUTCに同期していて、なんと1/0000秒程度の正確さがあるそうです。この精度は、GPSでは、位置測定でGPS衛星までの距離を求めて電波の伝搬時間を補正することにより達成されており、伝搬距離の補正の出来無い長波を用いる通常の電波時計よりずっと精度が高くできます。(豚に真珠、猫に小判、馬の耳に念仏、などというフレーズが頭のなかを駆け巡りますが。)
 
キット自体は、表面実装部品で大部分の部品が基板上に予め取り付けられているので、スイッチや電解コンデンサー、コネクター等の半田付けのみと簡単で、猫に邪魔されながらも1時間ちょっとで半田付けが終わりました。付属の5mのケーブルを使って本体とアンテナは離して室外に置けます。電源をつなぐと約40秒でPPS信号が得られ、その後5分くらいでPPS信号出力+UTC完全同期が完了します。


最初にブートアップメーッセージが出ます。
イメージ 6


イメージ 1


それからGPS衛星からの電波を捉えてイニシャライズします。
イメージ 2



UTCに同期し、受信状態が良いと、右上に+Uという文字が出て、PPS信号も出力されます。LCDの上の左側のPPSという青色LEDが1秒間に1回1.5msec点灯します。

イメージ 3


電波状態が悪くなると、*Uという表示になり、UTCと同期はしているものの、PPS信号が出力されなくなります。
イメージ 4



GPS衛星からの信号が受信できなくなると、内部のリアルタイム・クロックによる表示となり、*Rと表示されます。
イメージ 5

PPS信号のほか、正秒、正分、正時、正日、正月(「しょうがつ」ではない)のパルス信号が得られます。正月というのは、かなり気の長いパルス間隔です。
位置固定モード専用に設計されているそうで、場所が変わるとコールドスタートする必要があるというのが注意点です。
今回は勉強用ですので、多機能なものですが、星食観測用には必要な機能に特化したほうが良いのでネットを漁って勉強しようと思います。
 

パナソニックのCF-S9というパソコンを使っています。1年ぐらい前に中古で3万円でヤフオクで落札したものです。5年位前から仕事でCF-S8を使っていて、使い勝手が良かったので、値段がこなれてきたこともあって個人用に入手したものです。

こちらのCF-S8SSD120Gにメモリー8GWindows7(64bits)で快適に使っていましたが、CF-S9HDD256Gと多いもののSSDではなく、メモリーも本体内が2Gなので、増設しても6Gまでにしかなりません。使っていて、立ち上げに結構時間がかることが不満でしたが、今回、思い切ってHDDSSDに換装して見ることにしました。

以前にCF-W2HDDを容量の大きなものに換装した時はHDDを取り替えるのに、随分分解しなくてはならず苦労した記憶があるので、躊躇していたのですが、ネットで調べてみると、CF-S9HDDは、バッテリーを外してネジを2本外すだけでHDDが取り出せることがわかり、もっと早くやっておけばよかったと思いました。拍子抜けでした。

HDDの内容は、まるごとコピーできるフリーソフトもあるようですが、トラブルと大抵泥沼になるので市販品を使いました。SSD256Gにしておきました。それに作業用の外付けSTA-USBケースを足してAmazonでまとめて購入しました。

SSDCFD CSSD-S6T256NHG6Q 256GB 2.5inch TOSHIBA製 ¥ 11,063
・ケース:Inateck2.5インチ SATA HDD SSD対応¥ 1,899
・ソフト:HD革命/CopyDrive Ver.6 通常版 ¥ 3,600
 
イメージ 1

まず最初に、ソフトを元のパソコンにインストールします。シリアル番号を入力し、アップデートを確認します。もとはVer6.0でしたが、アップデートの結果、Ver6.0.1になりました。
 
SSDを外付けケースに入れ、付属のUSB3ケーブルでパソコンに繋ぎます。フォーマットしていないのでこの段階ではWindowsでは認識しません。
Arkランチャーから「ハードディスクのコピー」を選択すると、コピー元とコピー先のドライブを指定する画面になり、本体のドライブCをコピー元、ドライブ2Windowsのディスクとしては認識されていない)をコピー先に指定しました。容量が数G違ったので、ディスクサイズを合わせるというオプションを選択しました。実際の内容は200G以下ですが、コピーには3時間弱かかりました。
 
さて、HDDSSDを入れ替えます。パソコンのバッテリーを外すと、何やら蓋が見えます。

イメージ 2


ネジを2本外すとコネクタが見えます。HDDには、白いプラスチックのタグシートが付いているので、これを引っ張って引き出します。

イメージ 3


引っかかる場合はHDDを少し押さえると良いようです。少し引き出したらコネクターを外します。HDDはその後スムースに引き出すことが出来ました。HDDの下に見えている白いシートが引き出し用のタグシートです。

イメージ 4


SSDをケースから出して準備します。タグシートがないと引き出すときに難儀するので、HDDから慎重に剥がしてSSDの同じようなところに貼り付けます。接着剤ではなく両面テープのようです。差し込むときにパソコン内の緩衝材に引っかからないように薄い紙をガイド用に使ったほうが良いというネット記事もありましたが、特にそのようなことをしなくても差し込むことが出来ました。コネクターを差し込みます。最後に、蓋をはめて、2本のネジを締めれば作業終了です。
 
バッテリーを入れてパソコンのスイッチを入れると、立ち上げ時にCHKDSKが起動してディスクの検査が始まりました。ディスクの内容は同じはずですが、何か状態が違うことが検出されたのでしょう。
また、起動している時にディスクのデバイスドライバーをインストールされるようです。最初の1回だけでしたけれども。

その後は、特に問題もないようです。プログラムの起動時間がかなり早くなったように思います。Windowsのエクスペリメンタルインデックスで比較したかったのですが、デバイスドライバーの互換性の問題か、測定できないと表示され(下記注追記)残念ながら数値的なもので確認することは出来ませんでした。CrytalDiskMarkなど別途ソフトで測定しておくべきでした。今更比較のためだけにSSDHDDに戻す気にはなれませんでした。

体感的には、プログラムの立ち上げ等が格段に早くなった感じで、大変満足しています。

 

(追記2015/09/30)何故かエクスペリメンタルインデックスが測定できるようになりました。デバイスドライバーの自動更新が有ったのかもしれません。エクスペリメンタルインデックスの中のプライマリーハードディスクのスコアが5.8から7.5に向上しました。


 モーター等の取り付け部を少し整理して、見栄えを良くしました。電子回路がむき出しでは危ないので、カバーを付けます。

 コンビニで適当なサイズのお菓子のケースを手に入れて、長さをモーターと基板に合わせて切ったり、コード引き出しの穴を開けたりします。
イメージ 1

低発泡スチロールの板材を丸く切り抜いたものを、モーター本体の周囲に接着してサイズを合わせました。
イメージ 2

 これを押し込んで、接着して出来上がりです。非常に安直ですが、まあ問題無いでしょう。
イメージ 4


手元スイッチ(押しボタン)ですが、カメラの電子レリーズの一部にタクトスイッチを2個取り付けてコードをつなげました。ピント合わせとシャッター操作が片手で行えます。
 
望遠鏡につけるとこんな感じです。
イメージ 3


アルミアングル材で作った取り付け金具が不必要に大きく、余り洗練されていない感じです。9V電源を接続してみて、手元スイッチでちゃんと動くことが確認出来ました。定格電源は12Vですが、発熱も大きくなるので、動作に特段の問題がなければ電圧を下げたいという気持ちもあるので、DCDCコンバーターを入れるかどうか検討してみたいと思います。
 
数年前までは、秋葉原勤務だったので部品調達が直ぐにできたのですが、いまは上京の機会が少なく、ネットで入手が難しい部品の調達がままならず(思っていた感じと違う場合の再注文を含む)、思いの外、完成まで時間がかかってしまいました。
今後は実際に使ってみて問題点を洗い出し、いずれVersion2に挑戦したいです。
 
 

 マイコンの方も仕様変更しました。
電動フォーカサーのステッピングモーターを制御するマイコンには、Arduino Nanoの互換品のDCCduino Nanoを使用する予定でしたが、ヘッダーピンが邪魔で、外すのも面倒なので、手元にあったストロベリー・リナックスのDaVinci34Uを使用してみることにしました。価格的には、DaVinciの方が高いのですが、完全にArduino互換ではないのと、最近のIDE1.6.5に対応しておらず、やや使い勝手が違うので、使い方を覚えているうちに使っておこうと思ったのです。
Arduinoには、Atmel社のATmega328系のプロセッサーが使われており、本家でも様々なバリエーションの製品がありますが、更に多くの互換品があります。
その一つのArduinoLeonardoは、ATmega32u4チップを搭載したArduino純正ボードであり、ATmega32u4チップを採用することで、他にUSB-シリアルを変換するチップを不要としているそうです。サイズやヘッダーピン配列はArduino UNOとほぼ同じです。32uチップを使ったArduino Nanoクラスのサイズのものとして、ストロベリー・リナックスから、DaVinci32U w/Arduino Bootloader/ATmega32U4という製品が出されています。

イメージ 1


これは、Arduino-1.0.1IDEに追従したバージョンが書き込まれたものがあって、Arduino互換機として使えますが、現在使用しているのがIDE1.6.5で、doards.txtが対応しておらず、無理やりboards.txtを編集してもコンパイルエラーが出てしまいます。(正式な対策があるかもしれませんが未確認です。)そこで、ストロベリー・リナックスの説明書では禁止されていますが、同じ32uチップなので、Board選択でLeonardoを選択して無理やり書き込んでみました。これをやると、bootloader起動時(DaVinciとして認識される)と、通常の動作時(Leonardoとして認識される)で、デバイス名やCOM番号が異なるという現象が生じます。(下から4行目)
イメージ 2

イメージ 3

  
IDE1.0.2のころ、間違って、ボードとしてLeonardoを選択して書き込んでしまった時は、普通の状態ではIDEからCOM番号としてLeonardoのものしか認識できず、そのままでは書き込むことができなくなってしまいます。ブートローダーモードになった時はあくまで自分をDaVinciだと思っているわけです。
その対策として、リセット後の数秒間にだけDaVinciとしてのCOM番号が現れるので、リセットボタンを押して、それを素早く選択するというスキルが必要でした。
今回試したところ、1回目だけは以前と同じようにしましたが、2回目からはLeonardoとしてのCOM番号を選択したままでも書き込みができてしまいました。ブートローダー起動時は前と同じでDa VinciとしてのCOM番号が現れるのですが、不思議です。
 
イメージ 4

このDaVinciに、以前Nanoに書き込んだSGLのスケッチを書き込んで、動作を確認しました。その結果、いくつかの修正点が生じました。
コンパイル時に(SPEED)という変数でエラーが出たので、(Speed)というつづりに変更しました。前はエラーで引っかからなかったのが不思議です。
 基板の端子(ピンヘッダー)の位置の関係で、EasyDriverEnable端子ではなく、Sleep端子を使いました。ステッピングモーターは静止時にも通常以上に電流が流れますが、これらの端子を用いて制御すれば、一定時間以上停止していたらモーターへの電流をカットすることが可能です。Enable端子は、モーターへの電流のみカットできますが、Sleep端子では、プロセッサーも休止するので節電効果がちょっとだけ大きいです。Sleepの方が、復帰するときに余計に時間を要するようですが、数ミリ秒以下なので、今回の応用には問題ありません。問題なのは、名前の示す通り、動作が逆なことです。EnableLOWにした時にモーターに電流が流れますが、Sleepは、HIGHにした時に電流が流れます。それに応じてプログラムを変更しました。
コンパクトにするため、DaVinci基板とEasyDriver基板は必要な端子間を直接リード線でハンダ付けして、L字に曲げたプラスチック板の両面にホットグルーで固定し、それをモーターの取付け板にネジ止めしました。後ほど、カバーを付けることも検討したいと思います。取り敢えず動作確認用です。
イメージ 5

イメージ 6

イメージ 7


配線図は概ね以下のようになります。USB端子を介してPCからコマンドを送って動かすことも出来ますし、手動用の手元スイッチで動かすことも出来ます。DaVinciの電源は、通常はUSB端子から供給されていますが、EasyDriver側から供給することも可能ですのでPCに接続しない場合でも問題ありません。
 
イメージ 8

今回使用したSPG20-1332という超小型(ギヤヘッド径φ25mm)ステッピングモーターは1/24のギヤヘッドがついて1回転480ステップですが、EasyDriverのデフォルトモードが1/8のマイクロステップ駆動なので、1回転させるためのパルス数は3840パルスになります。モーターの歯車とR&Pフォーカサーの微動軸(1回転2mm)の歯車のギヤ比は、14なので、1mm送るのに7680パルス、逆にいうと、フォーカサーの移動量は1パルスあたり約0.13μmとなります。もちろんバックラッシュもかなり予想されますので、実際の精度、再現性は完成後のお楽しみです。
 

 今回は一部修正です。本体側の歯車は、微動ノブに両面テープまたは接着剤で固定する方法をとる予定でしたが、実際にやってみたところ、どうも相性が悪く簡単にずれてしまいました。以前にDDGでうまく行ったのですが・・。

仕方ないので、微動ノブの軸(直径4mm)と、歯車の軸穴(内径6mm)の間にスペーサーを入れて接続することにしました。
 

イメージ 1

 

左の歯車の軸穴をドリルで拡張して、右のスペーサーを挿入します。

具体的には、歯車の軸穴をドリルで8mmに広げ、そこに、外形8mmm,内径4mmのステンレス製のスペーサーを入れて、微動ノブの軸とつなぎました。軸穴の拡張には、ステップドリル(タケノコドリルともいう)を用いたので、余り軸がずれずに拡げられました。横からセットビス用のタップを立てて完成です。とりあえず大丈夫でしょう。
イメージ 2


 

 引き続きになりますが、今回はモータードライバー回路及びソフトなど、電気系、ソフト系(ASCOM互換)の方です。
いろいろとネットで調べてみると、ASCOM互換のソフトの自作例がいくつかあることがわかりました。その中で比較的取り掛かりやすいと思った、「SGL Observatory Automation -ASCOM MotorFocuser Control-」を使わせていただくことにしました。
電気系は、SGLの「GettingStarted Guide」にArduino Nanov3EasyDriverを用いた例が出ていましたので、早速Deal Extremeで互換品を入手しました。
なお、EasyDriverはステッピングモーター等を簡単な信号(回転方向、駆動パルスのみの信号でも可)でドライブするためのオープンソースのハードで、その詳細な説明は、http://www.schmalzhaus.com/EasyDriver/に掲載されています。多分ロボット制御などで需要が多いのでしょう。
これが今回使用のNanoV3互換ボード(DCCduinoNano)です。
イメージ 1


また、こちらがEasyDriverV4.4です。
 
イメージ 2

同種のボードは国内でも販売されていますが結構高価です。NanoV3(互換品)は海外$7.78に対して国内\1950EasyDriverは海外$2.85(!)に対して国内\1868(!)+送料\185でした。また海外品にも関わらず送料無料は助かりますが、どういう仕組みで採算を合わせているのかよくわかりません。一方、配送に時間がかかる(10日~1ヶ月程度)ことは覚悟しなくてはなりませんし、不着のリスクも無いとは言い切れません。Amazonでも国内在庫ではなく海外から発送されてくる場合もあるので安心はできませんが。
 
Arduinoの開発環境(arduino IDE)は、http://arduino.cc/en/Main/Software からダウンロードできます。使用したバージョンは1.6.5です。
イメージ 3


SGLのソフトウェアは、yahoo.comyahoo groupSGLからダウンロードしますが、クローズドのグループだったので、先立って、yahoo.comに登録が必要で、yahoo.co.jpのドメインのIDではダメでした。他に登録不要でダウンロードできるところもあるかも知れません。
 
SGLの「libraries」のzipファイルをダウンロードし、それを解凍展開し、その中身のフォルダをarduinolibrariesのフォルダの中にコピーします。
別途ダウンロードした「SGL_Focuser_Driver_colcd_2_0_0Lb.ino」をダブルクリックすると、arduinoのコンパイラが立ち上がり、同名のフォルダを作ると言ってきますのでOKして、「検証」ボタンを押すと、特にエラーもなくコンパイルが終了します。さらに、NanoV3にアップロードするところまでは問題なく(*注)進みました。なお、SGL_Focuser_Driverには、いくつかの別バージョンがありますが、バージョンによってはなにかライブラリ等が足りないらしく、エラーが出る場合がありました。2_0_0Lbのバージョンは、エラーが出ませんでした。
 
次に、PCからの制御用ソフトですが、とりあえず、SGLライブラリに有ったものを使いました。SGL_Focus_StandaloneV2_00_00C.zipを解凍展開し、setup.exeを実行してインストールします。同ソフトはシリアル通信の速度が19600bpsでしたが、変更の方法がわからないので他のプログラムもこれに合わせます。ASCOM互換ということですので、他の望遠鏡連動のプラネタリウムソフト(Cartesdu Ciel等)からも動かせるのではないかと期待しています。
イメージ 4

イメージ 5
  さて、電気系の方ですが、NanoV3EasyDriver、電源、ステッピングモーターを、SGLの「Getting Started Guide」の記事を参考に接続します。記事にはEnableの配線がありませんでしたが、非回転時のモーターの発熱を抑えるためには接続したほうがよいでしょう。SGLのソフトの方は、20秒間モーターを回す指令が来ないと、モーターへ電気を流さないようになっていました。また、このバージョンのソフトは手動押しボタンにも対応しているので、それ用の配線も必要です。

イメージ 6

接続を確かめ、先のSGL_Focus_StandaloneV2_00_00Cを用いてPCから操作して、モーターがちゃんと回ることが確認できたので、ブレッドボードの配線を整理して野外に持ち出せるように実装したいと思います。
 
最後に、一番大切なところですが、NexImage5mpEOS UtilityのためにUSBケーブルでPC-赤道儀間をつないでいるので、USBハブを赤道儀側において競合無く使えるか確認したいと思います。AZ-EQ6GTUSB-RS232Cコンバータ経由のPCダイレクトモードでCartes Du Ciel(フリーのプラネタリウムソフト)等から制御できるので、うまくゆけば、焦点合わせ、画像転送、赤道儀制御が、USBケーブル1本で可能となるはずです。各機器の通信速度次第でしょうか。
 
 
(注)実は最初に使った互換品は1回目は書き込めましたが、2回目は出来ませんでした。NanoV3(互換品)のUSB-RS232Cチップが偽造品だったようで、結局、他のNanoV3互換品に交換しました。(http://blogs.yahoo.co.jp/thought_of_stars/17206856.html参照)。もちろん、純正品を購入するという選択肢もありますが、・・・・高い!
 

  焦点合わせの時、ステッピングモーターを用いた自作の電動フォーカサー(注)を用いていますが、全くのスタンドアロンなので、押しボタンのケーブルを引っ張ってこないと操作できず、不便でした。
自作した当時は、機材がGPE赤道儀+SkySensor2000PCだったからというわけでもないですが、差し当たってそれ以上の自動化は考えませんでした。その後、機材を入れ替え、拡張して来たのでだんだん不便になってきました。
今回は、AL107PHのフォーカサーの微動ノブに平歯車(DS歯車、ジュラコン製)を取り付けて、それをステッピングモーターのピニオンギヤ(同)と噛みあわせて焦点合わせの電動化を目指します。
 
イメージ 1

ステッピングモーターは秋月電子通商で購入した日本電産コパル社のSPG20-1332という超小型(ギヤヘッド径φ25mm)のもので、1/24のギヤヘッド込みで1回転480ステップ、2相ユニポーラ(配線は6本)、コイル抵抗68Ωという仕様のものです。他の記事でよく使われているモーターの半分以下の大きさです。連続最大軸負荷は19.6mNm(ミリニュートン・メートル)ということで、あまりピンときませんが、フォーカサー自体が1:8減速で、接続歯車で1:4に減速していますので、動かした感じでは十分なトルクと思われます。出力軸は直径φ3mmで、歯数16枚モジュールm=0.8のピニオンギヤを圧入しました。
 
 微動ノブには、歯数60枚モジュールm=0.8の平歯車を取り付けます。不要な部分を削って微動ノブに接着剤で固定します。
 モーターは、フォーカサーの取り付け部分のネジ穴を使って補助板を固定しそれにアルミLアングル等で固定します。
 
 さて、現物合わせをしながら設計図を作り、ちょっと金物加工します。センターポンチを打っても正確な位置にドリルで穴あけをするのは難しいです。ボール盤に使えるバイスやX-Yテーブルが欲しいところです。
 
 以下の様な感じになりました。
 部品はジャンクの中から使えそうなものを加工しました。大抵の場合、最初は失敗するので新品材料を使うのは、うまくいってからにします。でも多少見栄えは悪くても、うまくいってしまえば、新しく作り直したりしないかもしれません。
 
イメージ 2

モータードライバー回路(近いうちに紹介予定)は、まだブレッドボードで組んだだけですがArduino Nano(コンパチ)EasyDriverを用いてUSB経由でPCからASCOM仕様で制御も可能なものとしました。うまく動いたらハンダ付けしてケースに入れようと思います。
 
イメージ 3

 
(注)
William OpticsDDGのクレイフォードフォーカサーの微動ノブにギヤを貼り付けて、ステッッピングモーター(秋月電子通商SPG20-1362http://akizukidenshi.com/catalog/g/gP-04241/)のギヤと噛み合わせて減速駆動するものです。ステッピングモーターのドライバは、最初秋月電子のPICステッピングモータードライバキット(http://akizukidenshi.com/catalog/g/gK-00154/)を用いていました。
その後、ArduinoUnoR3+ダーリントンアレイトランジスタを用い、移動速度を変えたり、移動量をLCD表示させたりするプログラムを書いて使っていました(http://blogs.yahoo.co.jp/thought_of_stars/16419748.htmlを参照)。
もちろん、Arduinoのシリアル通信ポート(USBも可?)を使えば、外部制御も出来ますが、ASCOM互換にするには知識不足で、少し手抜きをしてしまいました。


 私の愛車はマツダのMPVで、もう10年くらい前のタイプです。1年半前に中古で購入しまいた。走行距離は3km以下だったので、まだエンジンは調子よく回っています。
さてこの形式のMPVの後部スペースの左側に丸い蓋があります。

イメージ 1

車種によってはここにシガーソケットがついていますが、よく知られているように、シガーソケットが付いていない形式の車種でも配線はされています。工具スペースの蓋を開けて内部の配線を探ると、コネクタが紙テープで他の配線に固定されています。簡単に外せます。
イメージ 2
 
シガーソケットは純正部品で、G14T-66-290という番号です。ディーラーなどからも入手可能と思いますが、いろいろとよけいなサービスを勧められそうなので、今回は割高ですがMonotaROから2070円で購入しました。ソケット本体とネジ止め用の筐体の2個の部品です。
イメージ 3


まず、ケーブルにネジ止め用筐体を通してから、ケーブルを、パネルの裏から出します。
 
イメージ 4

そこに、ソケットのコネクタを接続し、パネルの穴から入れて、裏からネジ止めすれば出来上がりです。
イメージ 5

イメージ 6

イメージ 7

イメージ 8

長時間自動車本体のバッテリーを使うのは不安ですが、走行中にディープサイクルバッテリを充電する時などには便利そうです。
 

 

本番の、ASCOM互換電動フォーカサーの自作記事を書く前にトラブルが先になってしまいました。

自作電動フォーカサーのステッピングモーターのドライバ/コントローラにArduinoを使っていました。

最初に作ったものは押しボタン式のスタンドアロンですが、ケーブルの引き回しなどが面倒くさいので、PC接続を考えて、SGLfocuserなどのインストールを準備していたのですが、途中で先日購入した**insmartArduino Nanoコンパチが動かなくなりました。



イメージ 1

イメージ 2


ネットで検索した記事によればUSBシリアル変換ICFT232RLの偽物があるらしく、最近のFT232RLドライバはそれを検知して使用不可能にする機能があるそうです。

http://blog.dream-drive.net/2014/11/4022/

http://it.slashdot.jp/story/14/10/23/0413210/

http://blog.livedoor.jp/ese_admin/archives/52118653.html

http://nuneno.cocolog-nifty.com/blog/2014/10/aliexpressft232.html

 

最初につないだときは問題なく動いていたので多分これが原因ではないかと考えています。

デバイスマネージャでハードウエアIDを見ると確かに、本来は、PID_6001となっているべきところが、USB\VID_0403&PID_0000&REV_0600となっていてPID0000になっていました。

 

イメージ 3

ATmega328に直接ICSPで書き込む方法もあるそうですが、今考えているのは、PCからUSB経由でarduino(コンパチ)にコマンドを送るものなので、USB-シリアル変換が出来ないと使えません。

とりあえずの対処方法は、以下のURLで見つけましたが、結局返品交換しました。

http://make-first.blogspot.jp/

しかし、模造品メーカそのものではなく、模造品かどうかわからないで購入した善意の(清貧な)エンドユーザが不利益を被るような対策はいかがなものでしょうか。そのような非難が多かったらしく現在はこのバージョンのドライバをWindowsUpdateで配布するのはやめたようですが、アプリではなくドライバなので既にインストールされたものを調べて置き換えるのは面倒そうです。

 

 いろいろな回路自作の実験を行うには電源が必要です。
電圧と電流が測定できるデジタルメータを付けたスイッチング電源を作ってみました。

イメージ 2


結構前に途中まで仕掛けていたのですが、いろいろと家庭が多忙でやりかけになっていました。今回、ケースに入れて部品を固定し、使いやすくしました。この種の電源は前にも作ったのですが、少し電流が多く取れるように、入力のACアダプタの電圧を上げて、秋月電子の電源キットと無印デジタルメータ、ターミナルを組み合わせたものです。ケースは100円ショップのやや大きめのプラスチックのお弁当箱です。ふたが透明なので中も見えます。

イメージ 1



部品の固定はグルーガンを使って
PVAスティクで行いました。箱の裏に小さな穴を開けて、基板とケースの間に流し込みます。ターミナルはいつも飛び出しているとしまいにくいので、固定せずにコードでケースから取り出すことにしました。見栄えは良くないですが、実用的かな、と思います。本当はふたを分割して一部を開けるとターミナルが使えるようになるような構造を考えましたが、加工に手間が掛かりそうなので今回はやめました。

65W級スイッチングACアダプター24V2.7A ATSO65-P240、秋月電子http://akizukidenshi.com/catalog/g/gM-06962/
DC0.8-24V最大5.5A可変スイッチング電源キット(降圧)(SI-8008HFE) 秋月電子http://akizukidenshi.com/catalog/g/gK-06970/
・パネル取付け型
DCデジタル電圧計電流計 赤青 100V 10A バルク品、amazon
ターミナル(赤・黒)MB-133-G 秋月電子http://akizukidenshi.com/catalog/g/gC-04364/


 


今回の工作では、マウントアダプタのガタとりのためのシムを作ってみました。

 

本題に入る前にちょっと前置きが長くなりますがすみません。

 

NexImage5mpを使い始めています。望遠鏡との接続は付属の31.7mmアイピースバレルーCマウントアダプタを用いて、アイピーススリーブに差し込んでいます。

NexImage5mpのピクセルサイズや、望遠鏡の分解能を検討した(口径で決まる分解能に焦点距離を乗じた理論最小星像サイズとイメージセンサのピクセルサイズを比較しただけですが)結果、手持ちのBORG101EDBORG77EDでは、2倍位は拡大したほうが良さそうだと判断しました。

2倍に拡大する手段は、天体専用のエクステンダやバーローレンズ(最近はEDレンズやテレセントリック光学系のものもあるようです。)を使うことも出来ますし(持っていません)、アイピースで拡大投影する方法(VixenのNSTアダプタや、BORGSD1Xなどは持っています)もあります。いわゆるジャンク箱に昔のものが詰まっています。銀塩フィルム時代はいろいろ工夫したものです。

今回は、手元にあったKenko Teleplus PRO300(2倍、ニコン用)を使おうと思いました。Teleplusの後ろにニコンF-キヤノンEFマウントアダプタを付け、その後ろにEF-Cマウントアダプタ(KIPON製)をつけたところ、・・・ゆるい!、ことがわかりました。普通、バヨネットマウントのどこかがバネになっていて若干変形させることで嵌め合いの固さを調節できることが多いのですが、これはだめみたいでした。他のレンズやアダプタ等でも、よくいじってみるとちょっとゆるいと感じるものが結構あることもわかりました。

こういう時は、適当な厚さのシム(リング状の薄板、金属製等)を挟む、という手があります。カメラマウント用のシムも売っていたように思い、ググって見ましたがヒットしませんでした。

 

これからがようやく本題になりますが、それなら作ってしまえ、と考え、厚さ0.1mmのステンレスの薄板を買って(Amazon)きました。

コンパスでリング状に作図して、はさみ(使い捨て覚悟の100円ショップ製)で外周を切りました。が、・・・なんか凸凹に波状になり、カメラマウントに着けるのは躊躇われます。それに、外周は切れても、内側を綺麗に切るのはほとんど無理!でした。

 

ではということで、コンパスを、サークルカッタに変えてステンレス切断に挑みました。根気よく、また刃を適宜交換しながらやれば出来そうですが、力を入れ過ぎると、サークルカッタのアームが変形して、同じ所が切れなくなります。なんといっても、なかなか切断が進まなくて根気が続きません。

ベランダピラーを作った時のように、自在錐を使うか、と思いましたが、回転があまり下げられず、引っかかると一瞬でステンレス板がくしゃくしゃになってしまいそうなので、これには挑戦しませんでした。普通のモータスピードコントローラはDC用で、誘導モータには向かないようです。

 

そこで、ステンレス板の加工についてネットサーフィンしてみると、エッチングが応用できるらしいことがわかりました。趣味のプリント基板をつくる時にエッチングは良く利用していますが、これは薄い銅箔が相手で、耐蝕性があるはずのステンレスが本当に加工できるのか、と思ったのですが、ネット記事を見ると、普通に出来そうです。幸い、エッチング液(サンハヤト製プリント基板用、塩化第2鉄溶液、廃棄処理剤つき)が手元にあるので、早速試してみます。

 

イメージ 1



細かなパターンを作成するわけではないのでマスク作成は省略します。レジストも面倒なので、適当な大きさに切断したステンレス板の表面裏面を透明の荷造りテープ(100円ショップ)で覆います。サークルカッタで、テープをリング状に切って、エッチングしたい場所のテープを剥がします。ここまで、なるべくステンレス板の表面に直接触れないようします。指の皮脂がつくとその部分がエッチングされにくくなってしまいます。

 

イメージ 2


プリント基板の場合、銅箔は標準で35μmですが、今回のステンレス板は100μmもあります。効率を上げるために、裏面のテープも同じ形で剥がしておき、両面からエッチングが進むようにしました。イメージとしては、ステンレスは耐蝕性がある、と思い込んでいましたので時間がかかるだろうと覚悟していたのですが・・・・・。

意外と速いです。

プリント基板では普通10分から20分かかりますが、それより厚い今回のステンレス薄板でも約20分でエッチングできてしまいました。

ちょっと思い込みが裏切られ、目からうろこです。

これまでエッチング液の容器を平気でステンレスの流し台に置いていましたが、これからは止めようと思います。

エッチング液は元の容器に戻して再利用します。廃棄するときはちゃんと説明書を読んで適切に処理しないと法律で罰せられるようです。塩化第2鉄は鉄イオンなので大したこと無いのですが、銅をエッチングした後は塩化銅の形で銅イオンが含まれるので、これが規制対象になるようです。捨てなければ良いわけですが、これまで年に数枚程度のプリント基板しかエッチングしていなかったので、考えてみれば、500mlで10年以上もしかしたら20年位使っていますことになります。意外と変質しないものです。

 

出来上がったステンレスリングですが、エッジは、エッチングのアンダーカットやテープ切断面の微細なノリの残りのせいでかなり鋭利で、細かなバリが出ています。#2000くらいのサンドペーパで軽く研磨し、怪我をしないようにしておきます。

マウントアダプタにはロックピンがありますが、これの穴を忘れました。後からドリルで穴あけしてもよいのですがテープを剥がしておけば複雑形状でも同時にエッチングできるので、次からは注意します。

 

 

イメージ 3
 

 

今回、15分位で100μmがエッチング加工出来たので、1時間またそれ以上浸けておけば300μmぐらい加工出来るのではないかと思います。

さらにネットで調べると、微細な金属部品をエッチングで作るのは、モデル作りの世界では一般的な手法のようです。

 

天体観測の世界では、何が作れると嬉しいのか、よくわかりませんが、なにか可能性が広がったようで楽しいですが、反面、また、実際の観測時間が減ってしまいそうです。星を見るのが楽しいのか、星を見る準備をするのが楽しいのか、本末転倒なのかも知れませんが、趣味の世界ではそれでも良いのではないかと思います。ご異論をお持ちの方もあるかと思いますが心寛く受け入れていただければと思います。

 

暗視野照明付十字線アイピースSWA20mmというものを使っていますが、指定電池が入手困難・高価なので厚さが同じで直径の小さいLR41を厚目の紙筒に入れて代用してきました。通常の使用上は問題ないのですが、アライメント等で使用後、消灯しないでおくと電池が消耗して直ぐに暗くなってしまいます。かなり小さな電池なので仕方ないかもしれません。


そこで、望遠鏡の共通電源の12Vから電源を供給するようにしました。調光のため、XY-D-RK01 MiniManual LED Light Strip Dimmerという製品を使いましたが、そのままでは外形が大きいので、中身の基板のみを取り出し、アイピース側面にホットスティックで取り付けてみました。

 

イメージ 1
イメージ 2


 省略可能なコネクタは除去、ボリュームも基板用の小型のものに交換し、直接基板にハンダ付けました。LEDは念のため抵抗入り12V用のものを使い、基板にハンダ付けして、直接アイピースに差し込みホットスティックで固定しました。基板はほぼむき出しですが、特に問題は無いのではないかと思います。

 

イメージ 3

イメージ 4
  

基板はSMTチップを使ったもので、大きさは約20mm×40mmです。回路は555を使っていたので、動作はPWM的なものだと思います。DIP型の555を使って自作したら、この大きさにまとめるのは難しそうです。秋月のキットK-06244では50mm角くらいの面積です。


この調光装置は、20141月当時は日本のAmazon11280円だったので米国のDXから525ドル(5個以上送料無料)で購入したものですが、最近はAmazonでも並行輸入品が 550円(正規は約1300円)になっていました。出力が大きめ(8A)なので、レンズ等のヒータの調節用にも使ってみようと思っています。


使用してみた時も明るさの変化が滑らかでチラチラ感がなくて快適です。電源ケーブルが多くなるのが難点ですが電池のことを心配しなくても良いので気が楽です。接着固定なので取り外しできないのも難点です。でも、取り外す必要はあまりないと思いますので、しばらく使ってみて大きな問題が無いことを確認したいと思います。


*改造はリスクが伴います。最悪他人に迷惑を掛けることもあり得ます。その上で自己責任で行いましょう。

 
 

 AZ-EQ6GTを持ち運ぶときの、赤道儀のケース(格納箱)について、緩衝材を入れたり、把手をつけたりして、当座の完成版となりました。

把手は、引き出し用のやや大きめのものをM6ネジ(片側4本、両方で8本)でしっかりと固定しました。



イメージ 1


 緩衝材を入れたら意外と狭くなってしまい、バランスウェイトの固定が微妙に難しくなってしまいました。バランスウェイトがまだ固定されていませんが、隙間にケーブル類などいろいろ詰めることで当面はしのぎたいと思います。


イメージ 2
 緩衝材は、薄い部分がレジャー用のアルミコートマット、厚い部分はジョイントマットを利用しました。



イメージ 3

 内部での赤道儀の姿勢はこのように、バランスウェイト軸を上にしています。三脚への取付面は斜めなので、緩衝材も斜めにカットして、荷重が分散するようにしています。この部分は、厚さ2cmくらいのマットを何枚か接着してブロックにしてから現物合わせでカットしました。


 さて、持ち上がるか、というところですが、バランスウェイトも入れると合計 kgとなり、腰を痛めそうです。あまり遠くへ手で運ぶのは諦めて、適当なキャリーに載せることにします。

架台の取り出し、収納は、あまり手首に負担がかからないので楽です。三脚へ載せるとき、横抱きにして持ち上げるよりも位置が確認しやすく簡単です。

 三脚の南側から脚の間に格納箱をおいて、赤道儀の両側から手を入れてしっかり持ち、そのまま体重を後ろにかけて持ち上げ、適当な高さでやや前に移動すれば、三脚の架台にうまく載せられます。(個人の感想です。)特に、傷つけやすい水平回転の基準バー(なんというのだろう?)をほとんどコジルことなく載せられます。このような動きは、要介護者の抱き上げ方の経験を参考にしました。



 NexGuideは付属電池ケースを用いて単一4本か、ACアダプタ(6~14V250mA)を使用することになっていますが、野外での使用や配線の取り回しを考えて、絶縁型DCDCコンバータを間に入れて見ようと思いました。AZ-EQ6GTには12Vのバッテリーから直接供給していますが、電池で動いていたものをGNDを共有した電源に変えると、これまでの経験から何かしら不具合が出る心配があるので絶縁型DCDCコンバータを挟むことにしました。

さて、入手容易な絶縁型DCDCコンバータを探してみると、出力電圧は5Vか12Vになってしまうようです。5V(600mA)の絶縁型DCDCコンバータでも動くかも知れませんが、NexGuide本体のレギュレータの動作電圧が定格6V以上のようなので、もう少し高い電圧(といっても12V)にしたほうが良さそうではないかと思いました。250mAでも良いのですが、余裕を見て500mAのものにします。下の図は、DCDCコンバータのピン配置です。


イメージ 1


NexGuideの電源の入力電圧は14Vまで可能ですが、本体の中でドロップさせるのは熱ノイズ的に気持ちが悪いので、使い慣れたNJM23977.4Vくらいまで下げてから供給しようと思います。効率は半分くらいになってしまいますが。

イメージ 2


出力電圧は、抵抗2本で調節できますが、出力電圧と抵抗値の関係は、
Vo=1.29*(1+R2/R1)
なので、R1=1kΩR2=4.7kΩにすると良いようです。
しかし、手持ち部品の関係で、R2は20kΩの多回転VRにしました。

DCDCコンバータは、ある程度のアイドリング電流を流しておかないと出力電圧が安定しないようですので、パイロットランプ代わりのLEDを入れて少し電流が流れるようにします。また、ノイズやリップル除去用にコンデンサも入れておきます。




イメージ 3


出来上がり写真はほとんどDCDCコンバータが基板上を占めています。下のDCジャックから9V14Vを入力し、絶縁型DCDCコンバータ(MIWI06-24S12)で12V500mA)にして、パイロットLEDを挟んで、NJM2397に入れます。可変抵抗で電圧調整しますが、低飽和電圧なので、約1.3V11.5Vくらいまで可変出来ます。可変レギュレータは非絶縁ですがDCDCコンバータが絶縁型なので、入力ジャックと出力プラグの間は絶縁されており、電池を用いた場合と電気的には同じはずです。


入力ジャックのところで10Vくらいでも、DCDCコンバータ直後で約12Vが得られることを確認し、可変抵抗を調節して、出力プラグのところで6.5Vになるようにしました。


この回路がうまく働けば他にも使えるかもしれないので、プリント基板はパターンを作ってエッチングしました。左下が入力用DCジャック、その上がDCDCコンバータ(MIWI06-24S12)です。左下が+V入力、右下が-V入力のパターンです。また、右上がDCDC+V出力(かつNJM2397+V入力)、上半分中央から左にかけて、DCDC-V出力(かつNJM2397GND)で、左上角の小さなパターンが、NJM2397+V出力です。NJM2397は上部中央付近にあります。青い四角の可変抵抗は時計回りに回すと出力電圧が上がります。



イメージ 4


エッチングは、昔はレジストペンで直接パターンを描いてエッチングしましたが、今回は概略以下の様な方法で行いました。レーザプリンタで「画彩」という用紙に印刷して、生プリント基板に載せてアイロンで熱転写し、水に浸して紙の部分を丁寧にこすり落とし、トナーだけが基板上に残るようにして、必要に応じてレジストペンやカッターナイフ等でトナーを修正して、塩化第2鉄のエッチング液にしばらく浸しておけば不要な部分が溶けてしまします。その後水洗し、トナーを「ジフ」でこすり落として、ミニドリルで部品用の穴を開け、フラックスを塗っておきます。部品を差し込んで半田付けして完成です。この方法はネットで紹介されていますのでいくつかのサイトを参考にさせていただきました。

なお、ハンダやエッチング液は環境にやさしくないものもあるので、ちゃんと規則にそって処理して廃棄しないといけませんね。気をつけましょう。



 昨年から、AZ-EQ6GT使っています。持ち運ぶとき、赤道儀のケース(格納箱)があると便利ですが、市販のトランク(購入時の箱も含めて)は使いづらいと感じていました。赤道儀を横に寝かして格納するものがほとんどですが、赤道儀を持ち上げる時、極軸望遠鏡の接眼部付近と赤緯体を支えて持ち上げて三脚にセットしようとすると、赤道儀を寝た姿勢から直立させるため90度回転させる必要があり、その後、その姿勢で方角微動固定ピンに入れることになり非力な私は苦労しています。筋トレしにくい手首の動きが必要になります。

 一方、収納するときには、横からではなく赤道儀の南側から抱きかかえるようにして持ち上げるとバランスが良いのですが、市販の格納箱だと、入れるときに赤道儀の向きをひねって寝かすような姿勢に変える必要があり一旦どこかに置かないと作業が難しいです。

イメージ 1

 そこで、赤道儀を縦に入れられる格納箱を考えてみました。ほぼ正方形の箱の対角線に赤道儀を赤緯軸を直立させて入れる形になります。極軸望遠鏡の接眼部は、対角線の三角コーナーに収まるためうまい具合に保護されます。なお、バランスウェイトを外した後、ウェイトシャフト基部を上に向けてから作業しています。

イメージ 2
 左右に手を入れられるスペースも確保できて、最後までしっかりと赤道儀を持てるので、横に寝かせて格納する時のように指を挟まれる心配もなく、作業しやすいです。写真ではまだ緩衝材を入れていないのでややガタがありますが、緩衝材を入れれば、対角線でぎりぎり入る大きさになるので、左右にガタつくことも無くしっかり固定されるはずです。更に底面にも適当な緩衝材を入れる予定です。
イメージ 3

 赤道儀を格納した後でも左右のスペースにものを入れやすいので、SYNSCANや各種ケーブル、小道具、バランスウェイトなどを格納しようと思います。中でぶつかり合わないように適当に緩衝材の工夫をもう少ししたいと思います。 
 しっかりとした運搬には向かないかも知れませんが、通常の設置・撤収作業がとても楽になると思います。格納箱自体は持ち上げにくい形ですが、バランスウェイトも入れておりとても重いので、どのみちキャスターは必須です。手持ち用の取っ手等、もう少し工夫してみたいと思います。

イメージ 4

 なお、見て分かる通り、外観は、市販のスツールボックス(一辺38cmの立方体)で、厚さ9mmのベニヤ板で補強して緩衝材を入れた以外はそのまま使いました。待ち時間は快適に座ったり出来ますし、オットマンにもなります。
 重要なことに、部屋に置いても家族に邪魔にされません。

 

    今回は単にLEDライトを赤色化するだけでなく機能も少し変えてみます。と、言っても、元の機能は「耳かき」だったりしますが。100円ショップダイソーで購入した「LED照明付き耳かき」を明視野照明光源にします。
イメージ 1

    元のLEDは緑色光を出すもので、LR41電池3個(約4.5V)を電源としています。
イメージ 2

    電流制限抵抗を直列に入れても良いのですが、今回は、抵抗内蔵赤色LEDを秋月で購入してみました。12V用と5V用があり、電流が10mA程度になるような抵抗が内蔵されています。電池が2個(3V)でも良いはずなのでショートした上で明るさを試してみて、12V用を使うことにしました。光量可変にするために可変抵抗の外付けも考えられますが、今回はパスです。
イメージ 3


    この段階では、まだ赤色照明の耳かきという怪しげなものなので、導光と耳かき機能のある透明プラスチック部分を熱して柔らかくし素早く延ばしたり曲げたりして先端が主鏡の良い位置に来るようにします。曲げ角度を急にし過ぎるとそこで光が漏れてしまうので平均的に適当な曲率を保ちつつ変形させ無くてはいけないのでコツを修得するまで何回か試行錯誤しました。
イメージ 4


    出来上がったものを組み立て直してスイッチを入れると先端が赤く光ります。

イメージ 5

    これをファインダーの鏡筒にヘヤゴムで固定すると、視野全体がほんのり明るくなり十字線が浮かび上がります。適当な明るさにするには、やはり可変抵抗があったほうが便利なようです。導光しなくてもLEDの足の配線を伸ばせば良いのではないか、という考えもあります。でも、こちらは本体ケースがそのまま使えるので取り扱いは簡単ではないかと思います

 連休中は家庭の事情で遠出をすることもなく、余った時間で、各種LEDライト(白色)の赤色化をしてみました。
 市販の廉価な白色LEDライトの電源は、USB(5V)、アルカリ(ボタンor単3、単4)電池3個(4.5V)、リチウムボタン電池2個(7.4V)等があるようです。アルカリ電池2個(3V)のものもありますが、多分昇圧回路が付いていると思います。
 なお、白色LEDは順方向電圧が3~4V位、一方、赤色LEDは2.0~2.2V位です。電源電圧と順方向電圧を考慮して、電流制限抵抗の値や、場合によっては、LEDの直列接続など、工夫することができます。


  一つ目は、USB電源を用いているもので、今回は百円ショップSで購入したフレキシブルなUSBコネクタ付きのものを例に取ります。この特徴はフレキシブル(長さは30cmくらい)なところです。
 押しボタンSWもついています。LEDは白色なので天体観望用に赤色に交換しました。昔は豆電球にセロハン紙でしたが。分解してみるとLEDが2個並列になっており、抵抗が直列に入っています。抵抗を見ると何故かカラーコードが5本で1%精度の抵抗のようです。オーバースペックのような気もしますが。 
  ジャンク箱にあったφ5mmのピンクのレンズのLED(中身は赤)を2本直列にして、白色LED(2本並列)と交換しました。
  LEDでの順方向の電圧低下は約4Vなので、電流制限抵抗には約1Vが加わります。付属していた抵抗は50Ωで約20mA 流れますので、そのまま使いました。半田付けのあと組み立て直してUSB電源に接続、SWを押すと問題なく点灯しました。定格不明のLEDですが、あまり拡散せず明るさも程よく抑えられて使いやすい感じです。

イメージ 3



  次も百円ショップSで購入したごく小型のフレキシブル(10cm位)なクリップ型のものです。薄い板などをくわえ込むように固定できます。
  電源はリチウムボタン電池2個で、約7Vです。白色LEDは抵抗内蔵かどうかわかりませんが、外部には抵抗は見当たりません。電流制限抵抗として100Ωをつなぎましたが、50mA となりちょっと多すぎたかも知れません。次はもう少し大きめの抵抗にしようと思います。元の構成では、LEDの足がSW板に直接ハンダ付けされていましたが、短くしてその長さの部分に抵抗をハンダ付けしました。
  接続後点灯させてみると、明るく点灯しました。

イメージ 1



 最後は普通の円筒形のライトです。白色LED3個が並列に付いており、電源は単4電池3本直列(4.5V)です。また、LEDと直列にダイオードが付けられています。逆接続保護のためか、もっと高級に定電流ダイオードなのかわかりません。
  ここでは、白色LEDを赤色LEDに置き換え、また、3本直列の電池ケースの1本分を電線でショートして2本(3V)にしました。LEDで2Vですが、ダイオードで0.7V位は降下するので、電池の内部抵抗があるものとして電流制限抵抗は付けていません。ちょっと心配ですが、接続後点灯させてみると、問題なく明るく点灯していました。
 次は調光機能を加えた改造をしてみたいと思います。



イメージ 2

このページのトップヘ