VT250Fで目指せ北海道ライブ(準備編)

IMG_3477.jpg

部屋にころがっていた、いつ買ったかも忘れてしまったWebCam。エレコム製で130万画素。これで車載動画を始めようと思います。最近は、ごーぷろとか、そにーとか、にこんとかが高いアクションカムを出して、すんごい車載動画がネットに溢れているため、あえてお金をかけずに「ライブ感」と「哀愁」をテーマに環境を構築していきましょう。

IMG_3463.jpg

Raspberry Pi3。性能的にはPi2でも充分にいけそうなのですが、WiFiとBluetoothが内蔵されていて、USBポートがあけられるメリットを採用。重たいFFMPEGのインストールも速いしね。そこに、Osoyoのタッチパネル式LCDディスプレーを接続。本体だけでネットにつないで、動画を配信できます。電源はとりあえず大容量のモバイルバッテリー。

IMG_3494.jpg

エレコムのWebCamにはマイクが付いてなかったため、別途一番安いUSBマイクを購入。感度もS/Nも最低レベルですが、バイクがうるさいのでむしろそれがメリットになるとかならないとか。

IMG_3488.jpg

制御は、Blynkというソフト。Raspberry Pi上でNode.jsを走らせて、そこにネット経由で命令を送ったり情報を受信したりできるスグレモノです。ナビとして使っているiPhone4Sにアプリを入れて、動画配信/停止とCPU温度表示をさせてみようと思っています。

スポンサーサイト

速度センサーの基板化

DSCF7161.jpg

リヤスプロケットに付けた磁石を検知してホイールの回転を検出するセンサーを基板化しました。まずは、ちょいちょいと回路を作って、、

DSCF7165.jpg DSCF7167.jpg

ユニバーサル基板に実装して、、、

DSCF7169.jpg

はいできあがり。

IMG_3052.jpg

とりあえずホットボンドで仮の防水だけしてありますが、早くケースを作らないとすぐに壊れそう。

Arduinoシフトポジション付きOLEDメーター大改造

DSCF6931.jpg

Arduinoを使って、いろいろ勉強しながら作ったカスタムメーターも、だんだん調子が悪くなってきました(写真右)。頻繁にフリーズし、そして遂に、何も表示されなくなったので、思い切って作り直すことに。

まず、アナログポートを使うため不安定になりやすい電圧計と温度計を省略し、エンジン回転数、車速、各種ランプ系統など、デジタル入力のみにすることで、負荷を減らし回路も単純に。Arduinoの上に載せるシールド一枚に収めて、小型化しました(写真左)。

arduino9.jpg

右のEtherポートは、センサー基板につながって、5Vとアースを供給。処理済みのエンジンパルスと車輪の回転パルスを受け取ります。左のポートはメーター表示部に接続して、ニュートラルランプ、オイル警告灯、ウインカーランプと直結。真ん中の白いICは、これら表示ランプの12V系と、Arduinoの5V系を分離するためのフォトカプラです。内部のLEDが壊れたときのために、ICソケットに挿してある贅沢仕様。Arduinoで処理したデータは、同じケーブルを通じてカウル内のOLEDにI2C接続。ケーブルはカテゴリー7のノイズに強いタイプに。

DSCF6935.jpg

ポーチに挟んで浮遊状態にすることで、振動を軽減(かえって揺れてる気もする)。Etherケーブル等の引き回しも見直してみました。

DSCF6932.jpg

表示部もチェックして、オーバーホール。壊れやすいOLED基板は簡単に交換可能です。速度、シフトポジションの他にエンジン回転数も表示。

DSCF6937.jpg

ここまでやっても表示がたまに乱れてがっくり。まあ、バイクはノイズの塊ですし、仕方ないのだけれど、、、。メンテナンス性は以前とは段違いですから、トラブルが起きたらまた直せばいいやと思ってます。

IMG_2274.jpg IMG_2275.jpg

I2Cのケーブルにつけるプルアップ抵抗(5.1k)の効果。Arduinoの内部プルアップ(左)よりも、外部でプルアップしたほう(右)が信号の立ち上がりがきれいになっています。ところが、このテスト中にオシロスコープが故障。この際なので、秋月のカラーオシロスコープキットファンクション・ジェネレータをポチりました。それにしても、このOLEDのI2C信号、キタナイ、、、、。

(追記20170102)
IMG_2290.jpg IMG_2258.jpg


オシロスコープは復活しました(ジャンパピンのハンダ不良でした)が、ボードの不安定要因は特定できていません。I2Cのクロックを落としたらどうかと、Wire.setClock()なども試してみましたがうまくクロックが落ちてくれない。こうなったら安定を求めるのではなく、エラーが出たらArduinoのボードごとリブートするしかないと、WatchDogライブラリーを導入。ループごとにI2Cにダミーデータを書きこんで強制的にエラーを顕在化し、結果的にループに2秒以上かかった場合にソフトウエアリブートするようにしました。強引な方法ですが、通信エラーが避けられない状況ではこういうのもありかと。そんな苦労を忘れるために、漢字表示させたり、ブート画面にホンダロゴを表示させたりして、フリーズから気をそらす工夫をしています。解決への道のりは長そう。

(追記 2017/1/7)
ファンクションジェネレータが来たので、とりあえず組み立ててみました。ボタンがしょぼいけどなかなか楽しい装置です。

DSCF6941.jpg DSCF6943.jpg

しかし、いろいろな周波数の矩形波を入力して何時間プログラムを走らせてみてもまったくフリーズしません。仕方がないので、PCにつないだままバイクの上に乗せて、エンジンをかけるとあっけなくフリーズします。むしろ、Arduino単体の時より悪くて、I2CだけでなくPCの画面上のシリアルモニタからして止まります。この場合、PC-Arduino系はバイクの電気系統とはフォトカプラで絶縁されていますから、これはもう、USBも含めてシリアル通信に使っているケーブルに乗ったノイズが原因としか思えません。シリアルがオープんになってアンテナになりそうなUSB給電をやめて、12Vを直接ArduinoのVinに接続してみたら、ちょこっとマシになりました。ノイズに弱いシリアル接続は、バイクだと苦労します。

【u8gライブラリを使う場合のI2Cのクロック変更について 2017/3/15】
 ようやく、I2C通信の周波数を下げる方法を発見し検証できたので追記します。u8gライブラリ自体が内部でWire.begin()しているためにクロック変更できなかったのですが、最初にu8gの描画を呼び出した直後に、Wire.setClock()することでクロックを変更できました。

void setup()内で

u8g.firstPage();
do {
draw0();
} while( u8g.nextPage() );
delay(500);
Wire.setClock(40000L);//ここでクロック変更 40000L = 40kHzが設定可能な最低周波数

という感じで、最初のu8gの描画関数呼び出しの直後に、一回だけ40kHzに設定してやれば、以降は何度呼び出しても40kHzのままであることを、オシロスコープで確認できました。実際に走行してみても、前に比べてとても安定しており、ほぼ固まることがなくなりました!

GPS時計

DSCF6420.jpg

負圧計の安定性がいまひとつで、ツーリング中によく止まるので、常時表示は諦めて、別の利用法を考えてみました。

目についたのは、Raspberry PiにつながったGPSユニット。GPS衛星からは、常時時刻情報が送られてきており、一種の電波時計として使うことができます。

Arduinoに、GPSユニットを接続する方法は簡単に見つかりましたが、AdafruitのGPSライブラリはOLEDと同居させるとメモリーがわずかに足りない。そこで、TinyGPS++という、少し軽目のGPSパーサーを使ってみました。

メモリーの問題さえクリアできれば、あとは簡単です。シリアルで送られてくるGPS情報を、TinyGPS++で処理して、OLEDに緯度、経度、時刻と捉えている衛星数を表示するだけ。

取り付けは、相変わらず大雑把です。GPSユニットは、雨風が当たらないようにカウルの奥の方に仕込んであります。時計だけだとさみしいので、緯度経度も小さく表示。カッコの中はツーリングマップルで確認するための小数点以下60分表示。ネットに繋がっていれば、グーグルマップで現在位置がすぐわかりますが、携帯電波の届かないところでも紙の地図で自分の位置が確認できるようになりました。

DSCF6422.jpg

GPSユニットには、時計用バックアップ電池が入っているため、ホットスタートできて、時刻が即表示されます。位置情報も、屋外なら数秒から数十秒で捉えることができます。衛星が10個くらい補足できてびっくり。

負圧計のハードウエア周りも、そのまま残してあるので、Arduinoを交換すれば、すぐに負圧計に戻すこともできます。Arduinoを使った手作りメーターならではの使い方ですね。

(追記20170101)
DSCF6594_20170101003552ca8.jpg

GPSの座標情報を使って、現在の進行方向を割り出し、目的地(自宅)の方向と距離を表示する機能をつけました。これでインターネット接続がなくても、家に帰ることができます。



最近では、microSDを搭載できる小型Arduinoも出てきました。走行ログ記録もできそう。

点火パルス処理回路設計(更新)

高速を走ったところ、シフトポジションの表示がやたらと暴れました。5000rpmを越えたあたりから、点火パルスのノイズを拾ってしまい、数値がめまぐるしく変化するのが原因のようです。バーグラフタコメーターの回路を参考にした点火パルスの処理回路は以下のようになっています。

type1.jpg

点火パルスがアースに落ちるところを、トランジスタのスイッチングで反転させる回路で、低速ではうまく動きます。しかし、高回転になるにしたがってノイズが乗ってきます。100kの可変抵抗を入れることで多少は改善されていましたが、高速道路で表示が暴れるのは、バーグラフタコメーターでもずっと気になっていました。しかし、これ以上直列抵抗を上げてきついローパスフィルタをかけると、高回転側のパルスがとれなくなってしまいます。手詰まりです。

type3.jpg

ためしにここを参考に、降伏電圧14Vのツェナーダイオードを直列に入れてみたのがこの回路です。トランジスタの出力が0.5Vほど昇圧されて、S/Nがよくなりました。理屈はよくわからないのですが、順方向に入れるというのがポイントのようです。ダイオードは順方向に0.65Vの不応答域がありますが、これが効いているのかもしれません。ちなみに逆方向に入れると、14V以下が見事にカットされて、パルスが貧弱&不揃いになり、使えませんでした(参考画像)。

IMG_0249.jpg

バイナリーカウンタICのTC4520Bを通して波形をきれいにしたものがこれです。2つのパルス間の時間を測るには、カウンタICを使うのが簡単ですね。この出力をArduinoのpulseIn関数に入れることで、エンジン1回転にかかる時間が計測できます。

しかし、これでもまだ、ノイズを取りきれてはおらず(例えばこのようなヒゲノイズ)、トンネルに入ったりすると途端に不安定になったり、意味不明な挙動が続きました。つまり、気圧や湿度の変化で、ノイズが変化する感じです。

入力回路

悩みに悩んだ末に、最終的にたどり着いたのが、シュミットトリガIC (74HC14)を使ったこの回路。やたらと針が暴れたのは、トランジスタの出力を直接カウンタICに入力していたせいでした。トランジスタはCMOS-ICに比べると遅いために、出力電圧の変化がICの閾値付近で何度もオンオフを繰り返し、これがノイズになっていたようです。調べたらA-D変換の基本でした。ですので、コンデンサC2で一回電圧変化をなまらせてから、シュミットトリガに入れることで見事に解決しました。

ソフトウエア側でも、メディアンフィルタを入れたことで、「かなり」安定はしています。

ブログ内検索
ガソリン価格

gogo.gs
天気予報
高速道路検索
プロフィール

habingovt

Author:habingovt
バイク(RZ250R&SDR)をおりて二十余年。仕事で体調を崩したときに、ともだちからVT250Fというバイクを譲り受けました。4半世紀を生き抜いてきたバイクにまたがり、ふたたび走り始めたら、なんだかだんだん楽しくなって、バイクも自分も元気になってきました。目標は、また北海道を自由に走り回ること。いつ倒れるかも分かりませんが、生暖かい目で見守ってやってください。



@habingofit

リンク
最新記事
VT250Fで目指せ北海道ライブ(準備編) Jun 28, 2017
川浦(かおれ)渓谷 Jun 11, 2017
リヤブレーキチェック Jun 04, 2017
バイクるオアシスパークサンデー May 14, 2017
GW奥美濃ツーリング(到達!走行距離5万キロ) May 08, 2017
速度センサーの基板化 Apr 15, 2017
信楽経由桑名の多度大社参り Apr 10, 2017
下関ツーリング Apr 07, 2017
小倉散策雨模様 Apr 07, 2017
遂にHID化してしまいました Mar 25, 2017
最新コメント
カテゴリ別
Thanks for Visiting
Youtube Live
準備中
目指せ北海道ブログショップ
RSSリンク