カテゴリー「電子工作」の210件の記事

2019年2月 8日 (金)

研究所活動は停滞したままでCCDカメラ顕微鏡導入など

 年が改まって気が付けばもう2月になっていた。がた老AVR研究所の活動はさらに低迷している。この前の更新からそろそろ2か月が経つのだが、地下の工作ルームにいる時間は減る一方で工作らしい工作は殆ど手が付いていない。

 あんなに熱中したCNCマシンも全く遊んでいる。レーザーカッターなど梱包も開けていない。要するに、工作のときの「わくわく」感が得られなくなったのだ。そう、数年前アメリカの雑誌「TIME」に世界で影響力のある100人に選ばれた片付けの名人、近藤麻理恵氏のいう「ときめき」がなくなったのである。

 電子工作は仕事ではない。気分が盛り上がらなければ何もしないで一向にかまわないのだが、貧乏性に生まれたと見えて何か落ち着かない。試験が近づいているのに勉強に手が付かないときと同じような妙な焦燥感に襲われる。それに、このブログは備忘録を兼ねているので、何か書いておかないとまずい。

 現在のところ、これしか生存証明がない。日記はメモ程度でも残すようにしているが(激しい物忘れ対策)、詳しい状況はこのブログが頼りである。というので量は少ないが、この2か月の行動記録(作業ではなく)で、記憶の糸をつないでいくことにした。Dsc01603

自作のループアンテナを曲げわっぱの工法でつくる(1/12/2019)

 年が明けた。もう大分前から仕事はしていないから毎日がお正月のようなもので、特に感慨は湧かない。年末は電子工作らしいものは何もしていなかった。例によって家族が大集合し、箱根駅伝を見て、近くの神社に初詣に行き、破魔矢を買ってくればおしまいである。

 でも何か工作をしようと思って、曲げやすいという杉の薄板をホームセンターで年末に買ってあった。中波用のループアンテナを自作するつもりである。厚さ2ミリ、幅5センチの1メートルばかりの薄板が2枚である。

 しかし、薄板を円弧に曲げる方法に迷ってそのままになっている。水に濡らせば良いのだが適当な方法が思いつかない。当初は、風呂場に持ち込むつもりだったが、熱湯の方が効率が良さそうだ。といって板を漬け込む熱湯容器を自宅で用意することは不可能である。

 そのうち、自宅にある竹製の蒸し器の外周がアンテナに近い大きさであることに気づいた。この蒸し器は我が家の最大の鍋に載せるもので、鍋に湯を沸かし、薄板を少しづつ浸して、これにあてていけば、全部を漬けなくても曲げられる気がしてきた。Dsc01600

 意を決して、家人が寝静まったある日の深夜、作業にとりかかる。ガスレンジに鍋をかけ板を焦がさないように斜めにしながら少しづつ沸騰する湯に一分ほど浸したあと、蒸し器の外周にあてて曲げて行く。温度が高いと思いのほか簡単に曲がることがわかった。何のことはない「案ずるより、産むがやすし」の諺通りである。直径およそ30センチの円形のフレームが簡単に作れた。

 円の固定は。凝らなければもっと楽にすんだ。単なる瞬間接着剤だけで完全に止まった。最近の接着剤は強力で、曲げわっぱのような織り込み加工は全く不要である。固定台は、自作の温調付きのアクリル曲げ器で、CDケースを簡単に曲げて作る。テスト用なので見映えはしないが実用的には十分だ。

Dsc01599  次は線材である。この前のデコパネのループアンテナは、被覆線を使ったが、どうも少しかさばる。今度はUEW線にしようと思ったが、手持ちがないので先に進めない。これは買ってこなければならない。

久しぶりの秋葉原。松屋で天ぷらそば。買い物はUEW線(1/14/2019)

 ちょうどそのころ、古い職場の友人から新年会を兼ねて久しぶりに会わないかというお誘いがきた。秋葉原に買い物に来るのでそのついでということである。渡りに船とはこのことであった。定番の須田町のソバ屋、「松屋」で待ち合わせることにする。

 昼時をはずして午後2時に集まったのだが、松屋はこの時間でも行列が出来ていて、大盛況であった。ビールと天ぷらそばを注文する。混んでいるので気が引けたが、一杯くらいなら良いだろう。ここはつきだしに「そばみそ」が出る。これが美味なのだ。

 すっかり満足して買い物にでかけた。電線と言えば、やはりオヤイデ電気である。太さ0.5ミリのUEW線を50mほど調達する。メーター¥15程度で、1000円でおつりが来た。このあとは、2人でなつかしの店の消息を渡り歩く。

 ラジオデパートは定休日ということもあって閑散としていて空きスペースが目立った。昔、結構はまっていた大通りの小さな中華そばや「松楽(しょうらく)」は、代が変わったそうで、店構えには全く昔の面影はないが、立派に営業していた。味は同じらしい。

 これも良く行っていたガード下のラジオセンター横の喫茶店「古炉奈(ころな)」はコスメ喫茶に様変わりしていた。中を覗く気分にはなれない。いわゆるDOS/V通りと言われた末広町にかけての通りに足を延ばすと、立ち並んでいたPCパーツショップの殆どが姿を消していて、2人で嘆く。

 一方、末広町から少し離れたAitendoの直営店には、友人が妙に感動したのが印象的だった。どういう基準で集められたのか判然としないのだが、なにしろ部品の種類が多いという。そして旧交通博物館の中央線の線路の見える喫茶店で一休みした。ここは、前から行きたかったところで、やっとのことでそれが実現できた。ご満悦である。

 自宅に帰って早速、UEW線をループアンテナのフレームに巻く。20回あたりで前の方形ループアンテナと同じインダクタンスが得られるはずだ。テストの結果は、方形のループとほぼ同じ290μHが得られた。しかし感度はわずかながら低い。これは断面積がこちらの方が少ないので順当な結果であろう。

恐るべし中華ラジオの実力(1/16/2019)
 このあいだの1000円台のラジオは家族に持って行かれたので、今度はDSPチューナーのオールバンドラジオを物色する(この前のはアナログ選局)。このあたりになると価格も¥5000台となり、日本製もちらほら良いものがあるが、やっぱり価格/機能比では中国には勝てない。 Kagawadou_2018080413314500080 TECSUNという中華大手のこれ(PL310ET)を選ぶ。中華の通販は¥1000以下の小さな部品は郵便物で来るのでアマゾン経由でもやたらと時間がかかるが、この程度になるとさすがに宅配便ルートなので到着は早い。数日で届いた。

 早速梱包を解いて中身を取り出す。前のラジオと同じくらいの大きさだ。電池は単3三つでニッケル水素充電池が使え、入れたままで充電できる。少し充電して試聴する。おおお、こいつは室内でもロッドアンテナだけで、在京FMが10何局、簡単に入感する。自作の意欲を奪ってしまう高感度だ。

 ただし選局方法は無茶苦茶難しい。FMや中波帯を自動スキャンする程度ならともかく、短波帯を探訪するには、説明書を熟読してもまだわからない。アンテナがないこともあるが、めぼしい局を殆ど受信することができない。これはまともなアンテナで心を入れ換えて(馬鹿にせず)、練習しないととても使いこなせそうにない。 

 もののはずみで中波用の既製品のループアンテナ(TECSUN AN-200)もついでにポチってしまってあった。テストのため地下に持ち込み、USBドングルのRFコンバーターの前段につないだ。しかし、感度は自作のものと大差がないというより、むしろ低い。ダイヤルを回しても感度に変わりがない。 Dsc01598

 小さいので仕方がないと言えばその通りだが、ちょっとがっかりである。RF(無線)は基本、アナログなので、びっくりするような成果は出てこない。まあ、期待する方が間違っていた。

とうとうAitendoのCCDカメラ顕微鏡を代引きで買った(1/18/2019)
 前からAitendoの直営店に行くたびに、気になっていたCCDカメラを付けた顕微鏡をとうとう買ってしまった。この顕微鏡、CCDカメラの画像を大型ディスプレイに映し出すもので、店の一角でデモをやっており、実際にプリント基板などを拡大して見ることができる。

 当研究所では数年前ホーザンの実体双眼顕微鏡を導入し、とりあえず不自由なく0.5ミリピッチまでのハンダ付けは可能になっているが、難点は視野が狭いために肉眼で相当周りを確認しながら使う必要があった。

 このCCDカメラの顕微鏡は、高解像度で大画面に映せるので飛躍的に視認範囲が広がる。しかも対物レンズと対象物の間のクリアランスは30センチ近くあるので、ハンダ付けなどの作業ははるかに楽になりそうである。Dsc01606 しかし、大型ディスプレイに手持ちがなかったのと、場所がかさばりそうなのでためらっていた(価格はスタンドなどをすべて合わせても3万前後でたいしたことはない)。それが正月に、娘に貸してあった液晶ディスプレイが戻ってきたのと、最近の電子工作へのやる気の回復のため、さらにこのあいだの直営店でのデモの印象が強かったため、思い切って買うことにした。

 ちょうど思い立った日が直営店の定休日なのでウェブサイトを見ていたら、なんとレンズキットが売り切れになっている。ところが暫くしたら1ケだけ在庫が戻っているではないか。これはもう買うしかない。あわてて通販で申し込む。

 ところが、Aitendoの通販は銀行振り込みが出来ない。カード支払いは、使える会社が限定されており、残る支払い方法は代引きしかない。手数料をとられるが、まあ、これが一番安全だろう。ぐずぐずしているうちにまた売り切れるかもしれないので、あせって画面に入力する。めでたくレンズキットはカートに入った(このあとだいぶん長い間、レンズキットは在庫切れになっていた)。

リモコン不調なれど、この解像度は凄い(1/20/2019)
 数日後、無事、レンズキット、CCDカメラ、スタンド一式が宅配便で届いた。早速組み立てる。最初、カメラの対物レンズに保護シートが貼ってあり、ぼけぼけ画像に頭を抱えていたが、それを外すと見事な映像が出てきた。 Dsc01604

 当研究所の手持ちのディスプレイのHDMI出力はやや不安定で、ひんぴんとリセットを繰り返し心配したが、DVI経由にすると安定した。DVIとHDMIはコネクターが違うだけで両方サポートしているようだ。

 試しに、ハンダ付けをやってみた。実体顕微鏡に比べると、圧倒的な視野の広さは比較にならないほど楽である。焦点深度が浅いのが少し不満だが、もっと困ったのが、ついてきたリモコンの一部の操作が動かないことだった。 Dsc01608  早速、店にクレームのメールを出したところ、すぐに返答があり、返送用の切手つき封筒と代品を送ってきた。しかし、このリモコンも同じ症状だ。電源の入り切りが、OFFは動くがONのとき動作しない。どうもこのCCDカメラの正規のリモコンではないようだ。リモコンはどうしても必要なものではないので、とりあえず2品とも店に送り返し、正しく動くリモコンを再送してくれるよう頼んだ。

閑話休題。下呂温泉と各務原の航空宇宙博物館(1/27/2019)

 工作以外の話題をひとつ。旅行の話である。家族が名古屋に転勤していて今年中に東京に戻りそうなので、今のうちに名古屋近辺に遊びに来ないかと誘いを受けた。ということで、下呂温泉と、近くの刃物で有名な関市に家族で行くことになった。

 この界隈には、平成が終わるというので人気になっている平成の「道の駅」がある。ここは元々の地名が平成(へなり)という町で、話のタネに立ち寄った。何の変哲もない道の駅だが、これが結構な人出で驚いた。よほど行くところにみんな困っているらしい(我々もその一員だったが)。 Dsc01655

 下呂温泉は、日本三大名湯(江戸時代の制定で草津と有馬と下呂)のひとつということだが、特に驚くようなところではなく、極く普通の山里に広がる中程度の温泉である。とても寒い日だったので、結局、温泉街へは出向かず、旅館の中でたっぷり温泉を楽しんだ。泉質はアルカリ性で肌にやさしい。 

 関市では、60年ぶりに切り出し小刀を買い替えた。左利き用もあったが(自分は左利き)、右利きの刃の使い方に長年慣れてしまっているので結局、右利き用を買った。学習用は¥1000前後だが、少し贅沢して¥3000クラスのものをもとめる。Dsc01635

 関市に隣接した「かがみはら航空宇宙博物館」にも立ち寄った。各務原は、旧日本軍の航空機開発のメッカであり、戦後も沢山の国産の飛行機がこの近辺で開発されたそ>うだ。ずらりと実機が並んだ博物館はなかなか見ごたえがあった。Dsc01652


究極の物欲。サーモグラフィックカメラの導入(1/29/2019)

 これも衝動買いである。だいぶ前から、自作を狙っていたのだが、ユニットだけでも3万以上するし、5万近く出せば完成品でそれより性能の良い商品が手に入る。どうしようかと考えているうちに日が経ってしまっていた。 Dsc01640

 それが、ネットで偶然、サーモグラフィックカメラのレポートを見つけ、これが3万円クラスの完成品でも十分実用的な解像度があることがわかった。しかも、簡単にスマホにつけるだけである。こういう使用記事はとても参考になる。 

 工作が手詰まり状態の時は、完成品が何かの起爆剤になるときもある。というより、何か心に「ときめく」ものを感じて、ついポチっとしてしまった。4万以上するPROを選ぶ。最近少し経済状況が好転した勢いもあるかもしれない(持ち株が持ち直した)。PROは少し高いが、3万円の普及品より解像度が4倍になっているというので少し無理をした。 Dsc01654

 これもアマゾンからの買い物で、順当に数日で自宅に届いた。実に便利な世の中になったものだ。予備知識はネット上に沢山ころがっているので接続に不安はなかった。ただし、スマホでの操作はやはり苦しい。カバーをつけているので安定して持つことができない。

 それでも操作性を除けば、性能は噂通り素晴らしいものだった。家庭内の電気機器の発熱状態が手に取るようにわかる。熱の差も、ちょっと絨毯に手を当てて(10秒前後で良い)離し、カメラで見ると温度差が出来て手の形がくっきり絨毯に残る。 Dsc01653

 あと問題は電池の減りがかなり早いことだろうか。それでもこれは色々な所で活躍できそうだ。 Jkws0136

| | コメント (2) | トラックバック (0)

2018年12月12日 (水)

ドングルのHFコンバーターでJJY標準電波は見えたか

 どういうはずみか、PCで長波の40Khz標準電波を見ることに熱中している。今となっては何のきっかけでこれを始めたのか、すぐに思い出せないくらい長い期間だ。ブログの更新間隔もいつのまにか一か月を越えてしまった。

 前回記事のとおり、PCでJJY標準電波を見るために、USBアダプターに接続したソフトウエアラジオドングルで画面上に受信した電波のスペクトルを出そうとしている。何十年ぶりかのRF(電波、高周波)の世界に完全に飲み込まれてしまったようだ。

 そもそものきっかけは、このサイトの記事のような気もするが、もっと前からJJYの電波強度を調べていた気もする。いずれにしても、この記事は、6年以上も前の記事で、今や、このほかにも長波のJJYを受信した話は沢山でてくる。ここにはドングルではなく、一般の普通の受信装置で聞いておられる例もある。

 アマチュア無線家の中には、このドングルを受信機(高級型がある)として実用に使っておられる例も数多くあるようで、技術の進歩の激しさに今更ながら驚くばかりである

 JJYの電波そのものは、当研究所ではAitendoの受信モジュールを使った電波時計の自作や、標準電波のリピーター制作などで既にお馴染みである。PCで受信することは目新しい話なので飛びついた。しかし、これが電波を見るとなると、そう簡単にはいかなかった。 Dsc01550 我ながら馬鹿なことにこだわっていると思う。そう、当研究所のモットー、「実用」ということでは、全く実用のあてのない(アマチュア無線をやらないなら)工作である。それでも、後述するように、ドングルとHFコンバーター、それに外付けRFアンプと手製のループアンテナで、40Khz近辺でそれらしい電波を捉えることに成功した。

 しかし、受信機のデコード機能の関係か、正確なパルスコードを見ることは出来ず、本当にこれがそうなのかの確証はない。とはいえ、近辺でそれらしい電波はこれしかなく、3Khzほどオフセットしているが、これはコンバーターのクリスタルの誤差の範囲(数十PPM)だと思われる。受信できたことにしておこう。ともあれ、以下は、この一か月の悪戦苦闘の記録である。

HFコンバーターの組み立て(11/2/2018)
 前回のブログ記事をUPしたあと、予定通りHFコンバーターの組み立てに入った。製作者のサイトには数多くの制作記が載っているが、みなさん例外なく部品の小ささに驚かれているようだ。しかし、こちらには例の実体顕微鏡という強い味方がいる。

 1608チップの実装も怖くない。それでもLEDひとつを飛ばして行方不明にしてしまった。このクラスのパーツは床に飛ばしてしまうと、まず発見は不可能である。しばらく床の絨毯をペンライト片手に文字通り手探りで探したが、早々に諦めた。 Dsc01562

 というのは、この大きさのLEDなら手持ちがあるからだ。昔々、ネットの記事(チップ部品の手ハンダ実装競争)に刺激されて手に入れてある。これを取り出して難なくハンダ付けし、とりあえず配線終了である。失くしたLEDは青色だったようで、取り替えたLEDは緑。こちらの方が所長の好みなので怪我の功名であった。

 プリント基板なので、誤配線の心配はない。オプションパーツのリレー(VHF帯へのバイパス)の実装を残し、テストを開始する。アンテナの準備が出来ていないので、まず、自作SG(シグナルジェネレーター)から40khzを出し、ドングルを100Mhz起点にして受信できるかどうかを試す(コンバーターは100Mhzへアップコンバートする。つまり40Khzなら100,040khzを受信)。

 PCのラジオソフトはこの前から使っているSDR#(SDRシャープ)である。よーし、受信しているようだ。それでは、これまでのLTC1799を使ったJJYリピーターではどうか。ふーむ、これは無理なようだ。直付けしていないこともあって受信できない。

 カップリングコンデンサーで直付けすれば、前のドングル直結のダイレクトサンプリングのときのように見えるのだろうが、先を急ぐのでアンテナを使った中波の受信テストに進む。

中波のAM放送が聞こえない。アンテナの原理を学ぶ(11/5/2018)
 中波の受信はJJY受信と直接関係がないが、どの程度の受信能力があるかは試しておきたい。最近のアマチュア無線は、このソフトウエアラジオによるバンドウォッチ(入感の監視)が当たり前になっているようなので、今後この世界に復帰するときのためにも調べておきたい(おいおい)。

 アンテナが問題だ。はじめループアンテナを作ろうと、ウェブサイトを漁ったが、作りたくなるようなものが見つからなかった。調べて行くうちにどんどん基本に戻り、アンテナとは何ぞやというところまで調べる羽目になった。

 ウェブで基本的なことを学ぼうとするが、なかなか良い資料にめぐまれない。どの世界でもそうだが、最初の初歩の部分の解説は山ほどあるが、ちょっと進んで、長波帯での有効なアンテナの考え方を分かりやすく書いたサイトは全く見当たらない。

 恐らく、書籍でもそうだろう。改めて探す気にならない。これまでに何度も失敗をしている。あきらめきれずネットサーフィンを続けるうち、不要電波の輻射をおさえるサイトの解説でふと面白いことを思いついた。要するにこの反対をやれば良いのだ。

 輻射を抑えるには、シールド線のように、行きと帰りのワイヤーを近づけて相殺させる。ぐるぐる巻きをさけて磁界と電界を交錯させないようにとある。そうだ、この逆をやれば、電波が出て行く勘定だ。

 つまり、ワイヤーのさしわたす範囲の面積を出来るだけ広げたり(一本線のアンテナでは地上接地面が対極)、繰り返しの流路をまとめて磁束と電界を交叉させたりすれば(コイル)、電波が輻射していくのだ。一波長が数キロメートルという長波電波でも、ループアンテナのようなものが有効だということが少しは理解できた。

続々とウエブで高周波部品を注文。圧着工具を2度買い(11/10/2018

 無線、高周波(RF)の世界は、これまでの、マイコンなどの電子工作とは少し毛色の違う部品を使う。同軸コネクターだけでも多種多様な規格があることを学ぶ。秋月電子の店頭で横目でみていたSMAコネクターが小さくて、とても工作心(ごころ)を刺激されていたのだが、これが大威張りで使える。 

 当面、当研究所の高周波コネクターは、SMAに統一することにしてSMA関係のコネクターやケーブルを次々に物色して、ネットで注文している。まるで新しい玩具に夢中になっている子供のようだ。Dsc01559 同軸などの通信ケーブルの配線では、コネクターかしめ用の圧着工具(ペンチ)が重要なキーディバイスである。圧着ペンチは昔から何故か気になる工具で、当研究所では、みな安物ばかりだがイーサネットや電話のRJ11,RJ45用から、ピンヘッダー用のオープンバレル型(これだけはまともなEngineer製)、AC配線の絶縁端子型用まで5つ近くが揃っている。

 圧着ペンチの価格はピンキリで業務用のものは軽く一万円近くするが、ここも最近は中華ものが幅を利かせているようで2千円しないで各種の工具が手に入る。同軸コネクターの圧着工具も中華製が安いので、気楽に他のSMAプラグなどと合わせて注文していたら、コネクターの規格とダイスのサイズの違うものが届いてしまった。

 どうもRG58や、RG174などのこれから使おうと思っているケーブルのサイズと微妙に違っている。いざとなればプラス側の細いピンの固定はハンダ付けで何とかなるが、千円ちょっとの工具なので、ウェブでもう一度、太さを確認し(インチとミリでややこしい)、2本目を発注した。Dsc01560 ところが、こういうときに限って、注文したものと全く違う型番のものが届いた。アマゾンは返品が簡単に出来るので、宅配業者に送料受取人払いで送り返し、同じものを注文しなおす。それにしても、肩の力が抜ける話だ。

 コネクターだけでなく、同軸ケーブルも種類が多すぎて何を選べば良いのかわからない。RG系列(米軍仕様)と、5C2V,3D2VなどのJIS系列は互換性があるところとないところがあり、コネクターそのものも、ケーブルによって種類が違い(太さが違うので)、もう何が何だかわからない状態である。

 既製品のアンテナも色々見つかった。マグネティックシールドループアンテナが良さそうだが、1万円以上してちょっと手が出せない。ケーブルを何メートル用意するのかも問題だ。最終的には、室内ではなく、せめて2階のベランダあたりまで伸ばすことを考えれば20メートル以上は買っておきたい。しかし、余り長いのを買ってしまうと損失がばかにならない。悩ましいところである。

 またケーブルの値段が店によって極端に違うのも気になる。秋葉原の有名なケーブルの専門店オヤイデ電気は結構高い。ネットの方が圧倒的に安いのだが、これもまちまちで迷ってしまう。ケーブルは規格品なのにどうしてこんなに値段が違うのか。中華パチものがあるのだろうか。

子供のラジカセからループアンテナをはずし実験。受信成功(11/13/2018)
 ちょうどそのころ、我が家の物置の奥に娘が捨てていったラジカセが見つかった。MDカセットという今では絶滅した電池式だ。手提げハンドルの脇にちょうど欲しかった巾10センチばかりの中波用のループアンテナがついていた。本体からはずれるようになっていて方向を選べる。

 早速これを利用することにする。たいしたループをしているわけではないが(7ターン)、テストしてみる価値はある。早速、SMAプラグにターミナルブロックをつけるブレーク基板を用意して、接続し、地下のPC横でテストしてみた。 Dsc01558

 おお、HFコンバーターで始めて中波AM放送を聞くことができた。地下では、せいぜいが、NHK第一とFEN、それに東京放送(TBS)くらいだが、同軸ケーブルで地上近くに持って行くと、5局以上が受信できた。

 ためしに、電話線でワイヤーを垂らして持ち出すと、家庭電力からの強烈な雑音で全く聞こえなくなった。同軸ケーブルはやっぱりノイズ抑制には欠かせないものであることを納得する。

アンテナを外に出しても感度改善せず(11/15/2018)
 圧着ペンチが届かないので、SMAプラグを、買い置きのRG174ケーブルに、だましだまし固定し、中継プラグで継ぎ足して(例のリバースSMAコードに変換プラグをかませたもの)、ラジカセアンテナを屋外に出した。

 我が家は家族の要望で防犯・防災用に網ガラスが入っている。電波事情としては良い環境とは言えない。これを避けるためである。屋外に固定するために作ったのが、写真のデコパネでつくった棚である。玄関の外壁に両面テープで固定した。 Dsc01555 デコパネ(ポリスチレン樹脂)は、近くのホームセンターでたまたま見つけた極めて軽くてしかも意外に丈夫な板素材である。ポリスチレンも接着できるという接着剤が、最近売り出されているのでそのテストの意味もあって買ってきた。

 デコパネをハサミや、カッターで簡単に切り離し、接着剤で固定する。考えていた構造をあっという間に作ることが出来た。重いものは載せられないが、ループアンテナくらいなら問題ない。ガムテ―プでアンテナを仮止めする。

 ケーブルは、ルーバー型の換気窓の下を通す。見映えはいまひとつだが、無事、地下の工作室から、玄関先の換気窓のところまでケーブルがつながった。勇躍、受信テストに入る。しかし、アンテナを外に出しても感度は殆ど改善されなかった。期待していただけにがっかりである。

4アマくらいならちょっと勉強したら合格できるかも?(11/17/2018)
 RFの世界を調べ始めて、どんどん深入りが止まらなくなっている。今まで避けて通っていたアマチュア無線の世界でもある。見ること聞くことが、とても新鮮で物珍しい。危険だ。ここもオーディオ同様、やりだすと止まらない趣味である。

 それでも誘惑に耐えられず、ウェブで昨今のアマチュア無線界を覗いてしまった。色々面白い。無線の資格が昔に比べると全く変わっている。4級というクラスまである。これが昔の電話級という初心者向けのライセンスのようだ。

 試験問題までウェブで見ることができる。試しに電波工学のところを全く復習せずにやってみた。10問くらいですべて選択問題である。解答を調べる。おお、70%くらいの正解率だ。これはやれるじゃないか。ちょっと楽しみになってきた。

 とはいえ、アマチュア無線を活発にやろうという気は何故か盛り上がってこない。電波の送信だけがやってみたいだけなので、これ以上の具体的なステップには進まなかった。

驚くべき中華ラジオの世界。オールバンドラジオがたったの1500円!(11/19/2018)
 我が家にはだいぶ前から携帯ラジオがない。リファレンス機器として一台買うことにした。災害への備えにもなる。

 適当なものを探すためウェブで調べ始めて驚いた。何とたったの¥1500台でオールバンドラジオが売り出されている。もちろん中華製だが、どうも日本のELPAのコピー品のようだ。だめもとで注文してみる。 Dsc01544 ほどなく到着し、早速試聴した。これがなんと、これまでのHFコンバーター付きのRTL-SDRドングルより感度が高い。地下のPC横の外部アンテナなしでNHK第一が楽々入感する。ニッポン放送などドングルでは入りにくいものまで聞こえる(ノイズが多いが)。すっかり肩の力が抜ける。

 あわててドングルの前段につけるHFアンプを発注する。ドングルといえども、もう少し感度を上げておきたい。HFアンプは、これまた多種多様のアンプが販売されて適当なものを見つけるのが大変だった。少しづつスペックが違う。Dsc01554 RFアンプはともかく、この¥1500台のラジオは家族に強奪された。手芸の時にラジオが一番落ち着くのだそうだ。

2万円以上するSDRドングルがあるそうな(11/28/2018)
 話は発散するばかりで止め処がない。ソフトウエアラジオ(SDR)には、別のオールバンドSDRがあるということを知る。RTL-SDRドングルは8ビットADCだが、これは12ビットサンプリングである。さらにLNA(ローノイズアンプ)が付いている。

 紛らわしいがSDRplay RSP2という名前で、イギリスの製品である。アマチュア無線家が本国から輸入して実際の局の運用に使っているレベルのようだ。ただし価格は 2万円以上する。いずれ中華パチものが出てくると思うが、今のところその情報はない。だいぶん迷ったが、結局、買うことは見合わせる。

デコパネのループアンテナが案外感度が良い。3D-2V同軸ケーブルと接続(12/2/2018)
 格安のモノタロウから50mで¥4000(メートルあたり¥80!オヤイデだと¥200以上)の3D-2Vケーブルが届いた。とりあえず30mで切って両端にSMAプラグを付ける。将来2階のベランダにアンテナを上げても届く長さにした。 Dsc01552 再発注して届いた圧着ペンチで本格的な、コネクターのかしめの仕事をする。この圧着ペンチはアマゾンで売られている格安のペンチ(¥1500 足らず)で、型番はTU-301Gである。秋月で買った、かしめ用のSMAプラグの各部のサイズとどうも0.1ミリほどの誤差があるのが気になったが問題なく圧着に成功した。

 アンテナは、棚で味を占めたデコパネで作る。30cm四方のループアンテナを作った。デコパネなのでフニャフニャだが、沢山巻かなければ大丈夫だ。Aitendoで手に入れたポリバリコンをミニブレッドボードに実装し、中波帯は同調アンテナにする。Dsc01553 秋月で買った精密級(?)のLCRメーター(LE5000)が大活躍である。14ターンで190μHで、4連のポリバリコンをすべて並列にして400pF足らず。これで中波帯が入るはずだ。念のためフランクリン発振回路に入れてみた。見事に、500KHzあたりの発振を確かめた。

遂にJJYを捉えたか(12/7/2018)
 このあいだのテストで外に出しても余り感度が変わらないことがわかったので、アンテナを1Fのサンルームの三脚(ライブカメラ用)に固定して、アンテナのテストに入る。ポリバリコンはつけたままで同調形の中波用になっている。

Dsc01556 アンテナ出力は、ピックアップコイル(3ターン)を同時巻きし、同軸ケーブルで受信機までつなぐ。結果は上々で沢山の放送局が聞こえる。ポリバリコンで感度の高い周波数帯域が移動することを確かめる。AGCをかけないと、大電力のNHK第一や、FENは出力が大きすぎ歪んでしまうほどだ。

 いよいよ、40Khz帯の探索だ。ポリバリコンにさらに並列に0.03μFのセラコンを加え、ドングルの前にHFアンプを加えて、ソフトウエアラジオのSDR#を100Mhz帯にセットする。

 左側に、局発の100Mhzの大きなピークが映り、右横の周波数帯をrangeバーで広げて、出現するピークを慎重に調べて行く。ヘテロダイン方式の受信機は、とにかく混変調を起こしやすく(自分で別の電波を作っているので)、至る所にあらわれるイメージ波に用心しないといけない。

Ws000014 すると、40Khzより少し低いが、数Khz手前の38.5Khz近辺に出力が間歇的に上下する電波を発見した。ラジオをCWモードにするが、JJY時報のようなパルスは捉えられない。暫く、周辺を探索する。HFコンバーターは中波でも数Khzの誤差が出ているので、これがどうもJJY臭い。

 JJYは毎時15分と45分にJJYのコールサインをモールスコードで発信している。何回かこのタイミングで耳をそばだてたが、聞き取ることは出来なかった。 Ws000017

 確かな証拠は見つけられなかったが、これがJJYの40Khzである可能性は高い。RFの世界の探索は今後も続けるとして、JJYを見るというテーマはこのへんで一段落して肩の荷を下ろすことにする。

| | コメント (0) | トラックバック (0)

2018年10月31日 (水)

JJY電波を見るため、RF(高周波)の世界に踏み込む

 当研究所で最後まで残った未踏のフロンティアはRF(高周波)である。実はRFには思い入れがあって、何となくこれまで避けていたのだが、ひょんなきっかけでどっぷり踏み込むことになった。

 前にも少し触れたと思うが、所長は60年以上昔の中学生の頃、アマチュア無線に熱中していた。電話級が出来る前の2アマの国家試験は一次が合格し、二次は修学旅行と重なったため(試験は受け直せても修学旅行は一度きり)受けずにそのままになっている(当時は一次試験合格有効期間が10年あった)。

 修学旅行で秋葉原に行き、ガード下の真空管屋さんで、807と5U4G(パワー出力管と整流管)を買い込み、後生大事に持ち帰った記憶がよみがえる。結局、電源トランスが高くて買えなくて、送信機を自作するところまで行かなかった。

 その代わり、6ZP1(いや懐かしい)という一般ラジオ用の出力管で、近くの悪友と勝手に電波を飛ばし遊んでいた(豆電球にループ線をつけ、出力コイルにかざすとマイクの音に合わせて明滅し楽しかった)。そんな今になっては時効になった様々な思い出がある。

 そのうち受験勉強が忙しくなって、結局、無線免許はとりそびれた。そんなトラウマがあるのか、電子工作を始めてもこの世界はあえて封印していたのだが、JJYの電波時計リピーターを開発しているうち、遂に、RFの世界に再び入り込む誘惑に耐え切れなくなってしまった。どんな状況になったか。詳しくは以下の作業記録で。Dsc01506

スペアナが欲しいが高い(10/1/2018)
  そもそもは、JJYの標準電波がどの程度、この研究所に来ているかを調べたかったのがきっかけである。軽い気持ちで作ったJJYリピーターは十分な出力があるはずなのに少し離れるとノイズっぽくなって受信が出来なくなる。このままではリピーターをかなり時計に近づける必要があり実用性が低い。

 受信出来なくなるのは、本家のJJY電波(40khz)と干渉しているからだと思われるが、本当に干渉しているかは単なる推測で確かめたわけではない。リピーターを60khzにすれば解決するのかも知れないが、そうなると受信側も対応が必要で面倒だ。

 こういうことを検証するには、何と言ってもスペクトルアナライザーが一番である。来ている電波を適当なアンテナなどで受けてスペアナで調べれば一発で解決する。しかし、スペアナは、オシロに比べると中華の安値革命がまだ起きていないと見えて、どれも高価である。いくら安くても10万円近くはする。

 参考書などを手に入れて、少しまともに調べ始めたのだが、長波帯までカバーするスペアナはやはり本格的なものでなくては無理で、そういうスペアナは50万円以上する。PCにUSB接続するハンディなものでも100万近くするのはざらで、とても手が出せるものではない。

 どうしたものかと考えていたら、そのうちウェブ上で恰好のものが見つかった。サウンドカードのアナログ入力を利用したPCで動くソフトウエアのスペアナである。実際に動かして、JJYの電波をとらえている記事も複数見つかった。

 Spectrum Labというのが定番のようだ。主な測定対象はオーディオ帯域のようだが、最近のサウンドカードはスーパーオーディオCD(SACD)の普及で、長波帯(40Khz)くらいは軽くカバーしているようだ。当研究所のメインPCのサウンドカードも48khzサンプリングで、何とか聞こえるのではないか。

Spectrorum LabでPCサウンドカードのスペアナを狙うも失敗(10/2/2018)
 早速、このPCのフリーのスペアナソフトSpectrum Labを使わせてもらうことにする。ドイツのアマ無線家(DL4YHF)の開発で、凝りに凝った機能がてんこもりである。いかにもドイツ人らしい緻密な構成だ。アマ無線家御用達のようで、多種多様な使い方の紹介があり、何から始めて良いのか全く見当がつかない。ただ、わずかだが日本語の解説ページがある。

 しかし、日本語でも専門用語が多く理解するのにひと苦労だ。幸い、このソフトでJJYを受信しているサイトがあったので、それを頼りに導入を進めた。ダウンロードは順調に終わり、動作させると画面上に一定の範囲の周波数帯域の受信スペクトルが出始めた。

 全体の電波の受信スペクトルが時系列で画面上を滝のように流れて行く(WaterFallと呼ばれる)。素晴らしい。しかし設定が難しくて、JJY電波の40khzあたりの受信帯域になかなかならず、エラーになることが多い。

 しかも、やっとのことで帯域の設定が出来ても、肝腎の電波が出てこない。念のため、埃を払って自作のSG(シグナルジェネレーター)を持ち出して、その出力をアナログ入力につなぐと20khz以上では出力が消える。Ws000010

 そのうち大変なことに気が付いた。現在のメインPCのサウンドカードは、古い、ゲームポートがまだついている48khzのCreativeのサウンドカードである。48khzサンプリングで見える周波数はその半分の24Khzであることに今更のように気が付いた(シャノンの定理)。

 道理でSpcetrum Labの画面では、24khz以上のホワイトノイズが綺麗に下がっているわけだ。やれやれ、ハードウエアがサポートしていないので、40khzの受信は、この手持ちのサウンドカードでは無理なのである。暫し呆然とする。

サウンドカードを新調するもこれも受信せず(10/7/2018)
 こういうところで簡単にやめてしまわないところが所長の取柄である。漱石の「坊ちゃん」ではないが、若いころから、これで苦労している。負けず嫌いとも言うが、この年になってこの性格が自分にとって良かったかどうか長期的に判断すれば、どうみても赤字決算だ。

 決して褒められる性格ではない。しかし精神衛生上は、間違いなくこちらの方がストレスは少ない。自分の気持ちに正直にこだわっている方が、色々なことを我慢して別の道にいやいや進むより、気分的にははるかに楽だからだ。

 ということで、懲りずにネットで最近のサウンドカードの動向を恐る恐るリサーチする。折角、ソフトを入れたのだから、サウンドカードそのものを取り替えてやろうという算段である。すると、96Khzや192Khzサンプリングのスーパーオーディオのサウンドカードが次々に見つかった。Ws000012

 価格も3000円程度であることがわかった。10万以上するスペアナのことを考えればただのような安さだ。喜び勇んでサウンドカードをウェブでポチッた。アマゾンで注文して3日で届いた。いそいそと、これまでのカードをはずして装填する。

 ところがどっこい、こいつがうまく行かない。帯域の設定は明らかに前のカードに比べれば楽になり、簡単に96Khzあたりに設定がエラーなしに出来るようになったが、受信しないのである。自作SGの出力をパスコン(0.1μF)経由で直接アナログ入力に接続しテストを進める。

 すると前のカード同様、24Khz以下では活発に波が出るのに、それ以上になると全くピークがでてこないことがわかった。その代わり、24khzより低い周波数を発生させていると、高調波の形で、派手に40Khz以上の波形が出始める。

 何ということだ。こいつもアナログ系はどうも24Khzを境にLPFをかけたように感度が極端に下がる。もしかすると本当に音声帯域のためのLPFが付いているのかもしれない。

ちゃんとLPFのカットオフ周波数は100Khzになっていた(10/10/2018)
 こうなると、もう止まらない。高額でないにしろ新しいカードを準備したのだ。このまま黙って引き下がるわけにはいかない。 

 サウンドカードをもういちどPCスロットからはずして、オーディオジャック近辺のプリント配線を、実体顕微鏡を使って調査する。もしかしたら、このアナログ部分にCRフィルターがかかっているのかもしれない。それなら、このLPFをバイパスしてやれば良い。

 プリント基板をいじろうという大それた目論見だが、乗り掛かった舟である。このあたりの表面実装部品は、1608程度の大きさなので、何とか手ハンダで修正が可能だと思う。

 20倍の実体顕微鏡で調べたところでは、確かに、オーディオジャックから音声チップに入る前に、それらしいアナログ回路がついている(写真の赤丸で囲ったところ)。Line もMicの入力もどれも、一段のRCフィルターがついているようだ。

 配線の済んだCRの定数は正しく測定することは出来ないはずだが、秋月の精密級LCRメーター(LE5000)は、2点間の合成LCRを出してくれるという触れ込みなので測ってみる。何かもっともらしいCR値が現れた。得た値をウェブの早見表ソフトに入れカットオフ周波数を調べる。Dsc01541

 測定できた定数は、LineもMicも違った値だったが、奇しくも2つともカットオフ周波数は100Khz近辺で、96khzサンプリングというスペックと符合する。ちゃんと通しているように見える。

 さてどうしよう。このCR部分が本当にLPFになっているかどうかの確証が得られないまま、このカードの配線をいじる勇気は生まれてこない。この方法は少し棚上げにするしかないか。

高周波増幅回路の横道に入る(10/12/2018)  
 ウェブには、電波時計の受信モジュールを使うのでなく、スクラッチからJJYの受信機を自作して受信に成功しておられる方の記事もいくつかある。その中には、FETを使った高周波リニアアンプの回路図も載っている。

 そうか、アナログ入力の前にアンプで増幅しておけば電波が見つかるかもしれない。アンプの回路はとても簡単である。しかも使用する高周波用のFETは、2SK241といって秋月でももう売っていない絶滅危惧種なのだそうだ。これは横道に入るのに十分な魅力的な話である。

 本来の目的に向かっているかどうかわからないが、急にアンプが作りたくなった。ウェブを探し回って、本来の定番2SK241(東芝製)の完全互換品、2SK439(日立製)が、あのAitendoで売っていることを発見し(¥120)、これだけのために、Aitendoに足を運んだ。

 高周波なので本当はハンダ付けで作るべきだろうが、とりあえずブレッドボードに配線を短くして組んでみる。回路はここを参考にさせていただいた。簡単な回路なのですぐ完成した。電源は、リチウム電池である。Dsc01508

 アンプそのものの増幅率は、SGで波を出し、オシロで入出力をモニターすれば実測可能だ。おお、これは簡単に測定できた。発振もしない。ただ中波帯(1Mhz以下)では増幅率は30倍近くあるが、1Mhzを超すと、どんどん増幅が頭打ちになる。

 まあ、中長波帯では数十倍あるので、早速、回路をサウンドカードの前段に接続しテストしてみる。残念。やはりこの程度の増幅では、リピーターの40khzも本来のJJYも受信不能であった。

さらに中華SDRドングルを買ってしまう(10/16/2018)
 八方塞がりである。何をやってもうまく動かない。しかし、ここまで無線に目覚めてしまったので、このまま引き下がるわけにはいかなくなった。あきらめきれず色々調べているうち、さらにJJYを受ける方法があることがわかった。ワンセグチューナーのドングルである。

 夢中になってウェブを探索する。これまで避けて通ってきた道なので、RFの世界は知らないことが多くて興味が尽きない。スペクトルアナライザーに関連したところでは、ワンセグのテレビを視聴できるUSBドングルが流行っているようだ。Dsc01507

 たったの20ドル近くで高性能のデジタルレシーバー(Software Digital Radio)が手に入る。本来は欧州仕様のTVワンセグチューナーのドングルだが、これも欧州のアマチュア無線家が開発したソフトを使うと、FM受信機や、航空無線の傍受用に早変わりし、VHFのスペアナにもなる。

 調べているうち、VHF帯だけでなく、長中波やHF(短波)も聞けるオールバンドラジオになることを知った。ふーむ、これならJJYもこれで聞けるかもしれない。

 このあいだのCNCマシン同様、同じような形をしたドングルが市場に出回っていて、やたらと種類が多い。代表的な、というよりオリジナルはRTL-SDRと呼ばれるドングルのようだ。色々調べた結果、ドングルではなくHF帯も受信できるソフトウエアラジオのセットを注文した。これもアマゾンで発注して3日で届いた。Ws000011

 アンテナを普段使っているTV/FM用の同軸ケーブルにつなぐと、FM放送などは簡単に受信が出来た。長波帯の受信を試みる。しかし、残念なことに、こいつも1000Khz以下は極端に感度が下がる。VHFは快調に受信するが、HF帯はまともなアンテナをつけなければ無理なようだ。

 スペック上は100khz以上ということで、受信方式はダイレクトサンプリングなので、少し感度が低いということをあとで知った。 

はてはHFコンバーターも発注(10/20/2018)
 もう際限がなくなってきた。前から秋月で気になっていた高周波用の同軸コネクター関連のパーツを手当たり次第にウェブでポチっている。まず、SMAコネクターまわりが気になって、ケーブルやコネクターを買い込む。Dsc01509

 安いので、知らずにリバースSMAのケーブルを買って、刺さらなくてあせって、あわてて変換プラグを注文したり、FケーブルからSMAの変換プラグ(厳密にはインピーダンスが合わないので国産にはない)を発注したり、はては、同軸ケーブルの圧着工具(安い中国製)まで注文したりして、もう錯乱状態である。

 そのうち、ダイレクトサンプリングではなく、スーパーヘテロダイン方式(だと思う)のHFコンバーターがアマゾンに出ているのを発見した。これなら長波帯までカバーしているので受信ができるかもしれない。

 完成品は少し高いが(¥6800)、キットでも頒布されていることがわかった(半額)。少し迷ったが、高周波基板の勉強のつもりでキットで手に入れることにした。日本の個人の方が開発されているというのも心強い。

 メールで申し込んだら、すぐ返事があり、お金を振り込むと3日も経たないうちに家に届いた。アマゾンに頼んだ諸々の部品や工具はまだ届いていないというのに、驚くべき速さだ。

 封筒を開けてみて、予想通りの細かい部品に、いささかたじろぎ、これまでのようにすぐ制作にとりかかる余裕が生まれてこない。そこで、このブログの記事を出した後、一度気分を落ち着かせてから着手することにする。

| | コメント (0) | トラックバック (0)

2018年10月 2日 (火)

ESP8266のJJY電波時計のスケッチ公開

 これまで作っていたESP8266を使ったJJY電波リピーターと電波時計受信機のうち、受信機の方が何とか安定して時刻を知らせるようになった。とりあえずこちらを先に、ソースコードと回路図を公開することにする。

 電波時計は長時間動かすものだから、本来はESP8266のような大喰いのWiFiモジュールで作るのは筋違いだが、WiFi環境が必要な電波リピーターにESP8266を使ったので、開発環境を共通にしたかったのと、気楽に始めたのにうまく動かず、止めるに止められなくなったせいでもある。

 前にも書いたが、JJYの受信パルスは1秒に一回の超低速通信(1bps)である。クロック80MHzのESP8266なら沢山のロジックを組み込んで、相当インテリジェントなエラー修正が出来ると意気込んで始めたのだが、これがとんでもなく難関で、ほんの少しでもノイズが出るような受信環境では全く正しくデコードができない。Dsc01493

 リピーターのコイルから数十センチも離すと、受信モジュールが正規の福島(おおたかどやま)からの電波も受け始めて干渉を起こすらしく、年月日などに目茶目茶な数字を出し始めて全く話にならない。出来ないとなると、むらむらと反抗心が出てきて何とかしてやろうと、いつもの悪い癖が出る。

 この3週間、半分泣きべそをかきながら、意地になってデバッグに熱中していた。その結果、何とか市販の電波時計程度の信頼性のある時計になったので、Arduinoのスケッチソースリストと、回路図を公開することにする。どれだけ迷走したか。詳しくはこれ以降の作業記録で。

やっぱり日本の女子は強い(9/9/2018)

 その前に、ちょっと電子工作とは違う話題を少し。プロテニスの話である。手が届きそうで届かなかったテニス4大大会(グランドスラム)の日本人の優勝は、天真爛漫なあの「大坂なおみ」があっさり全米で達成してしまった。

 4年前の錦織の全米準優勝も驚いたが、今度はもっとすごい。勝ち方が豪快である。彼女のことだったら、本当のグランドスラム(1年間に、全米、全豪、全仏、全英すべてに優勝)をやってのけるかもしれない。

 錦織のときにも同じことを書いたが、野球はアメリカと日本でしか騒がないのに対し、テニスは全世界が対象である。しかも、サッカーは庶民が中心だが、テニスはセレブのスポーツファンを巻き込む。ウィンブルドンの観客の平均年収は2000万円という話を聞いたこともある。世界に与える影響は、野球の比ではない。

 ちょっと気になるのが、彼女の出自の問題だ。今、世界は、水面下では色々あっても建前上は人種の区別をしないことに極度に神経質になっている。それなのに日本のマスコミが彼女の帰国会見で、実に無神経な質問をしたのには驚いた(あなたは何人?)。

 こういう話は、すぐに世界中にひろまる(マスコミの浅はかさは世界共通)。世界から日本が馬鹿にされるのは身から出た錆でしようがないけれど、大坂選手が日本に愛想をつかしてアメリカ国籍に換わってしまわないことを祈るばかりである。Dsc01485

I2C液晶を2台とも4本の結線だけで動かす(9/10/2018)
 電子工作の話に戻ろう。Aitendoで入手した2台のI2C液晶の始末である。このうち一台は電源を逆接してしまい、破損が心配されたが、幸運にも壊れていなかった。バックライト付きだから今のところACアダプターのついた電波時計に使う予定である。

 インターフェースはI2Cだが、液晶の本体は12本のピンが出ており、内部で使うコンデンサーや、I2C/SPIの識別をする制御線などの追加の配線が必要である。工作のついでに、2つの液晶がいつでも使えるようチップコンデンサーなどを使って整備しておくことにした。

 このままでは、ブレッドボードに配線を加える必要があり、特にひとつは動作テストを急いだため、ジャンパーコードやコンデンサーを空中でハンダ付けする完全なバラック状態になっている。なお、このコンデンサーは省略することが出来ない。はずすと簡単に動かなくなる。Dsc01494

 久しぶりに秋月にでかけ(このところはAitendoが多かった)、1μFのチップセラコンを入手した。相変わらず、ここはいつも賑わっている。帰って早速チップセラコン(2012)の空中配線を楽しむ。I2Cだけだとピンヘッダーは4 本ですむのだが、4本だとやや強度に不安が出る。

 課題が残った。液晶とバックライトの発光面との接着である。両面テープで貼るのは手軽で良いが、蛍光面にテープが見えて見栄えが悪い。それと時計の表示装置にするのならバックライトなしの液晶の方が消費電力が少なくて済む。また買いに行かなければ。

JJY電波リピーターのバグを解消した(9/14/2018)

 電波時計の前にやることが残っている。JJY電波リピーターの不具合である。リピーターはNTPから時刻を貰っているので正確無比のはずなのだが、長時間動かすと、何故か分単位で遅れることがある。

 NTPや、WiFiが原因であることは考えにくいので、すべてこちらが悪いのだが、原因が思い当たらない。NTPの正時(0秒)を待ってパルスシーケンスを始めるのだが、パルスシーケンスは59 秒間の最後がポジションマーカーパルスで0.2秒、この残りの0.8秒で次のNTP時刻が変わるのを待って同期させるロジックである。

 たとえ遅れたとしても、秒単位の遅れのはずなのにパルスシーケンスは、1分以上の時刻遅れを表示する。しかも、エラーは長時間のときにたまに発生するだけで、普通は全く問題ない。

 長時間(2時間以上)コンソールにメッセージを記録し続けてやっと原因がわかった。何と本来は59.2秒で終わるはずなのに、59秒より早く送り終えるところが見つかった。ロジックは59とか0などの絶対値ではなく、NTPで得た秒データの変化をトリガーにしている。

 このままだと59秒の時に、そのときの「分」データを得てそれを新しい時刻の「分」にするので結果として1分遅れることになる。なぜ早くなるのかの原因は全く見当がつかない。どうしようか。

 迷ったけれど、対症療法で、NTPの秒データが00になるまでべたに待つことにした。CPUは回りっぱなしで精神衛生上あまり愉快ではないが背に腹は代えられない。幸いなことにこの修正後は全く問題なく動いている。

焦電型人感センサーを更新(9/15/2018)
  さらに道草を食っている。階段の照明の入り切りに使っていた焦電型人感センサーが何となく感度が悪くなり、階段の前でパントマイムをやらされることが増えてきた(動きがあると反応する)。

 人感センサーについては、実は、一年前、秋月で偶然これを見つけて買ってある。以前、千石で買おうと思った赤外線センサーNapionの改良形のようだ、値段は半分以下の¥480だった。テストしただけで、部品箱に眠っている。Dsc01496

 階段の上での身振り手振りが、段々煩わしくなったきたので、これに更新することにした。久しぶりの汎用基板でのハンダ付けが楽しい。UEW線を持ち出さずに、すべてのパーツのリード線を活用し配線する。

 作り替えたのはセンサー部だけで、電源の入り切りなどの制御ユニットはこれまでのものを流用する。何事もなく完成した。ちょっと物足らなかったが、出来上がりには満足である。今度のセンサーはやたら高感度で、階段に近づくだけで反応する。

 考えてみたら、最初のセンサーを作ったのは、もう6年も前のことだった。まあ、6年も使ったのだがら減価償却はできているだろう。Dsc01495

エラー回復ロジックをつけた電波時計ロジックの工夫(9/20/2018)
 電波時計の開発にぐずぐずしているのは理由がある。今回のプロジェクトの本筋は、JJY電波リピーターで、電波時計は単なるテスト環境のつもりだった。我が家にある市販の電波時計は、腕時計、目覚まし、掛け時計とあらゆる種類が整い、今さら電波時計を自作する必要性はない。

 それなのに電波時計の方に夢中になっているのは一種の逃避である。電波リピーターはハードの要素が大きい。しかもハードと言っても電波という高周波の世界である。所長の高周波の知識は、60年近く昔の少年時代から一歩も進んでいない。大学時代の知識は超絶的な理論ベースで、実践には見事なほど役に立たない(自分であきれるばかり)。

 何となくハードを避け、自分の得意なソフトにこだわりたくなる潜在意識があるようだ。電波時計のハードは、いじるところがないが(受信モジュールには手が出せない)、ソフトには改良の大きな余地があるような期待がある。

 JJYの標準電波のロジックは簡単な構造である。一秒に一回の立ち上がりパルスのタイミングが、その時の正確な秒を示し、そのあとのパルス幅でコードが決定する(0.5秒が1、0.8秒が0)。10秒に一回、マーカーパルス(0.2秒)が出て、次のフレームへ進む。

 さらに1分に一回、このマーカーパルスが冒頭に出て正時(0秒)を定義する。6つのフレームは、時分、月日、西暦、曜日などに分かれ、時分については第4フレームにパリティビットがついて誤り検知が出来るようになっている。Dsc01488

 この連続マーカーパルスさえ正しく検知できれば、データが途中乱れても相当なエラー回復が可能である。いわゆるフレーム同期というやつで、月日、西暦などのデータは数多く重複するので、フレーム単位にデータを貯めておけば、大きな狂いを防ぐことも出来る。

 こうしたことを頭に入れて、オシロでJJY受信モジュールの出力波形をつぶさに観察すると、ノイズはパルスの立ち上がりや立下りでチャタリング風に出る短いパルスが多く、パルスの真ん中を分断することは少ない。チャタリング抑止のロジックを入れればだいぶエラーを減らせそうだ。

 さらに、パルス巾の認定にも工夫をした。参考にさせて貰ったソースリストでは、パルス巾の有効範囲がひどく狭く、それ以外をエラーにしている。このため、ちょっとノイズが出始めると、エラービットばかりになって話にならない。

 考えてみれば、パルス巾は、0.2、0.5、0.8秒以外はないので(15分、45分に出るモールス信号列を除けば)、中間値をすべてエラーにするのはおかしい。少々強引だが、ここではエラーの範囲をなくし、適当な区切りですべてを何らかの有効データとみなして後で調整することにした。

思いつくエラー修正を片っ端から盛り込むも迷走(9/23/2018)
 さらに、次のようなフレーム単位の修正ロジックを入れて、実験を開始した。測定では正式のJJY標準電波は、PCルームではノイズだらけで全くデコード不能になるので、主にNTPを使った電波リピーターの出力をソースにする。それでも正規のJJY電波と干渉するせいか少し離すとノイズが出る。

●正時(0秒)と正時の間のフレーム数が、6つ以外はエラーとしこの間のデータは捨てる
●マーカーとマーカーの間のパルス数が規定以外(9ビット)ではエラーとし、このフレームのデータを無効とする。

 しかし、この程度では少し波形がノイズっぽくなってくると、データが全く有効ではなくなり、表示は目茶目茶になる。特に致命的なのが、正時を判断する連続ポジションマーカーの取りこぼしで、たとえそのあとのフレームを正しく受信していても、西暦などもとんでもない数字に変わってしまう。

そこでさらに、
●キャッシュにデータを蓄えておいて、1分間正しくデータ(6フレーム、9ビット)を拾ったとき  にのみ始めて、そのときの時分、年月日を表示する。
●10秒ごとのフレーム単位に 有効/無効フラグを設定し、年月日のデータは使いまわしをする。

 などのデータ保全を狙った改善を行った。だいぶん精度が高くなった半面、正しい時刻に戻るのに時間がかかるうえ、時々、月日や西暦が出鱈目になる不具合は改善されない。エラーの程度を定量的に把握することが難しく何が効果があるのかわからないので泥沼状態である。

 試しに正式なJJYの受信できる場所で動かしてみる。電波が安定しているときは良いが、やっぱり、少しノイズが出始めてエラーになったら全くダメダメで、なかなか回復しない。既に正しく受信できているはずの西暦や、月日も目茶目茶になってしまう。

別の不具合が落着。やっと日にち違いの原因が究明された(9/25/2018)
 それでも受信エラーが僅かなうちは修正が効き、リピーターに近づけている限り、正しい時刻を表示するようになってきた。JJY標準電波の方も場所を選べば安定して受信できる。しかし、受信機にはまだもうひとつ大きな問題が残っている。 Dsc01482

 実際のJJY標準電波を受信すると受信機の日付が一日先になるのだ。リピーターから受信していれば合っているのに、標準で一日ずれるのは、要するにリピーターが出すパルスシーケンスがずれていることを示すが、リピーターが表示している日付とパルスシーケンスは全く同じリソースからとっており、ここで誤りが起きるのは不可思議としか言いようがない。

 例の辻褄合わせで直した「とがめ」が出ている感じがする。今度も閏年を疑って再度テストステートメントを挿入して確かめるが、問題はない。そこで少しづつ、printfを入れ込んで犯人を追跡していった。その結果、電波時計の方が帳尻合わせをしているようで、犯人はリピーター臭い。

 ビットの送り込みや、UNIX経過秒なども調べるが問題なし。さんざん調べまわった結果、やっと原因がわかった。NTPの通算日データが0オリジンだったというオチである(JJYは1オリジン)。NTPでは通算日と月日の両方のデータが独立して取れるようになっており、これが発見を遅らせた。

 奥歯に物がはさまったように気になっていたJJYリピーターと電波時計の一日の狂いが遂に究明された。最近は物忘れが激しく、つい10年も経たない職場の同僚の名前を思い出せなくて数日悩むことがあるが、それに匹敵する「もやもや感」が解消され、気分が良い。

もう一歩踏み込んでエラー補正。何とか及第か(9/27/2018)
 市販の電波時計が受信できるところでは、殆どエラーなしに受信ができるようになってきた。ただ、一分ごととフレーム毎のエラーチェックを厳密にしているはずなのに、まだ年月日が、ときどきインチキになるときがある。

 これがなぜ起きるのか、調べているうちに、この現象は偶にではなくしょっちゅう起こりうる現象であることがわかった。つまり誤ったポジションマーカーを途中で拾うと本来入るべきフレームではないところに別のデータが送り込まれる。

 当然、そのフレームはエラーになるが、次のフレームは0から始まるのでビット数が合ってそのフレームが有効になってしまうのだ。このフレームは所定の場所ではないので、データはでたらめになるというわけである。これを避けるには、正時から積算しているシステム内の秒数とフレーム数の照合をする必要がある。

 生の秒数と、フレーム番号を比較するのは少し抵抗があったのだが、この秒数は、連続したポジションマーカーの時、0に戻しているので信頼性は高い。やってみると、この効果は絶大で、年月日はまずどんなことがあっても変化しなくなった。やっと電波時計らしくなった。

 さらに、一度、正確に手に入れたデータはUNIX経過秒の形で残し、1分後のデータに不安がある時は、これを更新せず、前の経過秒に秒数を足す形で表示を守る。この秒数は、ArduinoIDEのタイムスタンプmillis()まで動員した。ちょっと禁じ手に近い技だが、理論上は、とりあえずは電波が受信できない状態でも時間は守れる。

JJY電波時計のESP8266用スケッチソースコードの公開(9/30/2018)
 居間に持ち込んでフィールドテストを続ける。本来のJJY電波の到達するところは殆どエラーなしで順調である。たまに数分遅れる時があるが、すぐに復帰する。これを避けるのは、電波時計の中にRTC(リアルタイマークロック)を入れれば完全に解決するが、元はと言えば、電波リピーターのテスト環境のつもりで開発してきたので、そこまでやる気はない。

 消費電流の多いESP8266とバックライト付きの液晶を使った電波時計だが、何かの参考になるかと思い。ここに回路図と一緒にスケッチソースコードを公開することにする。参考にさせていただいたソースコードはここである。復号のところは大いに参考にさせてもらった。あらためて御礼申し上げたい。Jjyclock

 回路について少し説明をしておくと、JJY受信モジュールはAitendoの古い40/60Khz受信モジュールで、もう販売しておらず、今は新しい受信モジュールになっているが、所定のところにつなげば(GPIOへは新しいモジュールのTNというネガティブ信号入力)、問題なく動くと思われる。

 受信モジュールとESP8266のGPIOとの間にトランジスター(2SA1015)が入っているが、これは、受信モジュールが負論理(0がデータ受信)の逆転をするためと、受信モジュールと直接ESP8266とつないだときの高周波ノイズを避けるためである(以前オシロにプローブをあてると誤動作した)。

 液晶の表示は、上段が年月日と時分、下段は、秒数とフレームの処理推移のプログレッシブバーもどき、さらに頭に正式なJJYからではなく推定の時には「X」マークが出る。

以下に、zipファイルでかためたスケッチソースファイルのフォルダーと、BSCH3Vの回路図ファイルを置きます。

「JJYradioClock.zip」をダウンロード


| | コメント (0) | トラックバック (0)

2018年9月 9日 (日)

ESP8266による電波時計リピーターの完成

 今年の8月は例年にない猛暑だった。観測史上初めてという猛暑日(35度以上)数の記録が各地で相次いだ。ここ東京も例外ではなく、月後半には猛烈な雷の夕立が連続したりして、何か日本が亜熱帯気候地帯に変わってしまったかのような不気味さを覚える。

 電子工作は相変わらずである。暑さでアスレチックジムのヨガを欠席することが増えて工作の時間はむしろ増えているのだが(何しろ老人は不要不急の外出はするなと脅されている)、集中が効かなくなっている。昔に比べれば間違いなく進行の速度が落ちている。

 ESP8266を使いまわして、AitendoのJJY標準電波受信モジュールを使った自作電波時計や、オシレーターチップ(LTC1799)を使ってJJY電波にNTP時刻を載せるリピーターを大分前から作っているのだが、どうも埒(らち)が明かない。記事の更新間隔もまた一か月を越えてしまった。

 まあそれでも、あれこれいじくりまわして、やっとそれらしい動きを双方がするようになってきたので、ここらでご報告することにする。このままずるずるブログの更新が出来ないでいると、電子工作に対する意欲そのものを失う心配があるからだ。

自前で作ったUNIX経過秒のお粗末(8/9/2018) 

 前回記事のコメント通り、自前のUNIX経過秒とNTP時刻との1日のずれは、Shuji009さんの指摘であっさり解決した。何と閏年の計算違い(バグとも言う)というお粗末である。Ws000008

 以前、JSTの指定をしたのにNTPからの時刻に9時間の差が出てしまい、面倒なので9時間足して辻褄あわせをしたことがあるが、今度も自前で計算した日時(1970年1月1日からの経過秒)とNTPの経過秒が合わない。時差のずれではないので少し気になったが、これも無精して1日足して帳尻を合わせた。

 それが記事をアップしたあと、Shuji009さんからコメントが入った。2000年は400で割り切れる年で閏年ですけど大丈夫ですかというご指摘である。閏年のロジックは、「4で割り切れる年は閏年。ただし、100で割り切れる時は平年。さらに400で割り切れると再び閏年」という結構ややこしいロジックである。

 はいはい、ちゃんと400で割り切れるロジックも入っていますよと、最初は自信満々だったが、何か胸騒ぎがした。待てよ、400で割り切れるときに、平年に戻していないかい。言葉にすると400で割り切れる時は、100でも割り切れるので、そんなことは考えられないが...

 あわててソースリストを出して見る。「がーん」、400で割り切れるときは平年にしている!こいつだ。せっかく400年のロジックを入れたのに逆さまでは何にもならない。これでは一日遅れるのは当然だ。 

 自作の閏年を決める関数、leapyear( )のロジックを修正する。勿論、簡単に解決した(添付画面は修正済み)。考えてみたら、UNIXの経過秒は、1970/1/1からの計算だから、時差とは関係ない。プログラムミスの疑いを持つべきだった。こういうことにあとから気づくのだから、どうしようもない。

パラレルキャラクタLCDもお粗末なトラブル(8/15/2018)
 気になっていたパラレルのキャラクターLCDが動くようになった。Arduinoの標準ライブラリ(LiguidCrystal.h)では動かず、ESP8266ではだめなのかも、と放置してあったのだが、その後ウェブ上で新しいライブラリーが見つかったのでこれを試すことにした。

 LCDのテストに使っていたNTP時刻をUARTに出力するプログラムに、前のライブラリを退避させて新しく組み込む。しかし、こいつも最初は動かなかった。このパラレルLCDは当初3.3V仕様であることを忘れ、不要なバックライトの負電圧回路を組み込んだり、バックライト配線が別にあることに気づくのが遅れたり散々苦労しているのだが、今度も駄目かとがっくり落ち込む。

 こういうときは腰を据えて、落ち着くことだ。基本に立ち返ってハードウエアの配線からチェックしなおした。おやあ、コントラストを決める端子が未配線だけれど、これに電圧をかけなくても良いの?いや、そりゃ駄目でしょう。

 そうか、こいつが原因に違いない。あわててブレークアウト基板に、半固定抵抗器を実装し、ピンに接続する。電源を入れ起動しなおすと見事LCD画面に「Hello ARDUINO」の初期表示がでた。やれやれ長かったな。コントラストの配線をしていないのでコントラスト最小のまま表示が見えていなかっただけというお粗末である。

Dsc01476

 もしかすると、元の(ArduinoIDEに最初から組み込まれている)LiguidCrystal.hでも動いていたのかも知れない。しかし、他にやらねばならないことが多いので、そこまでさかのぼって確認する気力がもう生まれてこない。さきに進もう。

 NTPの時刻を表示して暫く遊ぶ。書式付きの関数printfがlcdでも動くことを発見した(lcd.printf)。数字の表示位置が固定されるので「:」や「/」がずれず、格段に見やすくなる。ただし、ESP8266では多数の変数を表示しようとすると暴走する(3つまでOKであることは確認)。

較正の仕方がわかってエンコーダーの開発は順調に進む(8/22/2018)

 猛暑が続く。しかし地下室は温度が安定して涼しく、極楽だ。それなのに電子工作の進捗ははかばかしくない。今度のプロジェクトの最終目標は、ESP8266でNTP時刻を使いJJY電波をエンコードするリピーターである。Dsc01478 そのモニター用のこれもESP8266で作ったJJY電波時計の調整に手間取っている。このプログラムはUARTに盛大なテストメッセージが出るので、テストをやりやすくするため、時刻表示をLCDに出そうとしたのだが、LCDそのものの表示がなかなかうまくいかない。

 一方、オシレーターチップLTC1799を使ったリピーターの電波の強度は、もう十分だ。受信機と発信機双方をデスク上に置いた(1m以内)状態で、電波をON/OFFすると電波時計のモニターLEDがはっきり同期して点滅するのを確認している。ただ、送信を止めて暫くすると、受信機は本来のJJY電波を受信するのか乱れたパルスが出始める。

 受信モジュールにはAGC(自動感度制御)がついているようだ。ある程度以上の強度の電波をうけていれば微弱なJJY電波の方はマスクされるが、それが止まると弱い電波でも受信し始める感じだ。実用性を高めるためには、このあたりをもう少し調べておきたい。

 しかし、現在の電波時計プログラムの出力は、PCのコンソールしかなく移動できる場所が限られる。PCからは結構ノイズが出るのでここからも少し離したい。キャラクタLCDに手を付けたのも移動性を高めるためだった。

 とはいえ、こればっかりやっていても先に進まない。そこで、これまで放置していたリピーターのJJY電波エンコーダーの開発に注力することにした。干渉の方はこれが出来てからでも良い。リピーターの実装は、前回記事で紹介した通り、Pythonで書いたソースコードが手本にある。

 あらためてこれを読み込む。おお、これはとても自然なコーディングで好感が持てる。難しいことは全くやっていない、仕様通り、ポジションマーカーパルスで隔てられた10秒単位のデータを送り込んでいる。NTPとの較正のやり方がよくわからなかったのだが、ここでは平明な方法で実装している。

 あらかじめ、NTPで時刻を得たところをマイクロセカンドオーダーのタイムスタンプで記録し、次の正時(0秒)に見合う待ち時間を計算し、その待ち時間を使ってJJYのエンコードシーケンスの関数をスタートさせるというものだ。これで正確な同期が実現する。これはわかりやすい。

それらしい電波時計のシーケンスが出た(8/24/2018)

 同期ロジックがわかったので、急に先が拓けた気分になった。俄然コーディングする意欲が起きて移植に力が入る。Pythonから、Arduinoの言語(C++が基本)に戻すのは、そう難しくない。

 ただ、Pythonは構造化ブロックの識別がインデント(字下げ)だけなので、間違いやすいだろう。書くのは楽だがデバッグに苦労しそうだ(何を隠そう所長はbegin endで構造に厳密なpascal派だ)。

 しばらくコーディングに専念した。なにしろパルス一回当たりで数百msは待つロジックなので、少々のデバッグステートメントは入れ放題である。ArduinoのUART(Serial.printなど)はバッファリングしているらしく、一行出力では数十μsしか遅れないし、lcdでも2行出力が3msしかかからない。

 デバッグのためテンコ盛りにテストメッセージを入れたスケッチが完成した。まだLTC1799オシレーターの出力制御まで配線が済んでいないが、LEDをつけて動きを確かめる。電波時計のLEDブリンクは、このところいやというほどテストしているので、大体の動きは見ているだけでわかる。Dsc01481

 よーし、それらしい点滅が始まった。念のためオシロにもいれて動きを確認する。良いようだ。ブレッドボード上のLTC1799発生回路のロジックICに結線して実際の電波を発射する。ここまで来ると先を急ぎたくなる。ミニブレッドボード2つに組んだJJY電波時計を近くに寄せ、受信テストを開始する。

 良いぞ。電波時計のLEDがLTC1799オシレーターのLEDに合わせて点滅を始めた。問題ない。本来のJJY側の干渉もなく、順調に受信しているようだ。UARTコンソールをもう一台増設し、電波時計側のモニターも開始する。

 いやあ、長いことかかったが、電波時計側も、ノーエラーで時刻を表示し始めた。しかし、少し電波が弱い。1mも離すと、エラーが出始め、大元のJJY電波と干渉が始まってエラーの嵐になる。まだ安定したとは言えない。

 そうは言っても、とにかく目的は果たした。嬉しい。しばらく表示させて様子を見る。うーむ、まだ時間は正確ではないようだ。まず、分の更新が遅れている。それと1分遅い(これは想定済み)。それと、NTPとの同期ではどうも一秒程度遅いようだ。

秒の精度にこだわってみる(8/26/2018)

 ArduinoのNTPはSNTPがベースで、一時間に1回くらいの較正が入っているようである。クライアントのレベル(つまりWiFiの先のESP8266)でも、公式サイトによると0.5ms程度の誤差に止まるという話だが、どうもそれほど正確ではない(このほかここも参照)。

 自宅にある既存の電波時計を持ち込んだり、有線電話の117で調べるが、1秒近くずれている。もっとも市販の2万円以上するNTPリピーターでも誤差は1秒というのが多い。相手が人間である限り、こだわってみても余り意味はないのだが気にはなる。

 同期の方法を、待ち時間方式ではなく、一分単位に最終59秒まで来たら、NTPの時刻取得コマンド now = time(NULL); を10ms間隔で発行し、秒が59から00になるタイミングを待って同期させる方法に換えてみた。これでかなり正確になるはずだが、余り前と変わらない。それでも、分の更新の遅れの修正や(これは単なるコーディングミス)、コンソール出力メッセージの調整(多すぎるデバッグ用メッセージ削除)を進め、段々電波時計らしくなってきた。Dsc01482

 開発が一段落してきたので、昨日、これも久しぶりに御徒町のAitendoを訪れ、ESP8266の予備とアダプター基板、ついでにI2C液晶を数点買い込んだ。土曜ということもあって、いつもながら混雑している。ここのLCDのラインナップはすさまじく多い。I2C液晶のコントローラーチップは殆どが例のST7032のようで、制御ソフトについて神経を遣わないで済むのは嬉しい(Arduinoのライブラリで動く)。

AitendoのI2C液晶ディスプレイで遊ぶ、いや遊ばれている(8/28/2018)

 リピーターや受信機は、ブレッドボードでは動いたが、実装をどうするかで迷っている。すぐにはうまい方法が見当たらないので、とりあえずは、Aitendoで買い込んだI2C液晶のLCDの動作試験をすることにした。ところが、これがまた曲者だったのである。

 沢山のAitendoの液晶群の中から、あらかじめウェブで一番スマートそうな奴を選んで買ったのが、このLCDである。しかし買って帰って良く見ると、ピン幅が、1.8ミリという変態的な間隔で、しかもバックライトの端子が横に不作法に突き出ている。Ws000009

 例のピッチ変換テクニックの荒業を駆使してブレッドボードに装着する。空中配線は予想通りうまく行った。10ピンのハンダ付けはとても頑丈で、ハンダは僅かづつしか付いていないが12本もつけば少々力を入れてもビクともしない。ブレッドボードの抜き差しも全く心配ない。

 このLCDはI2CとSPI両方のインターフェースをサポートしているので、ジャンパー配線や、パスコンを2つも接続しなければならないが、とりあえずはピンだけにしてブレッドボードでこのあたりは配線する。Dsc01483  最終的には、受信機も、リピーターもLCD表示でスタンドアローン化したい。ただ。時計なので電池駆動は無理でACアダプターということになりそうだ。

ST7032のライブラリーが入らない(9/4/2018)
 I2C液晶に対するArduinoの対応は、多種多様な方法があるようで、ウェブ上には、沢山の方法、ライブラリーの紹介があり、何を選んでよいか迷ってしまう。このあたりは、ここのサイトが詳しく紹介されているのでお勧めである。

 今度の液晶のコントローラチップST7032のライブラリーだけでもいくつかあるが、当研究所では、一番簡単そうな、このサイトのライブラリーを選ばせてもらった。

 おや、こちらは標準のライブラリではなく、新たなライブラリST7032.hが必要なようだ。言われるままにリソースをダウンロードし、所定のディレクトリに収容してビルドに入った。しかし「ST7032.hなんて知らないよ」という素っ気ないエラーが返ってきた。

 ふーむ、ウェブの指定では、とってきたリソース(フォルダー)のリネームをすることになっている。そういえば、ArduinoIDEは立ち上げ直していない。一旦、終了して立ち上げ直す。よーし、ビルドのメッセージが先に進んだ。コンパイルしているようだ。

 いやだめだ。ソースリストの中でコンパイルエラーが出ている。ST7032.cppの中でavr/pgmspace.hがないと怒られる。なにー、avrじゃないとだめなのか。手近なところにavrのライブラリーはない。それにここはESP8266だ。暗雲が垂れ込める。

 困ったときのGoogle先生である。ウェブを漁ると出てきた出てきた。いつものエラーメッセージぶっこみ方式である。「ST7032.h avr/pgmspace.h no such file」で一発で、このGitHubがヒットした。ST7032.cppを探し出し、この通りにしたらコンパイルが通った。

 ソフトはOKである。意気揚々と、配線をしてテストを開始する。店が紹介するデータシートは中国語だが、不思議に殆どが理解可能だ。I2Cなので、ピン12本のうち必要なのは4本だけで(Vcc GND SCL SDA)配線が楽だ。それと、I2C/SPIの識別する制御ピンなどを適当につないで実験を開始した。

この液晶もコントラスト不足で最後までてこずる(9/5/2018)
 これがまた全く動かない。ライブラリーを使うのは楽で良いけれど、ソフトが悪いのかハードが悪いのか、このままでは全く見当がつかない。こういうときは処置なしである。そのうち、不具合箇所の切り分けに良い方法を見つけた。

 I2C液晶は、ストロベリーリナックスの昔のPCMプレーヤーに使った現物がブレッドボード上に残っている。これを流用して動かしてみればどちらが悪いかすぐわかる。早速試す。え、いやこれも動かない。何だと―、ソフトが悪いのか。

 ウェブ上で紹介されているソースリストをもう一度良く見る(これしか頼りにならない)。コンストラクターでlcdオブジェクトを作って(ST7032 lcd;など)、次のステップがいきなりlcd.clear()などのステートメントだ。これ何か足らないような。例えば、lcd.begin(16,2)なんて初期化はしないで良いのかい。半信半疑だったが、だめもとである。付け加えてみる。

 おーし、ストロベリーリナックスの超小型LCDにメッセージが出た。初期化ステートメントが抜けていただけだ。ソフトは問題ない。しかし新しいLCDでは動かない。何回目かのピン配置の確認をしているとき、とんでもないことを見つけて顔が青ざめた。

 何とピン番号のスタートが逆順だ。ICなどのストレートのピン番号は原則は反時計回りで下の段なら左側からだが、このLCDのピン番号は右から始まっている!データシートには明記されているので間違えたこちらが悪いが、それにしても。

 さらにVccとグランドの端子位置を確かめて愕然とする。電源2本は中間地点で対称についている。つまり逆にすると電源は逆差しになってしまう。いやあ、壊したか。折角、ピンヘッダーを芸術的に接続したというのに。逆接の時間は通算でも1分ないと思うが壊れた可能性は高い。

 泣く泣く、もう一台のLCDの実装にとりかかる。最初のLCDのピッチ変換のピンヘッダーをとりはずし、2台めにハンダ付けする。さあどうだ。あれー、まだ表示されない。しかし、表面がうっすら変わった感じがする。前の経験が生きている。

 今度もコントラストか。 I2C液晶のコントラストはソフトである。コードには中間の30にしてある。ストロベリーリナックスのLCDはこれで良かった。もしかしたら、こいつを変えると良いのかもしれない。コントラストを50にして再ビルドする。やったー、文字が出た。

Dsc01485  悔しいので、速攻でコンソールからのキー入力でコントラストを上下するロジックを組み込む。このLCDは0~63までのうち、50以上でないと鮮明に出ないことが分かった。

 壊れたと思った最初のLCDの方である。ピッチ変換ピンヘッダーをもう一度付け直すのは大変なのでジャンパーコードを無理やりハンダ付けし、付属のパスコンなどは空中配線でつけてテストした。良かった、壊れていなかった。正常に表示が出た。やれやれこれでブログに書くことができる。
(スケッチのコードはまだ未完成なので、次回以降に公開したいと思います。)

| | コメント (0) | トラックバック (0)

2018年8月 3日 (金)

また脱線。今度は電波時計リピーターでさらに迷走

 記事の間隔が今回も一か月を越えた。このあいだ電子工作をやっていなかったわけではない。毎日、PCルームにこもって、ごそごそやっているのだが、何しろやることが発散し、次々に興味が他に移るので記事にまとめるところまでいかない。

 赤外線リモコンウェブサーバーのプロジェクトはソースコードの公開で一段落し、そのあと、表面実装基板にするためkiCADの基板設計に取り組んでいた。しかしこれが、ひょんなことで別のテーマに興味が移った。電波時計のリピーターである。

 さらに、そのリピーターも部品の動作テストをやっただけで、関心は電波時計の制作の方に移り、それも、さらに別の枝葉の分野に手を伸ばして収拾がつかなくなってしまった。このあたりで戦線をまとめ直さないと、いつまでたっても記事が書けなくなる。

久しぶりのkiCADは進みが遅い(6/25/2018)
  ミニブレッドボードに作ったリチウム電池駆動の携帯型赤外線リモコンウェブサーバーは、とりあえず目的の機能を満足し(2階のエアコン、温風ヒーターの制御)、実用化の目途が立った。ただハードはまだ実験用のブレッドボード上だし、ソフト面でも残された課題が多い。

Dsc01462  まずは、覚えたリモコン命令を記録していくEEPROMエリアの拡張である。まともにやるなら、例のSPIFFSのファイルシステムにすれば良いのだけれど、そこまで大がかりにする気にはなれない。そう、ニーズがはっきりしていないので運用シナリオが描けないである。

 具体的な仕様が決まらない。今のところ考えているのが寝室の冷暖房の精密温度制御だが、どうしてもやりたいわけでもない(時限タイマーを使えばそれなりに間に合う)。もうひとつが洗面所の温風ヒーターだが、これは防水仕様(湯舟から動かしたい)をまとめる方が先で、ソフト面でこれ以上つけたすところはない。

 あらゆる機器開発でうまくいかない原因の最大級は、この「仕様が明確でない」ということである。実際の使い方が決まらなければ、結局、どれくらいの大きさのEEPROMが必要なのかも定まらない。困ったものだ。

 というので、赤外線サーバーのソフト開発はこのあたりにし、ハードの実装基板を作ることにした。もともとの制作動機は、この基板を表面実装で自前のCNCマシンで作ることだったのだ。何のことはない、本道に戻ったことになる。

 久しぶりにkiCADを立ち上げて表面実装基板の設計に入る。回路図エディターで、ミニブレッドボードに作ったESP8266のウェブサーバーの回路図を改めて書き下ろす。情けないことにkiCADの使い方をあらかたみな忘れている。 

 ESP8266のフットプリントデータをネットで探す。これが意外と見つからない。みんなブレークアウト基板で済ませているようだ。あちこち探し回ってやっと見つかった。しかし、これが回路図エディターに取り出すことができない。 Irserver

 原因はフットプリントデータと、ESP8266の回路図データは別物であることに暫く気が付かずに迷走していただけだった。やれやれ、年は取りたくないものである。見つけたフットプリントは、新しいバージョンのkiCADが必要だというので、kiCADのインストールをしなおす。殆ど泥縄状態である。

 ところが新バージョン(4.0.7)のkiCADは、変な所でループが始まって先に進まない。部品の諸元を変更するたびに、フリーズする。全く止まるわけではなく暫くすると復帰するが、ちょっとした定数の変更のたびに長時間待たされるのはたまらない。

 バージョンを元にもどそうかと考え始めたころ、解決法が見つかった。アノテーションと言ってパーツの番号付けをするルーチンがおかしくなっているようだ。強制的なアノテーションを部品の諸元を替えるたびに行うと、短時間で処理が終わることが分かった。なんやかんやで、回路図をつくるところでなかなか先に進まない。

電波時計リピーターは市販化されていて結構良い値段がする(7/8/2018)
 そんなころ、ESP8266の予備品を見つけるため部品箱を整理していたら、LCT1799というチップが目に入った。これは、去年の4月に面白がって買ったオシレーターチップで、これでNTP(Network Time Protocol)から得た正確な時刻を元に自前のJJYの標準電波(40kHz)を出して、電波時計を動かそうというものである。

 ウェブを検索してみて驚いた。NTPを使った電波時計リピーターは、最近は事務所などで沢山の掛け時計の時刻合わせに使われるらしく、市販品が多数出ており、しかも結構な価格で売り出されている。安いものでも2万円はする。

 電波時計のJJY信号は、もう6年も前、Aitendoで実際に受信モジュールを買ってきてテストしたことがある。値段を聞いて俄然、制作意欲が盛り上がった。赤外線サーバーそっちのけで、受信モジュールの実験の準備を始める。リピーターの実験には、こういう受信モジュールが必須だからだ。

 電波時計リピーターの方は、参考にさせて貰ったサイトではRaspberryPiでPythonを使ったソースコードが公開されている。電波時計は処理単位が一秒ごと、つまり1 bpsなので、NTPさえ動けば何もRaspiまで担ぎ出すことはない。ESP8266で十分動くはずだ。 

 NTPではなく、既存のJJYからのリピーターなら、当研究所の名前になっている8ビットのAVRでも十分可能だ。電子工作では著名なChaNさんは、10年以上も前にTiny2313クラスで電波時計を作られている。

 少し迷ったが、現在一番環境が揃っていて開発に慣れているESP8266で作ることにした。まずは正しい電波をデコードできる時計を完成させ、次に電波発生装置に行くことにする。アンテナが課題だ。

6年ぶりの電波時計モジュールは動いた(7/11/2018)
 部品箱から取り出したAitendoの受信モジュールは、ミニブレッドボードに刺さったままで、モニターのときPCなどからのノイズを避けるフォトカップラーもついていた。早速、通電して動作を確認する。電源を入れてすぐは動かないが、暫く(十数秒)すると、福島からの電波を受信し、LEDが点滅し始めた。

Dsc01475  うむ、動いているようだ。新しいオシロをつないでパルスを見る。前のオシロはじかに接続すると、ノイズが出て受信不能になったのだが、どうだろう。まずは直接つないでみる。おお、今度のオシロは直結でも全く問題なくJJYのパルスが表示された。

 ちゃんとした高周波ノイズ漏れ対策が出来ているのだろう。たいしたものだ。ただ、地下室の奥にあるPCのそばではやはりノイズが多い。オシロと受信モジュールをひとまとめにして、PCのそばから、地下室のオープンスペース(保安上の吹き抜け)へ持ち込むとJJY時報パルスは完全になる。

 蛍光灯の近くは全然だめだが、PC電源の影響は殆どないようだ。受信機はオシロがなくても、電波を受けるとLEDが点くようになっているので、部屋のあちこちに移動して受信状況を調べる。以前はPCの横でも正常に受信できたのだが、長波は季節的なものがあるのかもしれない。Dsc01468

 とはいえ、オシロで見ているとパルスが全くでたらめになることは少なく、パルスの立ち上がりと立下りでチャタリングが起きている程度である。頑張れば、ここでもデコードすることが出来るかもしれない。このあたりの受信強度でも時刻を得られることを今回の開発目標とする。

 ESP8266でのJJYデコードのソースコードはウェブにいくつかころがっていた。Arduino IDEを使ったそのうちの一つが簡単そうなので、これを利用させてもらうことにする。参考にさせて貰ったソースのブログは以下の通り。    
https://ameblo.jp/amano-jacky-nochio/entry-11824498383.html

 ソースが見つかったので安心して、その前に、まだやっていない40kHzの発振機能を確かめておくことにした。

電波送信は昔の真空管のC級増幅を真似る(7/14/2018)
 ブレッドボードにLTC1799モジュールを差し込み、ウェブで紹介された通りの回路を組み立てる。このサイトの記事は外見だけでアンテナの諸元の詳しい説明がない。これは電波法のからみで具体的な情報を避けておられると勝手に判断し、自分なりのアンテナを用意して長波の電波発振のテストを始めることにした。

 動作そのものは、モジュールなので電源を入れると簡単に動いた。オシロで波形を確かめる。矩形波の綺麗なパルスが出ているのを確認した。既に組み上げたJJY受信モジュールを近づけてみる。アンテナは適当なリード線(電話ケーブル4~5m)である。Dsc01473

 JJYのデコードは出来ていないが、受信だけならLEDの点滅でわかる。ブレッドボードの近くに受信モジュールを近づけると、LEDが点いたままになり、受信していることは明らかだ。少し離すと切れる。1m程度が限界だ。リード線はつないでも離しても変わらない。ほっておくとJJYからの電波を受信し始める。

 サイトの記事の外見はフェライトコアにUEW線を巻き付けたいわゆるバーアンテナである。長波なんて波長は何キロメートルもあるので、どんなアンテナで送信するのが良いか全くわからない。

 それでも、ふと思い出して部品箱を漁る。みつけたみつけた。以前Aitendoで買ったシングルバンド用の受信モジュールのアンテナ部分が見つかった。買ったころ断線していて苦労したやつである。

Dsc01466  これは受信用だが、送信アンテナの代わりになるはずだ。単にオシレーターの出力につなぐのではなく、サイトの記事通り、FET(2SJ377)をつけ、20Ω程度の抵抗負荷をつけてみた。

 少し電波は強くなったようだが、事務所内の電波掛け時計を一斉に同期させるほどの強さではない。よく考えてみたら、電源電圧が変わっていないのだから、FETで増幅してみても同じ負荷なら出力は増えない理屈だ。

 念のため、オシロで波形を見てみる。おやあ、鋭い下向けのパルス(数十V以上)が出ている。ふーむ。これはDC-DCコンバーターのスイッチング回路そのままだ。これをならせば正弦波になるのか。

 ここで閃いた。昔というより大昔、アマチュア無線の真似事でやった共振回路である。適当なコンデンサーをインダクタンス(バーアンテナ)に並列にして同調回路にする。真空管時代のC級増幅のタンク回路である。

 おお、正弦波まではいかないがそれらしい矩形波がでた。喜び勇んでJJY受信機の感度を確かめる。うん少しは良くなったようだ。LTC1799そのものよりは少し距離が伸びた。しかし、3mから4m少々までが受信限度である。

 バーアンテナの威力がわかったものの、すこし離れるとJJY電波の方が強くなる。福島からの電波に負けるのだから、LTC1799から発射されている電波強度は、いわゆる電波法に云う免許なしに出して良い微弱電波であることは間違いない。

 大きな部屋の多くの電波掛け時計を制御することは出来ないので実用品にはならないが、アマチュアで近くの電波時計を動かすには十分だろう。免許の必要もない(大体、許可されるはずもないが)

ESP8266によるNTPの受信は簡単に動いた(7/16/2018)
 JJY受信の目途はたったし(ソースを入手しただけだが)、電波の送信もOKになった。残りは、NTPの受信である。以前、RaspberryPiでNTPを受信したことがあるが、ESP8266では初めてである。またネットのお世話になる。

 調べると、簡単に、サンプルソースが見つかった。早速新規プロジェクトを立ち上げ、コピペ一発でソースをぶちこむ。幸いビルドはNO ERRORである。動かしてみるとシリアルコンソール上に、正確な年月日時分秒が出た。

Jjydecoder  同期をどうするかという問題は残るが、これで必要なリソースはすべて揃ったことになる。ただし正確さについては、NTPを使っている以上、余り厳密な追及は出来ない。

JJY受信機の表示に3.3V用のキャラクターLCDを使おうとして失敗(7/18/2018)
 JJYの受信デコードのプログラムのソフト開発に戻る。ネットから頂いたJJYデコードプログラムは、ESP8266ではなく、普通のAVRを使ったArduinoがベースで、表示装置はキャラクターLCDである。

 こちらのLCDの手持ちは、大分前に買ってあった定番中の定番、秋月の反転色の2行16文字のキャラクターLCD(SC1602BBWB-XA-LB-G)である。普通、こういうLCDは3.3Vでは動かない。ウェブを見ていても、ESP8266のLCDは最近はやりのI2Cインターフェースの3.3V版が殆どで、こうしたパラレルLCDの使用例は極めて少ない。 

 そのうち、5VのLCDを、LCDクロックのパルスを利用した負電圧発生回路を付加して使っているページを見つけて制作心が刺激され、これを入れてみることにした。久しぶりのハンダ付けを楽しむ。ところが、これが全く動かない。バックライトすらつかない。

 キャラクターLCDを使うのは、考えてみると久しぶりで、下手をするとガイガーカウンター以来で7年は経っている。色々調べるうち、お粗末な間違いというか勘違いをいくつも発見した。まず、このパラレルLCDはもともとが3.3V用で、負電圧回路は全く必要がなかった。お馬鹿な話である。

 さらに、バックライトの電源は別から供給しなければならないということにだいぶあとで気が付いた。いやいや、情けないの一言である。

Dsc01467  バックライトに電源を入れて、LCDはそれらしい表示が出てきたが、表示ドットはいわゆる豆腐状態で全く反応が見られない。オシロで制御信号を見ると、細かいパルスが出ているが、LCDのパルスにしては、細すぎる(数μs)。どうも、このソースはArduino用で、ESP8266では動かないようだ。

 ライブラリーのLiquidCrystal.hのソースを見た限りでは、クロック依存のところはなさそうなのだが、ここにあまりかかずらっているのも意味がなさそうな感じがしてきた。時計を作ることが最終目的ではない。潔くLCDをあきらめてシリアルコンソールにすることにする。

LCDを諦めて、シリアルコンソールに出力を換える(7/20/2018)
 猛暑である。週2回行っているヨガとプールのアスレチックジムもお休みである。LCDは開発の必須条件ではない。本筋でないところであちこち道草を食ってきたので、何が何だかわからなくなってきた。とりあえずはソースコードのLCD表示部分をシリアルコンソールに切り替える作業に没頭する。

 これは手数がかかっただけで、何も問題はなかった。シリアルコンソールに、それらしいメッセージが次々に表示された。しかし、エラーが多い。いつまでたっても正しいJJY時刻を手に入れることは出来なさそうである。

 このソースは、チャタリングなどの抑止機能は全くついていない。パルスを単純に受け入れて、パルス幅、0.2sec(マーカーパルス)、0.5sec(論理1)、0.8sec(論理0)をスペックどおり(±5ms)調べて、範囲を超えるところはすべてエラーにしている。

 これでは、オシロでみたような立ち上がりや立下りでチャタリングを起こせば、全くデコードできなくなる。そこで、スイッチ制御でおなじみのチャタリング防止ロジックを入れる。立ち上がりと立下りの双方に数十msの待ち時間を入れ、安定したパルスになるようにする。

 しかし、PC横の受信モジュールではどうやっても安定した時刻を得ることができない。前と違って、まれに(10回に一回くらいか)、時刻が出る時もあるが、これでは実用性にかける。

Dsc01471  こうなると意地である。受信機を地上近くのオープンスペースの階段に置いて、PCのところまで電話ケーブル(10m)で送電線のように引き回してテストを続ける。フォトカプラーを経由しているせいか、少々引き回しても結果が乱れることは全くなかった。

 地上近くでは、殆どエラーは起きない。この状態でやっとJJY電波のデコードに成功した。大体、JJY時計の開発が目的ではなく、リピーターが目的なのに全く無駄なことをやっていると思うが、やりだしてことを途中で止めることが出来ない性格である。自分でもあきれてしまう。

一分の遅れをどうするかでまた脱線(7/28/2018)
 実は、これも、NTPを使ったリピーターには関係のない話なのだが、ここでまた3日近く浪費した。それは、JJY標準電波の表示時間が、最初に正時パルスが来て、そのあとおよそ1分かけてその時刻(時分年月日)を伝えるパルスが送られてくるというロジックの問題である。

 つまり、パルスを受け取って、その時刻が何時何分の正時だったかがわかるのは、およそ1分後になるということだ。リピーターなら、NTPと同期させて正時パルスを伝え、その時刻データを送って行けばよい。しかし、時計の場合は、1分先の時刻を用意しないと、正確な時刻にならなくなる。

 これも、お馬鹿な話だが、リピーターでも、この1分先の時刻を用意しなければならないと思い、一生懸命ロジックを考えてテストしていた。たかが一分と侮ってはいけない。単に分を足すだけでは問題は解決しない。下手をすれば年をまたがるときは、すべての表示を変える必要がある。

 色々考えたが、UNIX経過時間を使うのが一番合理的だと判断した。UNIXは1970年1月1日午前0時から始めた秒数をタイマーとして持っている。これに関しては沢山の標準関数が用意されているのでこれを応用する。

 やりかたはこうだ。JJYから得られた時分年月日を一旦、この経過秒に変換し、これに60を足して、また時分年月日に戻せば良い理屈である。

 早速、先ほどのNTPプログラムにこのロジックを組み込んでテストする。ところがこれが一筋縄では行かなかったのである。

 悪戦苦闘、3日間。やっと解決した。しかし、この経過時間があちこちで違うので参った。つまり、JST(日本標準時)の扱い方が、サイトやNTPのオプションで違うのか、どうしても数が合わない。最終的な解決は、この前もやったと思うが、現場合わせである。つまり、NTPをJSTオプションで使ったタイマー値は、地道に計算した1970/1/1の経過秒より一日増やせば一致することがわかった。

 いかにも釈然としない解決だが、とりあえずは、一分遅らせることに成功である。やれやれ。このあたりでブログの原稿をまとめよう。

| | コメント (4) | トラックバック (0)

2018年6月23日 (土)

ESP8266の赤外線リモコンウェブサーバー実装にはまる

 2年越しの課題、古いエアコンの赤外線リモコンの制御に成功して意気が上がったのも束の間、またブログの更新間隔が1ヵ月を越えてしまった。久しぶりのソフト開発に思いのほか手間がかかった。ソースの公開のためのスクラッチビルドが遅々として進まず、開発が難航していたのだ。

 最近、ソースコードを公開していないので、そろそろソフトを公開しようとしていた。人様のソースの流用なので、許諾を得るために何度か先方に問い合わせをしてきた。しかし、今になっても返事がない。仕方がないので、ソースコードをこちらで書き直すことにした。

 本来は、クリーンルームなどにこもって、既存のコードとは完全に切り離した形で開発しないといけないのだが、まあ、アマチュアなのでそこは大目に見ていただき、ソースコードをモジュール単位に分解して作り直す。しかし、どうしても似たようなコードになってしまうのは仕方がない。

 それでも、独自のロジックを組み込んだりして、何とか目鼻がついてきたので、このへんでそろそろ公開することにする。

ウェブサーバーからリモコン操作ができるようにする(5/12/2018)
 参考にさせてもらったサイトはここである。ESP8266でコード式の赤外線リモコンの送受信までの機能がある。記事の続編には、ウェブサーバー版もあるようなので、これも少し参考にさせてもらった。

 ただ、ここでは、赤外線リモコンのコードは手入力でソースコードのHTMLデータにセットしている。せっかく赤外線コードが得られているのに、これを手書きで入れ直すのはあまり嬉しくない。 そこで、これをもっと使いやすく、受信したコードをコンパイルなしにウェブを通して送信する機能を追加することにした。

 この世界は所長の慣れないウェブプログラミングである。それでもAVRなどと違ってESP8266はかなりのフラッシュを持っているので、相当なことが出来そうだ。ここで勉強して経験を積み、このあたりの開発力をもう少し高めておきたいという下心もある。

Dsc01464 このため、最近何冊か参考書を買って勉強しているが、今一つ成果は上がっていない。意気込んでプログラミングにとりかかったもののなかなか先に進まない。ウェブを漁ったり、過去の参考書を引っ張り出したり、悪戦苦闘の連続で、まともに動き始めるのに、結局ほぼ2週間かかった。

 Arduinoのライブラリーを活用しようとしているので、回り道が多い。調べているうちESP8266のウェブサーバー関係のプログラム例は沢山、ウェブ上に見かけるが、まとめると大きく2つの流れがあることがわかった。

ESP8266のウェブサーバーライブラリには2種類あり微妙に違う(5/14/2018)
 まず、ひとつは、この参照サイトにも使われているESP8266webserver.hというライブラリ(クラス)を使ったコードで、もうひとつはArduino本来のWiFiシールド時代からとみられるWiFiserver.hである。 

 最初のライブラリは、クライアントからリクエストが上がると、server.on()というイベントドリブン的な関数が呼ばれて、ここでそれぞれイベントに応じた処理が行える。メインのloop()の中は、HandleClient()しかなく、ここでこまごまとした処理を一手に引き受けているようだ。

 もう一方は、clientというクラスを定義して、クライアントからのレスポンスをloop()の中で常時待ち、リクエストそのものを実際に受け取りながら処理を制御する。こちらの方はやや原始的だが多彩な操作が出来そうである。

 ウェブサーバーのGET/POSTといったデータのやり取りは今一つ理解できていないので、後者の系統が分かりやすくて良いのだが、クライアントからのデータの取り出しが難しい。見様見真似でコードを書いていくのだが、今一(いまいち)しっくり来ない。

 前者はそのへんを組み込み関数一発で解決できる。しかしウェブサーバーの処理以外の並行処理をしようとすると(たとえばタクトスイッチ制御など)、どうもうまく動いてくれない。loop()のなかの、handleclient()がブラックボックスになっていて難しい。あれこれ悩む。

50年ぶりの葵祭は小ぎれいになっていた(5/15/2018)
 開発の話が続いたので、たまには、電子工作以外の話題をご紹介。所長の例の京都の小学校の同窓会の話である。これまでは京都近郊の少し離れた会場(石山寺、宇治など)に惹かれて、東京から足を運んでいたが、こんどは別のおさそいである。幹事もなかなかやるものだ。

Dsc01451 前は場所につられたが、今度は京都三大祭りのひとつである葵(あおい)祭の当日がクラス会という趣向である。われわれのクラスの卒業時の総数は51名、そのうち物故者4名、所在が分かっている人32名で、今回は15名の参加であった。半分に近い結構な出席率だ。しかも関東からの出席者が半数近くもいる。やはり祭りの威力はたいしたものである。

Dsc01459  子供の頃見物した葵祭は、平安時代の装束をつけた行列が鴨川の土手を練り歩く頃は、祭りが終盤に近いので、学生アルバイトが汗みずくで疲れ果てて歩いており、近くで見ると見映えの決して良いものではなかった。しかし50年ぶりに見た祭りの行列は、なかなか小ぎれいになっていた。

Dsc01455

 みな溌剌としており、藤の花で飾られた牛車(ぎっしゃ)がとても優雅だ。馬に乗った人の列も昔より沢山いる。しかも馬はみなサラブレッドで昔はこんな立派な馬ではなかった。話に聞くと、関東方面の牧場から乗馬用の馬を大量に借りて来るそうで、人ごみに慣れておらず、時々、暴れるそうだ。

 そういえば、所長の学友には祭りの主催者、上賀茂神社の関係者がおり、直垂(ひたたれ)姿で乗馬していて、御所内で落馬しかけている報道写真を数年前新聞で見たことがある。

やっと目鼻がついたか。ウェブプログラミングが通る(5/25/2018)
 開発の話に戻ろう。2年越しでエアコンの作動に成功したといっても、これはモニターにしているシリアルコンソールからの発信で、ブラウザー画面からではない。ハードはこの前に使ったミニブレッドボードの携帯型の学習リモコンで、ここにウェブサーバーのソフトを流し込んでいく。

Dsc01465  ウェブサーバー用のソースコードは既にサイトに紹介されているのだが、スクラッチから開発したいため、別のライブラリーWiFiserver.hで動くようにコードを書き換えて行く。前にも述べたように、このライブラリーは、loop()の中でGET/POSTという、クライアントとサーバーのやりとりが目に見える形で操作できるのでプログラミングがしやすい。

 しかし、すぐに暗礁に乗り上げた。帰ってくるデータが制御文字を避けるためのエンコードが残ったままで(スペースが%20など)、これをデコードしなければならない。%20をスペースに戻すくらいなら簡単だが、サーバーには日本語が使いたいので漢字となるとお手上げである。

 ウェブ上で解決法を探したが手ごろな仕掛けは見つからない。色々迷ったが、結局、オリジナルのESP8266webserver.hに戻し、なるべく元のソースコードを見ないようにして開発していくことにした。

 こちらのライブラリでは、GET/POSTで入ってくるコードは、argsという組み込み関数にパラメーターを与えれば、コマンドのStringデータを次々に一発で得ることが出来る。しかもデータはエンコードされておらず(というより、関数内でデコード済み)、大幅に開発量を減らせる。

 お手本があるので進捗が早い。オリジナルのWiFiがAPモードで使いにくかったので、STAモードに換え、一般のブラウザーでも画面が出るようにする。これで使いにくいスマホをクライアントにしないで、一般のPCから操作が出来るようになった。

 HTML文書は、以前、ESP32で画像付きサーバーを作ったときのソースを流用して、とりあえず画面を立ち上げる。styleシートの扱いが難しく、素人まるだしの無粋な画面だが、動かしてみると、これが意外にも簡単に動いた。Ws000004 とりあえず、電子音量リモコンの上下ボタンと、エアコンのスタート/ストップだけの操作だが、PCの画面から、ボタンをクリックすると、音量リモコンが動き、エアコンが、厳かに音を立てて始動するのを確認した。いやいや、まだオリジナルのソースのかなりの部分が残っているが、とりあえずは完成である。感慨にふける。

コンパイルなしに新しい赤外線コマンドを画面から追加する(5/27/2018)
 次の課題は、ウェブサーバー上でのコマンドの追加である。受信部はまだこのサーバープログラムには実装していないので、まずはFORMタグによるクライアント画面上からのコマンド名と、その赤外線データの文字入力でコマンドを新設する機能を開発する。

 ブラウザーの画面で、データのやりとりをするのは簡単ではない。シリアルコンソールなどの送受信は、双方が同等の機能を持ち、独立して動くので、やりとりを設計するのに苦労しないが、HTMLを介したサーバーとクライアントのやりとりは、サーバーからクライアントにトリガーをかけることは基本的には出来ないので、一筋縄ではいかない。

 いわゆるプッシュ通信という、あたかも、サーバーからデータが来るように見える機能があるが、これは、あらかじめクライアント側のアプリに仕掛けがしてあるからで、基本的にサーバーは、あくまでもクライアントからのリクエストを待つしかない。

 つまり継続して通信を続けるには、必ず、クライアント側にお膳立てが必要で、HTML文書やCGIなどでサーバーが事前に準備しておく必要があるのだ。これが面倒である。

 悪戦苦闘の結果、画面上の形や位置は、とてもスマートと言えない状態だが、コマンド名とそのコード化された赤外線コマンド($から始まる16進コード、オリジナルがまだ残っている)を画面上に表示し、FORMタグで取りこむことに成功した。下の行に、クリッカブルになったコマンドが表示され、これをクリックすると、めでたくリモコンとして動作した。やれやれ、これでまた一歩前進である。

 こうなると、受信部の実装が急がれる。赤外線受信のハードの部分は携帯型学習リモコンに実装済みで、オリジナルのソースコードでは動作を確認している。これを独自ソースに書き換えなければならない。

 受信部分で最も大変なのが、得られたRAWデータ(パルス幅μs)をコード化する部分である。オリジナルは、AEHA(家電協)方式と、NEC方式しかサポートしておらず、あとからSONY方式を追加したのだが、今度は、いちから作り直しである。

 特に苦労したところは、NEC方式とSONY方式の区別だ。基本のパルス長が562μsと600μsと非常に近接しており、この差だけで区別することは難しい(テストのときは何とか特定データで誤魔化した)。これを全く違う方法で区別するように頭を捻った。

 その方法は、ソースを見て頂ければわかるが、NECとSONYの基本長がほぼ同じで、論理ビットがちょうど反転しているのを利用している(NECはONパルスの長さが一定で、OFFの長さで0.1を判断し、SONYはその逆)。得られたON/OFFのビット長の平均を比較すれば、ほぼ間違いなく両者を区別できるしくみだ。

EEPROMが曲者だった。いくつかの落とし穴にはまる(6/5/2018)

 受信部のスクラッチ開発は手間がかかるので、その作業のかたわら、EEPROMでデータを保存する機能をつけてみた。ESP8266でのEEPROMの実装は始めてであるが、見たところ簡単そうなので気楽にコードを加えて行ったところ、最初は大はまりにはまった。

 プログラムがひんぴんと落ちるのである。データを書き込むと、一瞬でメモリ破壊でシステムがリセットする。ためしにネットにある例題をコーディングすると問題ない。つまりハードではない。頭を抱えた。

 オチは簡単だった。要するに、データをStringで定義すると、EEPROMの中のデータ長が不定になるため(恐らく0バイト指定)、メモリ破壊になるのだ。Stringで定義してはいけない。探した限りでは、これまでの情報にこの落とし穴の指摘はなかった。

 文字配列にして長さを指定しても、実はまだメモリ破壊が止まらなかった。これは今度はこちらのミスだった。要するに、文字列の最後の'\0'キャラクターを長さに入れていなかったためで、少し多めにデータ長を指定してOKとなる。やれやれ。

Ws000006  このあと、待ち時間を入れないとおかしくなる(5ms以上必要)と聞いて、慌てて待ち時間を追加する。これでやっとのことで、画面で定義した新しいコマンドが電源を入り切りしても現れるようになる。このあたりも作りこめば、いろいろ工夫できるが、とりあえず、最後の受信部の書き直しに移る。

ウェブサーバーに受信部を追加する。大幅書き直しでこいつも難航(6/12/2018)
  Arduinoのプログラムステップ数も500を越えて、そろそろ開発の限界に近付いてきた(ひとつのモジュールの開発規模が500ステップを越えると制御不能になりやすい)。そういうことでもないが、気楽に、今までの受信部をとりあえず、全部取りこみ、タクトスイッチで受信を開始するロジックを加えたのだが、全体が全く動かなくなった。

 わかってみれば、単なる変数の初期化忘れが原因だったのだが、最初はなぜ動かなくなったのか全く見当がつかない。疑似コード作成をさぼって、適当にコードを追加した咎めである。こうなると、もう修復は難しい。

 一旦、入れたコードを#if 0と#endifで全部元へ戻し、少しづつコードを足して、その度に動くことを確認しながら入れるコードを増やして行った。結局、バグは先に述べた通り、単なるレコード数変数の初期化忘れという初歩的ミスだった。

 何とか動くようになり、このソフトは、以下の手順で学習した赤外線データを送ることが出来る。まず、タクトスイッチの押下で(準備OKのLEDが点灯)、赤外線リモコンの照射を待ち、正しく信号が入ると、LEDが点滅して無事受信されたことを知らせる。

 ここで、画面上の、「画面更新」というボタンを押すと、得られた赤外線コードが表示されるので、クリックすると、学習した赤外線コマンドが送信される。電源を切ってもデータを残すためには、この赤外線コードを、ブラウザーのコピー/ペーストで、コマンド新設の欄に入れて登録すれば電源を切っても残る。

Ws000007  学習したコマンドを直接EEPROMに保存する機能はまだ未開発だが、これ以上、公開を遅らせたくないので、見切り発車で公開の準備に入った。ソースコードの独自開発をせっせと進める。

ソースコードの公開(6/22/2018)

 そのうち、4年に一度のサッカーのワールドカップが始まった。PCに向かうより、TVの前で深夜過ごすことが多くなり、開発の速度はいやでも落ちる。しかも、全く勝てる見込みのなかったコロンビアに日本が見事な勝ち越しゴールで勝ったものだから、もう大変である。

 ということで遅れに遅れていたが、やっとのことでソースコードを公開できるまでになった。まだ未完成な所も多く、オリジナルのコードをすべて取り替えるところまで行っていない。プロの世界では、まずクロだが、まあ、お金をとるわけでもないので、とりあえず公開して様子をみることにする。
以下に、赤外線リモコンサーバーのスケッチを公開いたします。フォルダーがzipファイルになっていますので解凍のあと、適当なArduinoの開発環境に入れてビルドしてください。WiFiのIDとパスコードを加えるだけで、上記の画面が、192.168.0.33/で見えるはずです。

「sketch_IRserver.zip」をダウンロード

意:6/26以前にダウンロードした方は、もういちどダウンロードしなおし、前のものは廃棄してください。一部にバグがありました。

| | コメント (2) | トラックバック (0)

2018年5月14日 (月)

CNCマシンは少しお休み。赤外線学習リモコンに熱中

 CNCマシンで DC-DCコンバーター基板を切削して動作するところまで作りこみ、CNCマシンへの情熱は少しおさまった。

 電子工作を始めてから早いものでもう10年が経つ。正確には2007年10月、ブログの公開が2008年8月だが、前にも書いたようにCNC制御は究極の夢で、とても自分では実現できるとは思っていなかった。それだけに感動の思いはひとしおである。

 勢いに乗って、次々に基板切削にとりかかりたいところだが、なぜか手が止まった。当研究所のモットーは「実用」である。「何かに役に立つものをつくる」ということから言えば、今作りたい表面実装基板はない。

 実用にこだわると意外にテーマがないものだ。CNCマシンの他の応用、彫刻などの木工も、題材を探してはいるが、これはという決め手がない。レーザーカッターまで買ってあるのだが、テーマは見つからない。そう、何となく、みんな「ときめかない」のだ。

一度挫折した赤外線学習リモコン基板はどうだろう(4/15/2018)
 そこで、これまでのブログの記事を読み返しながらテーマを探していると、以前AVRで作って、うまく動かず途中で諦めた赤外線学習リモコンの記事が目に止まった。
(もともとの電子音量リモコン制作記事はこちら

 2年ほど前に、AVRのTiny861を使って、得られた受信信号をそのまま(RAWデータ方式)送り返す方式で、手始めに自作の赤外線による電子音量リモコンを動かそうとしたのだが、一番簡単なSONY方式にもかかわらず、全く動かなくて途中で投げ出した。エアコンのようなデータ量の多いリモコンを学習することはとてもじゃないけれど出来そうもなかった。

Pc043427  このあたりは最近どうなっているのだろう。ネットで「学習リモコン」をキーに検索する。すると最近のIOT時代を反映してか、予想以上にたくさんヒットした。2年前より明らかに多い。電子工作というよりこれは実用品のようで、商品の宣伝がやたら目につく。自作の制作記事も前より増えている。

 自作のターゲットマシンはWiFiモジュールのESP8266が多い。廉価だし、WiFi付きなので遠隔地からも簡単に制御が出来る。しかもプログラム開発にArduinoが使える。この前は意地を張って、ESP8266でなくわざとTinyを使って失敗したが、今度は素直にESP8266を使ってみようか。

 ソースコードも、あまりやせ我慢をしないで先人のものを使わせてもらおう。うまく動けば、この学習リモコンユニット基板をCNCマシンで作ればよい。これまでのリベンジと、CNCマシンの第二作、一石二鳥である。

 ESP8266はこの前使ったAVRに比べると格段に高性能である。クロックは80Mhzと、下手なARMより早いし、フラッシュやSRAMもメガバイトクラスなので気楽にプログラミングが出来る。AVRのときのようにメモリに気を遣う必要は殆どない。

 ただ、赤外線学習リモコンと言っても、色々な方式がある。一旦意味のあるデータにデコードしてから、それを再生するコード方式が一番確実だが、赤外線リモコンには多種類のコードフォーマットがあり、これをすべて網羅することは難しい。といって、記録したデータそのものを忠実に再現する方法(RAWデータ方式)は、以前、失敗していてトラウマがある(ロジアナで同じような波形だったのに全く動かなかった)。

 いずれにしても、ESP8266を変換基板なしに直付けして作る表面実装のリモコン基板なんかはちょっと格好が良いのではないか。どの方式にするかはあとからでも決められる。とにかく学習リモコンを作ることを次のテーマにすることにした。

受信部分はあっさり動いたが、送信部分は追加開発が必要(4/23/2018)
 RAWデータ方式でもコード方式でも、受信部分は同じなので、まずはESP8266を使った受信部分の開発を始める。ハードの準備はミニブレッドボードで簡単に組みあがる。
ソースコードは、ここ(東京お気楽カメラ)を使わせてもらうことにする。記事はここ

 ここは詳細な分析があり、送信部分は、RAWデータではなく一旦すべてのデータをデコードするコード方式だが、このコードを使ってサーバーからの送信もできるらしい。とても高機能だ。

 赤外線受信モジュールを用意し、ソースコードをネットからコピペし、新規スケッチに放り込んでコンパイルする。幸いコンパイルエラーもなく順調にビルドが出来た(当たり前か)。モニターのPCコンソールをつないで早速動作テストに入る。

Ws000003  おお、素晴らしい。赤外線パルスのマイクロセカンドのオーダーの数値がコンソールに並んだ。いや、さすがはESP8266だ。4バイト(long)や2バイトのバイナリデータを多数(5ケ)かかえた構造体の配列を400以上とってもびくともしない。AVRとは大違いである。

 次は送信部分である。このサイトは赤外線LEDへ流す電流を詳細に検討されていてとても参考になる。こちらもサイトにならって2本の赤外線LEDを直列に並べる。大電流の必要な赤外線LEDのドライブは、トランジスターでなく、前に使ったFET(2SJ377)を使う。

 すぐにでも送信のテストをしたいところだが、このサイトの送信は、AEHA(家電協)とNEC方式の2つのコード方式で、皮肉にもこちらの手元にある赤外線ボリュームコントロールのSONY方式はなく、新たな開発が必要である。

 いずれはSONY方式のコード化はしなければならないが(ネットを経由するとき)、結果を早く知りたいのでRAWデータ方式の送信部を追加開発することにした。あわよくば、全部をRAWデータ方式にしても良い。これでうまく行けば無敵になるからだ。

RAWデータ方式で電子音量リモコンが動いた!(4/25/2018)
 送信部分が完成した。テストに入る。受信部分で対象のリモコンからデータを受け取ったあと、何らかのトリガーで、マイクロセカンドオーダーで蓄積された時間間隔に従って忠実に赤外線をON/OFFし発信する(RAWデータ方式)。

Dsc01431  このユニットは電池駆動にする予定である。リモコンの対象が家の各部に散らばっていて、テストのためにはPCから離れなければならないからだが、トリガーのタクトスイッチなどの実装が手間なので、とりあえずはPCのシリアルコンソールからのキーボード入力で制御する。

 テストの対象は、まずは目の前にある以下の3つである。このあいだの自作の電子音量リモコン、それにPCルームにある10年以上前の古い三菱エアコンと、RaspberryPi用の10インチモニターのリモコンである。他の部屋のエアコン、TVやDVD、洗面所の温風ヒーターなどは現地に赴かなければならない。

 手始めは、因縁の電子音量リモコンである。送信する。全く動かない。ふーむ、やれやれ。今度も駄目か。赤外線LEDに並列に可視光線のLEDをつけているので、発信していることは間違いがない。オシロにもそれらしい信号(サブキャリヤー)が観測できる(ただし、端子の所で)。

 受信の時のデータはコンソールで確認できているので、あとは、赤外線LEDあたりを疑うしかない。参考サイト以外の赤外線リモコン関連の記事を見ていると、赤外線LEDを4つも並列に並べているところや、複数あるとかえって個体差でエラーが多いという指摘のあるサイトがあったりして、混乱する。

 2つあったLEDを1つに減らしたり、制限抵抗を10Ωに下げたり、LEDの照準を合わせたり試行錯誤するうち、おお、気が付くといつのまにか電子音量リモコンが反応し、ボリューム値が変わっていた。

少しづつ成功率が上がっていく。PWM方式も有効(4/28/2018)
 いや、嬉しい。今まで全く反応がなかったSONYフォーマットの赤外線音量リモコンが動く。百発百中というわけにはいかないが、今まで全く無反応だっただけに嬉しい。

 でも、ときどきESP8266そのものが暴走するし、成功率は余り高くない。オシロの波形をさらに良く調べたところ、意外にも、パルスの立下りがなまったサブキャリヤーの波形があらわれた。なにー、FETはトランジスタより高速だというのに、この波形はおかしいではないか。

Dsc01435  このFETは、前に動かなかったとき使っていたのと同じP-MOSのFET(2SJ377)だ。サブキャリヤーがちゃんとした矩形パルスになっていない。そうか、以前動かなかったのは、この原因もあるのだろうか。

 赤外線LEDのドライバーをFETからトランジスター(2SC1815)に切り替えた。オシロの波形はまだ少しなまってはいるが、FETよりは格段にましな矩形波パルスになった。成功率は残念ながら100%とは言えないが、それでも反応する率は確実に高くなってきた。 FETのスイッチング特性については、ここ(SUDOTEK)が詳しくて参考になる。

 それにしても、久しぶりのコーディングは、落とし穴に落ちてばかりで、結構な手間がかかった。たとえばwhileループの継続条件を決める変数を、最初のカッコのなかで、++や--で、うっかり変えてしまうと、そのあとの処理は、変わった後の変数が使われる。

 コーディングしているものにとっては、forループと同じように、i++や、i--は、繰り返し処理が済んでから、やってくれるものと期待しているけれど、そう甘くはない。プログラムは書いたようにしか動かないのである。このデバッグに数時間かかった。やれやれ。

 リモコンの成功率を高めるために、サブキャリアーをdelayループでなくanalogWrite()を使ってPWMでサブキャリアーを出すこともやってみた。これはうまく行った。オシロにもきれいな矩形波が並び、周波数も想定通りだ。暫くこれを使おう。

Dsc01434  成功率は徐々に上がってきた。好調なときは、ヒット率は90%まで達するときがある。しかし、100ビット以上あるエアコンはまだピクリとも動かない。うーむ、これはコード方式でないと無理か。

 それはともかく、ネットを探し回っているうち、以下のすごいサイトを発見した。ArduinoでなくAVRのTiny85で学習リモコンを作った方のURL。いやこれはすごい。詳細な解析結果と、データ圧縮まで考えた力作である。

ミニブレッドボードに携帯版の学習リモコンを作る(5/1/2018)
 SONY方式の電子音量リモコンに続き、NEC方式のRaspiのモニターのリモコンも問題なく動いた。エアコンはまだ動かないが、我が家には、まだ数種類のエアコンや、TV、DVDなどがあり、どこまでRAWデータ方式が有効か確かめておきたい。このため携帯版の学習リモコンの開発に移った。

 このあいだ買ったESP8266用の幅の広いミニブレッドボードに、もう一台のESP8266を載せ、送信LEDと受信モジュールを接続する。さらに、タクトスイッチと状態表示のLEDを追加した。シリアルコンソールがなくても制御出来るようにするためである。電源はリチウム電池で、このあいだのLDO(NJM2845)で3.3Vにする。

Dsc01430  赤外線の送信トリガーはタクトスイッチで、発信の確認は赤外線LEDに並列に接続した普通のLEDである。受信の方は、データを読み終わると別の状態表示用のLEDを点滅させ、その後、点灯したままにしてデータが蓄えられていることを示す。

 これで自宅のあちこちにでかけ実際のリモコンの動作を確認していった。その結果、TVのリモコンや、洗面所の温風ヒーター、さらに2Fの寝室のこの間、買い替えたばかりの三菱エアコンは、このRAWデータ方式でも見事に動くことが確認された。

 結局、我が家でこのRAWデータ方式の学習リモコンで動かないのは、10年以上前のエアコンだけとなった。このエアコンは1Fの居間のエアコンと全く同じであり、皮肉なことに最もこの機械を使う可能性の高い機器が残ったことになる。何となく気持ちが収まらない。成功した気分になれない。

 それに、小規模なリモコンでもコマンドシーケンスを持っているのがあるので苦労する。最近導入した台湾製のロボット掃除機などは、コマンドの種類は少ないのに、ボタンの2度押しなどでコードを変えているようで、単純に2回同じボタン信号を送っても正しく作動しない。 

ESP8266のWatch Dog Timerの作動から逃げる(5/2/2018)
 実験機が持っていた持病、時々暴走してしまう症状の原因がやっとわかった。プログラムを動かしている間に、いつのまにか、CPUが例外条件を感知してリセットしてしまう。いわゆる暴走だ。

 最初は測定中に配列に大きな値がはいってメモリでも壊しているのだろうと思っていたが、メッセージを良く見ると、そうではない。ループ中にWatch Dog timerが動いたというメッセージである。わけがわからない。

 こういうときはGoogle先生に聞くに限る。いつものエラーメッセージをキーワードにする検索で、すぐ原因がわかった。ESP8266のArduinoは、ユーザープログラムの裏でWiFiなどのシステムが動いている。従って、ユーザーが一定以上CPUを独占すると、エラーとしてシステムをとめてしまうらしい。

 つまり、While(1)などでCPUをループさせ、ディジタルピンの変化を監視するプログラムは、途中で、delay(0)とか、yield()などの関数をはさまないと、このトラップにかかる。

 理屈がわかれば対処は上の通り簡単だ。参考にさせてもらったサイトのソースに、delayループが各所に挟まれていた理由が始めてわかった。何故こんなところでms単位の待ちをいれるのだろうと最初は訝っていた。これを省いていったため暴走が始まったらしい。

赤外線センサーが時々ノイズを出す(5/3/2018)
 さらに、携帯版の学習リモコンで、折角、覚えさせたデータが失われる不具合(点いていたLEDが消える)が、頻発し始めた。赤外線センサーの誤動作で受信ユニットが動き、貯めてあったデータが失われるようだ。

 こういうときのためのオシロである。 赤外線センサーの出力にSingleトリガーをかけて、早速、調査を開始する。接続して1分も経たないうちに原因が判明した。赤外線センサーから、20μs程度の短いパルスが発生している。手持ちの2つあるセンサーの内の一つがノイズっぽく、もうひとつは比較的安定している。

 電源ノイズで、こういう現象が起きるようだ。Vccにコンデンサーと抵抗のデカップリングをすればなくせるらしいが、そもそもは、こういう短いパルスだけで、これまでのデータを消してしまう方も悪い。一旦、まともに得たデータ(カウント20以上)は、受信エリアとは別に残しておくソフト的な方法で解決した。シングルパルスのノイズは無視しておればよい。

 あれやこれやで、携帯型の学習リモコンも安定してきたが、どうもプロジェクトの終着点が見えない。この学習リモコンで何を制御するのかという明確な目的がないので際限がないのだ。何と言っても、我が家の主力エアコン2機が、この方式で動かないというのが致命的である。やっぱり、コード方式をやってみるか。

やっと主力エアコンが動いた。やっぱりコード方式でないとだめだった(5/8/2018)
 長い間の懸案、学習リモコンで難攻不落だった三菱の古いエアコンを動かすことに遂に成功した。コード化して送り直す必要があった。いやあ、長かった。上記サイトのソースコードのおかげである。感謝、感謝。

 秋月で入手した赤外線センサー(OSRB38C9AA) は、このサイトにあるように、どうもON期間が短く、OFF期間が長くなる傾向があって(およそ30μs)、それでも新しいエアコンや、ビット数の少ないTVなどの制御はRAWデータ方式でうまく動くのだが、我が家にある、10年以上前の古い三菱エアコンだけはこの方式ではガンとして動かなかった。 

 最初、センサーの立ち上がりと立下りの遅れの時間の差と考えていたが、オシロで調べたところ、明確な差は出なかった。パルス列の中で、差のあるところと全くない所が混在している。RAWデータ方式の明確な問題点は突き止められない。

 結局、これまで参考にさせていただいたソースコードを元に戻し、コード方式の実験に移る。さらにSONY方式を加えて、プログラムの確認が容易に出来るようにした。エアコンを激しくon/offすると機械に良くないということを聞いたからである。

 SONY方式は、ビット数が少ないのだが、データビットの論理が反転しており、ビット'0'と'1'の区別はON部分の長さである。従って、リーダーの直後のOFF区間からデータに入る。

 つまり、コード化にあたっては受信のところからデータ収集のやり方を変える必要がある。しかも、基準時間がNEC方式との差が10%以下(560と600μs)なのでどちらかを決めるのが難しい。エアコンのデコードとは本来関係がないのだが、ついSONY方式の実現の方に夢中になる。

 送信の方は少し楽だ。ソースコードの中で、送信するビットの部分を2つ作り、最初から独立させてしまう。独立させるのは、送出時間の誤差を少しでも減らすためでもある。ESP82366である。フラッシュは潤沢にある。

 できた。コード方式をSONY方式の電子音量リモコンで確かめる。よーし、動いた。しかし成功率は、RAWデータ方式よりちょっと良いくらいで、目を見張る程のことはない。さて、いよいよ、問題のエアコンのテストである。

 まず、リモコンをエアコンに読み取られないよう(エアコンが動くとステイタスが変わる)、陰で実験機に覚え込ませ、シリアルコンソールでデータが入ったことを確認して、祈る気持ちで、送信ボタンをON。

 ピーっと、言う音と共に、エアコンにスイッチが入った。やった、やった。2年越しの懸案が解決した。勝利の快感に酔いしれる。これだから電子工作はやめられない。このあと、ウェブサーバーへの移転にも成功したのだが、紙数が増えてきたのでこのへんで一段落としよう。

| | コメント (2) | トラックバック (0)

2018年4月14日 (土)

CNCマシン(3)遅れていたが、遂にプリント基板初切削に成功

 このところ順調に20日程度の間隔でアップしてきた記事が今回は遅れている。道草を卒業してCNCマシンの工作にやっと戻れたのに、ちょっとしたことでまた止まってしまったからだ。それでもその後やっとプリント基板の初切削に成功した。基板も動いて長年の念願がかなった。

前回のBluetoothによるUSBシリアルのワイヤレス化について(3/12/2018)
 本題に移る前に、先の道草の報告をしておこう。USBシリアルデータをBluetoothで送り、CNCマシンをワイヤレスで動かす話である。

 いくつかの障害を越えて、前回までにRaspberryPi Zero W(以降raspi0W)のUSBシリアルポートは、Bluetoothを通して、別のPCの仮想シリアルになった。接続の開始に少しコツがいるが、送受信とも安定して動いた。ただ、少し画面の展開が遅いのが気になる。Grbl_ble

 残るは、実機のテストである。raspi0Wの基板をCNCマシンの横に持ち込んで、USBケーブルをRaspiのホストUSBソケットに接続する。少し離れたPCではBluetoothの仮想シリアルポートをCNC制御ソフトCandle(Grblcontroller)のシリアルポートに指定する。このPCでCandleが動けばワイヤレス化は成功である。

念のため、PCのTeratermでCOMポート(com10となった)を立ち上げる。すると例の、
Grbl 0.9j['$' for help]
>

という、ArduinoのGRBLのWelcomeメッセージが出た。$などのコマンドのレスポンスも正常だ。良いぞ。次はいよいよCandleの始動である。立ち上げたあと、設定で、bluetoothのCOMポートを指定する。

 うーむ、つながったような、つながっていないような。画面では、ジョグダイヤルの画面部分が黒くなり接続しているようだが、反応はない。そのうちエラーメッセージが出て、画面の制御部分がグレーになる。たまにスピンドルが回り出すが、止めることは出来ない。

 こういう制御系でこの安定性ではとても危なっかしくて使えないのだが、根がしつこい性分である。あきらめきれずロジアナを持ち出して、シリアルデータをCNC2418のコントロールボードから採って調べてみた(ストロベリーリナックスがおまけにつけてくれた極小プローブが役に立った) Dsc01408

 その結果、シリアルデータは正しくPCからここまで送られているが、Candleがレスポンスを返していない。懸念したとおり送受信の反応が遅すぎ、タイムアウトとなっている公算が強いことが分かった。

 データの中継をしているRaspiでのPythonプログラムの問題である。プログラム上は単純に来たデータを送っているだけで余分なことは何一つしていない。従って、これをさらに高速化するには全く別のことを考えないといけない。残念ながらこれ以上は無理だ。ここは潔く諦めるべき時だろう。 Grblstart

 ということで、このUSBワイヤレスプロジェクトは、これで一区切りとする。PythonとBluetooth、それにRaspiでのリダイレクトの勉強が出来ただけでも収穫だと考えよう。

PCB(プリント基板)制作の進行に戻る(3/15/2018)
 MDF板の彫刻以来、止まっていたCNCマシンの工作を再開する。Easelで作ったMDF板の切削はとても順調に出来たが、こちらが主力でやろうとしている基板切削は、基板データの制作途中で止まったままだった。

 基板の回路は、これまで幾多の挑戦をしてきたDC-DCコンバーター基板である。KiCADで設計データは大体できていたが、サイズが問題だった。今まで汎用の表面実装基板で作ったものより小さくすることが難しくて、そのままになっている。 Ws000001

  久しぶりにKiCADを立ち上げ、コンバーター基板の小型化を再開する。DC-DCコンバーターは、これまで3個以上の基板制作をやってる。少なくともこれより大きくしたくない。入出力間のピン間隔が20.32ミリ(mil規格で8ピン)、全体のサイズで25X15ミリ以下が目標である。

 一時的に嫌気がさして先に進まなかったのだが、時間を空けたのが良かったのだろう、何故か順調に手が動く。ほどなく目標のサイズにすることが出来た。このソフトに慣れてきたのかもしれない。配線チェック(DRC)も問題ない。最後のステップ、べたアースにして状態を見る。

 あれえ、出力側のピンの周囲のべたアースがおかしい。ここはかなり部品を寄せたところだが、べたアースのパターンは前のピン位置のところを基準に描かれ、このままではショートしてしまっている。

 うーむ、前の部品データが残っていて悪さをしているようだ。そう言えばピンを移動した時、パーツエディターではピンのフットプリントと形状枠がずれておかしなことになっていた。この部品(2ピンヘッダー)を一旦削除し、新しいデータを持ってきたが、事態は改善されない。

 KiCADの不具合に間違いないが、今これにかかわっている時間はない。プリント基板エディターのデータをすべて消去し、回路図エディターからネットリストや部品抽出を再度やりなおし、そっくり基板エディターのデータを作り直した。

 何回目かの手順なので作業が早い。すぐ基板が完成した。べたアースはどうだ。大丈夫だ。余計なものはついていない。前のデータのミスも見つけられたし(片側のピンヘッダーがmil規格でなかった)、KiCADの習得にもなった。言うことはない。そう、所長は究極のプラス思考人間である。

Gcodeを出す工程に移る。聞きしに勝る複雑な工程に四苦八苦(3/19/2018)
 次はいよいよ難関のCAMデータ変換である。いやいや、これがこんなに大変とは思っていなかった。KiCADのガーバーデータ(基板情報を網羅したもの)からCNCマシンの制御コマンドGcodeに移すのは、膨大な手順が必要である。 Ws000002

 ひとつひとつが複雑な手順で出来ているので、沢山の設定が必要なのはわかる。しかし、途中の工程が多すぎる。でも、悪戦苦闘したおかげで今までちんぷんかんぷんだった事情がだいぶ理解できるようになった。ガーバーデータなどというCAM技術用語をそれなりに駆使できるほどになったのは大したものだと自画自賛する。

 面倒な理由は他にもある。KiCADからGcodeを出すには定番のルートというものがなく、多くのやり方があって何を選べば良いのかわからないことだ。素人にとっては複数の手段があることはかえって難しくする要素である。

 しかし、泣き言を言ってもいられない。せっせとウェブサイトを逍遥し、一番楽そうな方法を探求する。検討の結果、FlatCAMが一番主流なようなので、これで先に進むことにする。こういうのは善悪を抜きにしてやっている人の多い道を選ぶというのが一番という「ずるい」考え方でもある。

 FlatCAMの解説は色々あるが、ここあたりが一番詳しくておすすめである。こちらも詳しいが、ちょっとわかりにくい。

べたアースのGcodeが難しい(3/22/2018)

 べたアースの切削がやはり最大の難関だった。境界部分の切削パスは、カッターの切削幅だけを注意していれば良いのだが、べたアースを指定すると、どこにも接続されない島が残る。この残った部分を削除する、いわゆる、べた抜き銅箔部の削除(noncopper削除)手順が思ったように働かない。

 ゾーンを指定すると、その部分の島の部分を削除するパスを作ってくれるはずなのだが、ゾーンの範囲がうまく決まらず、ソフトがハング状態(ゾーンを調べまわっているのか)になったり、とんでもなく広い部分がごっそり指定されたりする。

 結局、KiCADから FlatCAM、さらに CandleのGcodeまで行き来してやっと切削できそうなGcodeデータが揃った。 べた抜き銅箔は、ゾーンではなく切削パスを追加する手順がFlatCAMにあるので、これをせっせと島になった部分に書き込んで、切削データを揃える。

 いやいや、一癖も二癖もあるフリーソフトである。何とか出来上がった。実際のデータをCandleに持ち込んで、エンドミルをつけない運転(カメラリハーサルか)を開始した。ふーむ、予想通り動いているようだ。 Ws000000

 それにしてもこの熱中ぶりは自分でも驚くばかりである。難しいから面白いのか、夢中でデータをいじる。うっかりすると、エンドミルを基板深さまで打ち込んで、いきなり走り出すGcodeを吐いたりするので、油断はならない(あっという間に刃を折っておしまいになる)。

基板(PCB)の初切削は思ったより順調。しかし穴あけができない(3/25/2018)
  リハーサルがうまく行ったので、本番の切削に進む。最後の工程である。基板切削なのでZ軸の補正をするheightmap機能が活躍する。切削の範囲は小さいのでheightmapのデータ収集は簡単に済んだ。 Dsc01411

 いよいよ、Vカッターを付けてPCB(プリント基板)の切削である。最初はカッターの位置をきっちり基板にあてなかったこともあり、遠慮めの切削となって銅箔を削るところまでカッターが行かなかった。

 切削の深さを少し増やし、Z軸の原点をさらに近づけた2回目は、うまく行ったのだが、掲載写真の通りY軸のステッピングモーターが最後の最後で空回りし、外周の切削が基板を横切ってしまって失敗した。3回の試行でほぼ考えているような基板が削れた。スピンドルは全速ではなく60%で音は殆ど気にならない。 Dsc01413

 切り離しまで行って重大な誤りに気付く。ドリルビットに換えようと手持ちのプロクソンのミニリューターのビットをとりだしたら、何とここのシャンクサイズは3.0ミリだった。CNCマシンは3.175ミリである。3ミリのコレットチャックの持ち合わせはない。

 やれやれ、このドリルビットは使えないのか。これは大誤算である。ドリルビットはこれを流用することにしていたので何の用意もしていない。あわててアマゾンで適当なドリルビットのセットを発注する。アマゾンだからすぐ着くと思っていたが送られてきた書類の到着予定日を見て目を疑った。

 何と、10日以上もかかるという。アマゾンだけど販売している会社は中国だった。うーむ、注文の時に良く調べるべきだったが、もう遅い。まあ、余り慌てても仕方がないので、到着までやり残していた工作で時間をつぶすことにする。

中国からドリルビットが届くまで、他の工作で気を紛らわす(3/27/2018)

 やり残している工作はいくらでもある。まず、このあいだESP8266でワイヤレス化したロボットアームの暴走抑止である。制御系の電池がへたるとアームが暴走するのを止めたい。このあいだ全てのモーターが動き出して、大騒ぎになった。

 この原因はわかっている。これまで参考にさせていただいたプログラムがもともと負論理だったが、これをそのままにしたので、3V以下でも動くモータードライバーに0のデータが送られて、すべてのモーターが全開になるというオチである。

 これを逆にするソフトの改修である。サーバー側の改修だけで済むはずだ。でも気持ちが悪いので、クライアント側のリモコンからもすべて負論理から正論理に換えることにする。作業は面倒なだけで単純な作業だ。

 ところが動かしてみたら全く不審な動きをする。動かそうとする部分が動かなくて他のアームが動く。えー、そんな器用なことを誰がする。あらためて慎重に工程を確認した。サーバー側のESP8266のコンパイルがテスト用にだけ済んで、本番のロボットアーム基板に換装するのを忘れていたことがわかる。 Dsc01415

 やれやれ年は取るものではない。コンパイルのときは、必ず最初のメッセージなどにコンパイルの記録を残しておくという鉄則を怠った咎めが早速結果に表れた。自戒、自戒である。

 次は、ブレッドボードに組んであったクライアント(リモコン側)をまともなケースに組み込む工作である。久しぶりにサーキュラーソーを持ち出して、基板の端を切り、ケースの上蓋にタクトスイッチの穴を開ける。これはこれで面白い。 Dsc01416_2

 電源スイッチは、最初手持ちのスライドスイッチですますつもりだったが、ウェブで小さなロッカースイッチを見つけて、急に気が変わり、Aitendoで沢山のロッカースイッチが売られているのを発見し、急遽、足を延ばして買いに行ったりした。

 こういうものは実際に手に取って調べるのが一番確実だからだ。Aitendoはウィークデイだったが、前にも増して客が多い。品数も増えたようである。付近には、全く別の電子部品の小売店ができたりして町が何となく以前と雰囲気が変わってきた印象だ。 Dsc01418

 やることがなくなって、レーザーカッターの準備まで始める。お馬鹿なことに買ってあったレーザーは0.5Wの一番小さいレーザーユニットだった。慌てて5.5Wの別のユニットを注文した。$100以上する。道理で最初に払った金額が小さかったわけだ。

届いたドリルビットは初回でポッキリ。スピンドルが回っていなかった(4/8/2018)
 ビットが届いた。基板に両面テープを貼り(基板カットまでしてしまったので)、マシンにセットして、以前の合わせ位置を頼りに位置決めをする。ジョグを動かして合わせるが、目視ではなかなか合わない。

 リハーサルを何度も繰り返し、何とか許容範囲に納まったので、意気込んで切削開始ボタンを押す。あれ、スピンドルが回らない。えー、という間もなくドリルビットは目的地まで動いて、静かに下がって行き、リセットスイッチを押す暇もなく、たわんだところでソフトはエラーで緊急停止した。 Dsc01414

 ステッピングモーターが高負荷で止まったらしい。リセットなど押す余裕など全くなかった。真っ赤なエラーマークを解除し、祈る気持ちでZ軸を上げたが、残念ながらドリルビットは数ミリのところで折れていた。

 スピンドルが回らなかった原因は、Gcodeではない。リハーサルのときに用心してモーターの回転を止めるため接続コードをはずしてあり、それを開始前に確認するのを怠った、誠に単純なチェックミスである。 Dsc01419

 まだ、ひとつも穴を開けないうちにドリルビットを失う。情けなさに何故か思わず笑いがこみあげてくる。やれやれ、あれだけ用心していたのにこのざまだ。たかだか一本¥100のビットだが、このあいだ1 万円以上入った財布を落とした時よりはるかにショックが大きかった。

 それでも気を取り直し、ビットを取り替えて(0.6 -> 0.5mm)工作をすぐ再開する(俺も懲りない男である)。今度は全速でスピンドルモーターを回しながら再開。無事、穴あけに成功した。それはそうだ、穴開けといっても今度の基板はわずか6か所である。 Dsc01421

 ただ慎重になりすぎ、穴あけの深さが足らなくて全部貫通していない。基板は作業盤からはずしてしまったので、リューターで、0.5mmの貫通と、ピン穴用の1mm穴あけをやる。これで、すべての工程は終了した。当研究所の初の基板切削は、ほろ苦い出発となったが、とりあえず一段落である。

一気に実装。よーし、一番性能が良いぞ(4/9/2018)

 基板切削終了のところでブログの記事にしようと思っていたのだが、部品のハンダ付けを試しに始めたところ、止まらなくなった。プリント基板は迷うことがないので次から次に進む。既に部品はビニール袋にすべて用意してあったのでなおさら止まらない。12個の部品実装はあっというまに終わった。 Dsc01422

 ここまできたら動くのを確認したい。これも我慢できない。ブレッドボードに基板を差し(これが使えるようにmilピッチにこだわった)、早速、これまでの基板とダミーロードのセメント抵抗も持ち出して実験を開始する。

 あれ、電圧が一定しない。一旦上がった出力電圧は、そのまま下がってしまって電源電圧と同じになる。早速、実体顕微鏡で仔細にハンダ付けをチェックする。すぐ不良個所が見つかった。電圧調整用の半固定抵抗のピンのひとつがどうもくさい。試しにピンセットで強く押すとピンが外れた。ここをしっかり固定しなおす。 Dsc01423

 よーし、所定の電圧が出た。さあ、これからが本番だ。ダミー抵抗で負荷をかけてテスト開始。これまでの自作基板では、250mAくらいまでは良いのだが、400mAを越えると出力が9Vを維持できなくなる。(7V程度に落ちる)

 さあ、こんどのやつはどうだ。うむ、250mAではこれまでのものと同様全く問題ない。400mAはどうか。やった。良いぞ。9Vに近い8.8Vで頑張っている。

 市販の大容量をうたったDC-DCコンバーターでも400mAを越えると、この程度の電圧降下はあるし、自作にしては上出来である。胸を張ってブログに報告できる。 Dsc01424

| | コメント (0) | トラックバック (0)

2018年2月21日 (水)

CNCマシン(2) 切削を始めるも、Raspi Zero Wへ思わぬ脱線

 中華CNCマシンCNC2418のプロジェクトは順調に進んで、遂に初切削(ただしMDF板の彫刻)に成功したのだが、プロジェクトは突然違う方向にそれてしまった。本人も驚く脱線ぶりである。どうしてこんなことになったのか。詳しいいきさつは本文で。

Normaladpter_9 エンドミルの種類が多すぎて迷う(2/2/2018)
 CNCマシン導入の元々の目的はプリント基板の切削なのだが、初切削にふさわしい基板データがまだ用意できていない。こういうこともあろうかと練習用にMDF板を買ってあった。これで切削の練習をして経験を積みながら基板データの完成を待って、本番切削に進もうという計画である。

 ところが、CNCキットの付属エンドミルは基板切削用のVカットのカッターで、サービスについてきたエンドミル10本も、これと全く同じものだった。練習はMDF板の彫刻である。Vカッターは彫刻には使えない、別のエンドミルが必要だという(これは見映えがしないだけということがあとでわかったが)。

 というので、ウェブで初心者にも使えそうなエンドミルを物色する。ところが、エンドミルと一言で言っても、膨大な種類があり何を選んで良いのか全く見当がつかない。価格もてんでんばらばらである。10本¥1000台から、一本が¥3000以上(勿論、趣味向けでも)のものまであり途方に暮れてしまった。

 何を彫るのかが決まっていないのだから当然と言えば当然なのだが、それにしても値段の幅が大きすぎる。Aliexpressなどの中華サイトだけかと思ったら、国内のアマゾンや、楽天、ものたろーなどの国内サイトも似たようなもので、安いものも沢山ある。

 少なくとも中華サイトは何が送られてくるか予想がつかないので注文する気にならない。基板切削用のエンドミルといえば、オリジナルマインドという日本のホビー用CNCフライス盤を作っている会社の「土佐冒典(とさまさのり)」というエンドミルがピカ一のようだ。しかし、高価で¥3000近くする。ただし今探しているのは彫刻用のエンドミルなのでこれはまだ相当先の話だ。

CAMソフトEASELでMDF板の彫刻に挑む(2/5/2018)
 迷った挙句、アマゾンでとりあえず1ミリから2ミリの安いエンドミルセット(タングステン 10本¥1650)を適当に注文し(どうせすぐ何本も折るだろう)、それが来るまでMDF板の彫刻の準備をすることにした。Dsc01399

 作業盤にMDF板を両面テープとクランプで固定しで、もういちどレベル出し(heightmapによる)をする。今度はケント紙(0.5ミリくらい)を低いサイドの側に挟んでMDF板をクランプで固定し、heightmapを出してみる。おお、誤差は0.3ミリ以内におさまった。これで彫刻の準備は整った。

 何を初切削するかが問題である。このCNCキットには、中国簡体字の彫刻サンプルがついていて、皆さんはこれを試験切削に使われている。所長にはちょっと変なこだわりがあって、これを初切削のデータにしたくないと思っていた。中華製品にすべてが飲み込まれていくような感じに反発があったからだ。

 とはいえ、自前の彫刻用CAMデータの用意があるわけではない。今までKiCADで基板用データの開発ばかりやっていて、そこまで手が回っていない。慌ててみなさんのサイトを再び訪れて、適当なCAMソフトを探す。しかし、これも沢山種類があって何が良いのかすぐには決められない。

 泥縄的に調べた結果、どうもEASELが一番楽にCAMデータが作れそうな感じだったのでこれを選んだ。このソフトは、ダウンロードするのではなく、ウェブ上のアプリケーションになっていて、Fusion360のような壮大な3Dモデリングソフトではなく、2D(というか2.5D)ソフトであり、出来ることは限られている。

 しかし、出来上がった図形の切削の部材とエンドミルの種類を画面上で選んで、出来上がりを確認できるところが素晴らしい。ここでVカットのカッターと普通のエンドミルの基本的違いを知ることができた。要するにVカッターは深く掘れば彫るほど切削幅が広がるというだけの違いである。1stvcut0206

 元々このソフトは、自社のデスクトップCNCマシン(Shapeokoというらしい)の付属ソフトだったようで、文字は英字だけで日本語対応はしていない(と思う)。まあ、テスト用なので深入りせず、EASELのシンボルマーク(と思う)のテレビとYGataroという文字を選んだ。

EASELのデータでCNC初切削に成功(2/6/2018)
 いよいよ切削だ。スピンドルにコレットチャックでビットを挟めるER11を装填する。やけに固いと思ったら、ウェブ上ではこのチャックは熱嵌合と言って、チャックを高熱にして、はめ込むのだそうだ。今さらそれを知ってもそんな大掛かりなことはすぐにはできない。Normaladpter_8_3

 それでも、少し力を入れるとシャフトに少しづつ入っていくようなので、10ミリ近く入ったところで試しにスピンドルを回してみた。いやだめだ。80%の回転数から機械全体が振動するくらいの回転むらが起きる。ER11とスピンドルの回転の中心が合っていないからだろう。

 騒音というより機械に影響が出るくらいの振動なので折角買ったER-11だが、あわてて元のカプラーに戻した。その後もう一度トライして、今度は軸が合ったようで、最大回転でも全く問題なく回転するようになった。かなり奥まで入れたからかもしれない。Normaladpter_7

 注文したエンドミルはまだ届いていない。キット付属のVカッターを装填する。Vカッターの切りしろはEASELの出来上がり画面で確認しているが、本当に画面のような彫刻ができるかどうかはわからない。ドキドキする時間である。

 ソフト(Candle)を起動し、EASELで作ったCAMデータを読み込む。このCAMデータは、一度テキストエディターで、スピンドルの回転数を全速のS1000から、S600に落としたデータだ。騒音を気にして細工をした。

 スタートボタンを押す。スピンドルが回り始めた。回転は60%なので音は全く静かである。何度かシミュレーションした通り、Vカッターが進んでいく。5分足らずで削れた。トラブルなし、木屑というより、木の粉がこんもり、切削あとに残った。Normaladpter_4

 もっと木粉が飛ぶと思ったが、MDF板の木粉は周囲に止まっている。掃除機で吸い取ると、出ました、出ました。EASELの出来上がり予想画面と全く同じような彫刻部分が鮮やかに浮き出た。いやあ、感激の瞬間である。早速記念撮影する。遂にがた老AVR研究所はCNCによる切削という新しいページを加えた。

KiCADの開発に戻るが満足できるデータが出来ない(2/8/2018)
 アマゾンからエンドミルが到着した。しかし彫刻の第二作のデザインがなかなか見つからない。凸版的なロゴを作って自宅の門の照明部分に飾ると面白いと思っていたのだが、これは結構難しい。一方、KiCADのプリント配線基板の切削データは、まだまだ満足すべきレベルに達しない。

 前回も書いたがKiCADの操作が、あのEAGLEに勝るとも劣らず難しいのだ。題材は、このあいだのトランジスタの回路基板ではなく、以前苦戦した表面実装基板、DC-DCコンバーター回路にして実用化を狙ったのだが、次に紹介するような落とし穴に次々とはまり、先になかなか進めない。

●配線幅を変えられないのは定義していないだけ
 配線の線幅を決めるサイドメニューで、ネットクラスで規定するもの以外の幅に指定できない。何故だ何故だと騒いでいたら、デザインルール定義の中の「グローバルデザインルールのカスタム配線幅」に欲しい線幅を入力するとサイドメニューにそれが反映されることがわかった。こんなの教えて貰わない限り絶対に不可能な作業手順である。

●カーソルが外へ出て行かない
 KiCADのプリント基板エディターは、ほとんどのコマンドが右クリックでサイドメニューを出し、さらに下位のメニューに行く構造になっているが、そのメニューを全部閉じてからカーソルを画面外に出そうとすると、その前のオペレーションを引きずり外へ出て行かないときが度々ある。

必ずではなくて、時々なるので、これはどうもバグくさい。試行錯誤の末、画面上の何もない所でダブルクリックを無駄打ちすると解消することを発見した。スタックされていた複数の操作が溜まっていて解消されていない感じだ。

●配線がうまく行かないときのエラーメッセージが出ないことが多い
 大抵はネットリストに反する配線をしようとしたときか、またはDRC(デザインルールチェック)に反する配線をしたときに起きる。エラーメッセージが画面下部に出る時もあるが、殆どは単に配線が完成しないだけで何の反応もない。慣れないうちは何が原因かわからず頭を抱えていた。

●ライブラリの読み込みや検索を不用意にかけるとメッセージなしで応答が返ってこない
 CPUに負担のかかる処理は普通、砂時計などの処理中サインが出てユーザーにその状況を教えるものだが、KiCADでは何のメッセージもなく、まるでフリーズしたかのように動きを止めてしまう。何も動かないのであせって他の処理を次々にやってさらに混迷を深める事態になる。

●部品ライブラリの構造が今一つ理解しにくい
 これは慣れていないだけとも言えるが、ライブラリの構造がパブリックなものと自分用のもの、そのプロジェクト個別のものとに分かれており混乱する。新しい部品を作るのに四苦八苦した。Ws000008_2

 以上は、主だった暗礁だけで、まだわからないことは沢山ある。それでも悪戦苦闘の結果、何とか、それらしい基板設計図ができた。しかし寸法を測ってみると既存の手配線の表面実装基板に比べてあまり小さくなっていない。あれだけ苦労して作ったのにちょっとがっかりである。

 小さくする手段が見えない。べたアースは簡単に出来るし、出来栄えは悪くないと思うのだが、どうも切削に向かう気力が生まれてこない。

突然、RaspberryPi Zero Wを発注してしまう(2/9/2018)
 そんなとき、とあるサイトでArduinoのUSBケーブル部分をBluetooth化したArduino基板が紹介されているのを見つけた。ご存知のように中華CNCマシンの制御基板はArduinoである。(本家はここ

 現在CNCマシンのArduinoのUSBケーブルは、すぐ脇にあるノートPCにつながれ、ここでCNC制御ソフトCandle(GRBL)が動いている。一方、EASELやKiCADなどの制作ソフトは、4~5m離れたメインPCにあり、試し切削のときは、USBメモリでデータを持ち運んだ。

 ネットワークドライブでつなげば、少なくともUSBメモリのような原始的なことはしないで済むのだが、USBケーブルをBluetoothで無線化すれば、メインPCにCNC制御ソフトを入れて動かすこともできる。

 CNC切削の手元に制御できる画面がないのは緊急時に困るが、それはそれとして、USB接続の機器を無線化できるというしくみに何故か心が強く惹かれてしまった。

 そういえば、最近売り出されたRaspberryPi(以降 Raspi)の新しいシリーズに、WiFiとBluetoothがついているRaspi Zero Wというのがあってこれは10ドルという破格の価格だ。日本でも少し高いが通販で手に入る。

 無線機能のついているRaspi 3でUSBとBluetoothをつなぐシリアルのブリッジを作るのはどうみても無駄な気がするが、このRaspi Zero Wなら千円ちょっとである。それに対して、bluetooth化したArduinoは¥5000近く。しかも、今手持ちのCNCマシンのArduinoはモータードライバーと一緒の基板に組み込まれているので、これを活用することは出来ない。

 CNCの基板切削への意欲より、このUSBをBluetoothでワイヤレスにしたいという意欲の方が優り、気が付くとスイッチサイエンスの販売予約のボタンをポチっとしてしまっていた。Raspi Zero Wは、国内ではまだ高いが(ケースなどを抱き合わせで買わされて¥3000以上)、スイッチサイエンスだけは10ドルに近い、¥1300台で一人一台の予約販売をやっている。

RaspberryPi 3でbluetoothシリアルの実験(2/10/2018)
 予約販売というのだから少し日がかかるだろう。待ちきれずに、同じ機能を持つRaspi3で、USBの無線化を実験し始めた。USBと言ってもArduinoのUSBはシリアル変換ICが入っておりUSBの中身は、単なるシリアル通信である。

 やり方をすべて解説してくれるサイトは見つからなかったが、Bluetoothのシリアル化(SPPプロファイル定義)は沢山のサイトに解説があったので、情報には不足しなかった。しかし、これが結構難儀したのである。

 要は、RaspiのホストUSBで、USBのシリアルデータを受け取り、BluetoothのシリアルディバイスにリダイレクトするスクリプトをRaspiで動かせばそれでOKなはずなのだが、まず、BluetoothのシリアルポートがWindows10でうまく動かない。Ws000006_2

 Win10のBluetoothドライバーは、昔買ったドングルについていたBlue Soleilというサードパーティのもので、シリアルポートを開くことは簡単に出来、PC上にはcom10という仮想ポートができた。しかし、Raspiとつながらない。

 ペアリングまでは順調に進むのだが、肝心のシリアルの接続がOKにならない。Rasp側のBluetooth仮想シリアルデイバイスrfcomm0がactiveになったり途中で切れたりする。切れたあともrfcomm0が居座り、なかなか消去できず、ペアリングそのものもおかしくなる。

 何度か繰り返すうち、Windows側はcom10だけでなく、時々、com4とかcom5というポートが現れて、どうもbluetoothの下位部分はつながっても上位のシリアルポートの部分がうまく動いていない感じがする。

 Bluetoothのトラブルシューティング情報の中に「Win10は標準でBluetoothのドライバーを持っている」という文言があり、ここで閃いた。もしかするとBlue Soleilのドライバーがぶつかっているのかもしれない。Ws000009_2

 このドライバーをアンインストールして再度試してみたら、ピンポーン!これがあたりだった。ぴったりCOM4とCOM5がディバイスマネージャーに「Bluetooth標準シリアル」として登場した。不思議なことに、これで、Raspi側のシリアルディバイスのrfcomm0も安定して途中で切れたりすることもなくなった。

 Linux(UNIX)のすごいところは、こういうディバイスファイル(/dev/XXX)が出来れば、コーディングなしに、パイプやリダイレクトという考え方でデータのやりとりができるところである。このあいだのウェブカメラ /dev/videoなどと全く同じである。

Usb

echo "Hello World" > /dev/rfcomm0 

とやれば、Windows側のCOM4にHello Worldが送られる。TeratarmなどでCOM4を開いておけば、このメッセージが出る。

Tertermで、キーボードを打つと、PCからデータが送られてディバイスファイルに貯められ、

cat /dev/rfcomm0

で、Raspiの標準出力(ここではコンソール)に出力される。

と、簡単そうに書いたが、Linuxに凝っていたのはもう20年近くも前のこと。こういう単純な操作すらすっかり忘れていた。暫くはGoogle先生に頼りきりで、夢中になって勉強する。

Ws000007_2  それでも、RaspiにこのあいだのESP8266のリアルタイマークロック(DS3231)のUSBシリアル出力をRaspiにつなぎ、リダイレクトでBluetoothのシリアルを経由してPCのTeratermに時刻が表示されたときは感激した。これで残すはRaspi内のスクリプトの作成である。

RaspberryPi Zero Wのインストール(2/13/2018)
 スイッチサイエンスのRaspi Zero Wは、会員のみの予約販売で一人一個までという厳しい条件である。会員になるのは無料なので会員になって注文した。届くまで暫く待たなければならないだろうと覚悟していたのだが、申し込んだら2日もしないうちに発送の連絡が入った。なーんだ。

 ほどなく郵便でRaspi Zero Wが届いた。早速インストールにとりかかる。RaspiのOSは最近、jessieからstretchというコードネームのバージョンに上がったようだ。今回は今のところ単なるブリッジが用途なので、8GBのSDカードに指定通りカーネルイメージを入れることにする。

 このカーネルイメージのダウンロードは時間がかかった。混んでいるのだろう。200KB/秒程度の速度しか上がらず、1.4Gを落とすのに2時間余りかかった。最初、ウェブ記事を参考にキーボードやディスプレイなしでインストールしようとしたが、どうもうまく動かない。

 Raspi Zero WのHDMIコネクターはミニということもあってディスプレイにつながらない(マイクロは持っているが)。仕方がないので量販店に駆けつけて調達し、画面を見てみたら、画面上のダイアログでキーボードの入力を待っていた。

 こうなれば以前のRaspi3からキーボードを持ってきて先に進むしかない。結局、キーボードなしのインストールは実績を積むことが出来ず、普通のインストールとなってしまった。Normaladpter

 やっと、Raspi Zero Wが立ち上がった。Raspi3に比べれば画面は相当遅く、全体にのったりとした動きだ。CPUの数も少ないし、クロックも低いので当たり前と言えば当たり前だ。まあこれは、こういったガジェット(小物)用だから問題ない。

 このあとはRaspi Zero Wのスクリプトの制作の話になるのだが、紙数も増えてきたのでこのあたりで一区切りとしよう。

| | コメント (4) | トラックバック (0)

より以前の記事一覧