(仮)釣りと電子工作 忍者ブログ
趣味の電子工作と釣りについて。電子工作は、おもに変換器作成。釣りはおもにトラウトの管釣り。
[4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

いろいろあったが、とりあえずラテパンダの車載化は完了した。とくに頑張ったのは、以下のとおり。

①電源連動起動対応
②タッチパネル対応
③簡易操作ボタン(USBキーボード互換)実装
④ACCオフ時に自動シャットダウン
⑤ACCオフ時にシャットダウンが完了するまで電源電圧を確保
⑥上記⑤の電源電圧確保中にACCオンしたとき、シャットダウンされたままにならないようにする
⑦エンジン起動時にACCが一瞬OFFになることの対応

それぞれの概要であるが、

①電源連動起動対応
ラテパンダは起動時にEscキーを押すとBIOSの設定画面に入れる。BIOSのバージョンにもよるらしいが、俺が買った2年前のものでも、通電時に自動起動するためのオプションが用意されていた。

②タッチパネル対応
V1.0とV1.1のドライバー、両方入れるべし。最後はV1.1のドライバーで。ドライバーを入れたら必ずキャリブレーション(再調整にはバグがあるみたい。初期化→調整で。)

③簡易操作ボタン(仮想のUSBキーボード)実装
USBキーボードの実装が簡単のように見えて非常に難しかった。詳しくは、ラテパンダ冥府魔道編(前スレ)で。

④ACCオフ時に自動シャットダウン
ACC電源をarduinoに引き込みデジタル入力で読ませ、ACC電源が落ちていたらしばらく待って上記③で実装した仮想キーボードからAlt+F4 →Enterを送るようにした。ちなみにACC電源は12V以上なので、そのまま繋ぐとラテパンダが壊れるので、一旦1815のトランジスタに受けさせて、5Vに変換後(HI/LOWは反転)にラテパンダが受ける構成にした。
その後、Alt+F4だとうまくシャットダウンできないことが多いことがわかり、仕方なくshutdownコマンドを叩くためのBATを作り、そのショートカットを作り、ショートカットキーとしてF10を割り当てて、arduinoからF10をWindowsの電源が落ちるまで(落ちたあとも?)繰り返し投げるようにした。まあ落ちたあとに投げても、死人に口なしなので問題ないとは思うが。なお、言うまでもないが、Windowsの電源が落ちていても、arduino側は普通に生きている。

⑤ACCオフ時にシャットダウンが完了するまで電源電圧を確保
エーモン 電源ソケット OFFタイマー機能付 1543で解決。これって昔流行ったターボタイマーと同じだよね。でも0分(すぐ切れる)、30分、60分しかタイマーを選べない。30分にした。イグニッションを切ったあと30分間もarduinoが動き続けることになるが、まあ消費電力は微々たるものであろう。


⑥上記⑤の電源電圧確保中にACCオンしたとき、シャットダウンされたままにならないようにする

長文覚悟のこと。

エーモンのOFFタイマー(30分設定)を付けるとシャットダウン後30分間は電源が切れない状態になる。その状態でラテパンダ(のWindows10)を起動しようとすると、電源ボタン(物理的なスイッチ)を押すしか手がない。電源ボタンをArduinoから制御できればいいのだが、そんな仕組みは実装されていない。スイッチにジャンパー線をハンダ付けして取り出すことも検討したが、ラテパンダ本体基板をイジって改造するのは嫌だなぁ。。

もう1段、リレーを追加して、Arduinoから制御する方法も考えたが、どうも美しくない。

Windowsの電源が落ちたことはボード上の1.8V電源が出ているかどうかで検知できる(落ちていたら、ほぼ0V)。1.8Vだと低すぎてArduinoへ直接入力させるのは厳しいので、またまた1815に受けさせて5V出力に変換
(HI/LOWは反転)させると安心。ちなみに反転とは電源が入っているときは0V、電源が切れたら5Vになること。

Windowsの電源が落ちたタイミングで、エーモンタイマーを30分から0分に変更できないか、検討してみた。とはいえスライドスイッチを自動で動かすのは無理だし、これを外すのも大変そうなので、まずは仕組みを調べてみた。

時間調整用のスライドスイッチは、0、30、60、COMMONの4極の足が出ていて、COMはGNDであるが、それぞれのスイッチ設定時の電圧を測ってみた。

スイッチ設定 0・・・・0:0V、 30:5V、 60:5V
スイッチ設定30・・・・0:5V、 30:0V、 60:5V
スイッチ設定60・・・・0:5V、 30:5V、 60:0V

う~ん、想定通り。このスイッチ設定をarduinoから論理的に弄って何分でOFFタイマーが切れるか測ってみた。

0:0V、 30:0V、 60:5V・・・・30分で切れた

つまり、物理スイッチは0にしておいて、外部から30の足を0Vへ落とせばOFFタイマーを一時的に30分へ切り替えできることがわかった。あ、これって
「電源が入っているときは0V、電源が切れたら5Vになる」の線をそのまま直結(arduinoを経由せず)すればいけそうだ→当然いけた。


⑦エンジン起動時にACCが一瞬OFFになることの対応

よく知られていることだが、一般的な国産車の場合、スターター(大電流のセルモーター)が回っている間はACCに電源が来ない。だが、エーモンOFFタイマーのようなシガーソケットを入れることで、この種の問題は解決できる。。。はずであった。。。
しかし、別の問題があった。スターターが回っている間、バッテリーがそっちにもっていかれて、電圧が7V程度まで低下する(俺の車の場合)ことが確認された。7Vなら5V以上だし問題ないんじゃないかと思うかもしれないが、シガーソケットタイプのUSB電源は基本チープなので7Vではラテパンダの電源を維持できるだけの5V出力を出すことができなかった。結果、エンジンかけると必ずラテパンダがリブートする、という現象が起きてしまうのであった。

残念ながら、これはまだ解決していないが、まあなんとか運用でカバーする予定。暇なときに、
シガーソケットタイプのUSB電源をやめて、ちゃんとしたDC/DC電源に変更して、試してみる予定。








PR
USBキーボード作成までは順調に進んだが、それ以降はイバラの道であった。解決しても解決しても、次から次へと問題が沸いてきた。さしづめ開発元のDFRobotから送られてきた刺客とでもいうべきか。

【壱の刺客】ときどきUSBキーボードが消える
arduinoの起動がWindowsよりも早すぎるのが原因みたい。arduinoの起動でディレイを入れまくる方法もあるが、Windowsリブートだと対応できない(Windowsが落ちていてもarduinoは普通に動いている)ので、Windowsが起動したタイミングでarduinoに仮想COM経由でメッセージを投げて、メッセージを受け取ったarduinoは自分を再起動するようにした。

【弐の刺客】ブートローダーが頻繁に破壊される。
PICのHID bootloaderも1/256程度の確率で壊れたがarduinoの場合は20%~100%の確率で壊れる。アプリによって確率は異なるようだ(四の刺客参照)。PICのようにbootブロックをプロテクトする方法が使えればいいのであるが、調べた限り、arduinoではこの手は使えない。でも心配ご無用。壊れたのならまた書き込めばいい。このためのツールであるAVRライターであるが、秋月だと10000円以上するのでaitendoで買ってきた。500円程度でも売っているが、どうも怪しいので1500円のやつにした。言うまでもないがAVRライターは必需品である、

【三の刺客】AVRライターのドライバーがインストールできない
署名がないドライバーはインストールできないようだ。Windows10をテストモードにして、ブートメニューから署名なしドライバーを利用可能にした。画面の右下にテストモードと表示されるのは気にはなるが。。。

【四の刺客】arduinoをリブートするためWatchDogTimerを使ったところ、ブートローダーが氏ぬ?
おそらくだけど、ブートローダーは消えてもいないし、氏んでもいない。ではなぜブートローダーとして機能できないかというと、WDTが書き換え途中のarduinoをリブートしてしまうから、と思うのである。これは、WDTをリブート処理直前で有効にすればOK。WDTを本来の目的で使うことはarduinoでは禁忌ということになる。気を付けるべし。

【伍の刺客】COMポートがコロコロ変わるのでarduinoにリブート用コマンドを送れない。
これの動きは、はっきりしている。
COM3がある・・・・アプリのUSB周りの起動にプチ失敗している。arduinoをリブートする必要がある。完全に失敗したときはCOM3すら無い(COM1のみになる)。こうなってはAVRライタしか手はない。
COM4がある・・・・アプリが正しく立ち上がろうとしている状態
COM5がある・・・・アプリが正しく立ち上がっている。arduinoのリブートの必要は無い。
つまり、COM3に対してリブート用のコマンドを送ればいい。もし無ければarduinoはコマンドを受け取れないが、そもそもそのときは受け取る必要がない。

【六の刺客】D12をdigitalのインプットとして使えない
これは結局原因不明。チップが壊れていたり基板が壊れている可能性もゼロではないが、まあ仕様だろうと思うことにして、A0ポートをデジタル入力設定にして使うことにした。

【七の刺客】A0がデジタル入力として機能しない
まずはこの絵を見て、A0はD18として使えることを知る。アナログをデジタルに切り替えるなんか命令があるかと思ったが、通常と変わらずデジタルインプットとして設定すればいいらしい。






さーてと、D18と結線したスイッチを押したら。。。。何も起きない!なんだこれ?使えねーぞ!!

さらに調べると、D18は嘘でしたD14でした、というような記載を見つけた。むむむ!



さくさくっと18から14に書き換えて、さ~て、解決。。。。と思いきや、動かん!!なんじゃこりゃ!?

さらに調べると、アナログはデジタル化してもA0とかで指定できることがわかった。なので、ダメ元で、次のように試してみた。

pinMode( A0, INPUT )
digitalRead( A0 )

たぶんダメだろうなぁ、と思ったが、ビルドはでき、書き込みもできた。でも動かないだろうなぁ。。。。あれ?動いた。。。なんだかなぁ。。。解決!










小さなPCが欲しくて買ったラテパンダだが、噂ではarduinoが内蔵されているらしい。PIC派の俺はarduinoなんて電子工作苦手な人がちょっとしたガジェットを作るときに使うものと思っていたけど、まあせっかくなので、試してみた。

まずは開発環境の準備を。。。あれ?ラテパンダに入っているや。

では、まずLEDチカから。まず、ラテパンダのarduinoはleonardoというものらしいので、開発環境をleonardoに合わせて、digitaiWriteでD13をチカチカさせるプログラムを5行くらいで書いてみて、arduinoに書き込んでみたところ。。。あれ?もう動いた。PICだと新しいチップでLEDチカチカさせる場合はチップの初期処理の作り込みで4時間くらいかかってしまう(コンパレータをオフにしたりなど、チップごとに初期処理が違う)のだが、それがarduinoでは5分くらいだ。じつは、arduinoって、けっこういいものかもしれない。

次、USBキーボードを作ってみた。これは難しいぞぉ。。。PICで新しいボードに実装する場合だとApplication Libraryをインストールして、基板にあわせて書き換えて、まずまず動くまでに8時間くらいかかるのだが、arduinoだとこれが。。。。10分かからない?。Arduino IDEにキーボードのサンプルソースコードが入っていて、基板をleonardoにして書き込むだけで完成。Arduinoだとチップや基板の選択肢はPICと比べて圧倒的に少ないが、逆に選ぶのに迷わなくてすみ、移植の手間がかからないというのは非常にすばらしいと思う。

ボタンを押したらshutdown、よく使うカーソルキーを実装、などをUSBキーボードで実装するのは簡単そうだ。この時点では、実装は8割ほど完成していると、そう思っていたのであるが。。。。。。。

ちなみにArduino leonardoとWindows10 PCとは内部でUSB接続されており、切ることはできないようだ。このUSBの仮想COMポートでArduino IDEとleonardoと通信し、プログラムを書き換えを行っている。このポートがCOM3になったりCOM5になったりしていたが、このときはあまり気にしていなかったが、これが後々深刻な問題を引き起こすことになろうとは、このときは思いもしなかった。。。。。








車載PCを付けてから、ねんのため電源に噛ましていたOFFタイマー付き電源ソケットだが、タイマーを1分程度に短くしたかったので、分解して構造を調べてみた。

価格が1500円程度と安価なので、電解コンデンサーを使った簡易タイマーとリレーぐらいで作られていると想定していたのだが。。。。

全然違った。

基幹パーツはマイコンとPMOS FET。その他、表面実装のパーツが30点ほど使われており、思ったより複雑な構造。電解コンデンサーもタイマーICもリレーも使われていなかった。これだけのもの、よく売値1500円で作れるなぁ。。。

ちなみにマイコンはHT48R01Cという聞いたことのないもの。FETはシルクが15P03なのでRPF015P03の模様。

改造は、無理だな。。。




ドライバーを入れて使えるようになったラテパンダのタッチパネルであるが、キャリブレーションで右上と右下のクロスを押せずに、うまくキャリブレーションできない状況であった。

やっぱ初期不良だな。さっさと返品しよう。

と思ったが、いちおう悪あがきしようと思った。

まず、以前ダメだったV1.1のドライバーを入れてみたところ。。。。。
。。。

あれ?治った??

まだ微妙にずれていたので、「Reset」して「Calibrate」してみたところ。。。。

ズレ解消!!

ひょっとしたら、V1.1のドライバーには、なにか不足しているのかもしれない。で、V1.0を入れたとき、その不足しているものが埋め合わせされたのかもしれない。ということで、ラテパンダのタッチパネルのドライバーのインストールは、V1.0を入れる→V1.1で上書き、とするのが正しいのかもしれない。


カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
リンク
最新TB
バーコード
ブログ内検索
カウンター
Powered by ニンジャブログ  Designed by 穂高
Copyright © (仮)釣りと電子工作 All Rights Reserved
忍者ブログ / [PR]