こんにちは。
この度仕事で回転数をロギングできる何かを作ってくれと依頼されたのでない知恵絞って作ってみました。
ArduinoUNOとTera Termで回転数をロギングしてCSVで吐き出す回路とソースコード、理論を書こうと思います。
素人なのでハードとソフトは改良の余地ありまくりですが一旦正常動作していますので記します。
※転載する際には一言頂けると嬉しいです
・必要なもの
1:ArduinoUNO×2台
2:20kΩ 1/4w (金属皮膜抵抗)×1
3:1kΩ 1/4w (金属皮膜抵抗)×2
4:200Ω 1/4w (金属皮膜抵抗)×1
4:TLP785(GBランク)
5:1S1588(1N4148)×2
6:CTセンサー(SR-3702)×1
他にデジタルオシロがあった方がいいです。
なくても出来ますがやや面倒です。
・要件
1:車両に対して非侵襲的手段で実装できること
2:ソフトの変更のみであらゆる車両に対応すること
以上2点が要件としてあるので、ハイテンションコードになんかして車両をいじらず検出する方法しかありませんでした。
ハイテンションコードは高電圧が断続的に流れていてお察しの通りノイズだらけでどうしようもないのですが、波形整形用とパルスカウント用でそれぞれArduinoを2台使って分担させて使うことでなんとか対処しました。
タイマーICなどでも出来ると思いますが、どのような車両にも対応出来るようにという汎用性を持たせるのは酷だったので今回は使っていません。
・課題
1:CTセンサー波形をオシロで観測すると点火と思わしき信号から10msほどノイズが観測されるので、しきい値の設定が難しい
2:点火信号電圧は毎回若干異なり、トリガーとして設定しにくい
3:汎用性を持たせたいが現場でハードの変更が難しいのでソフトで対応しなくてはならない
以上の課題は以下の要領で解決しました
・解決策
課題1
最初の点火信号からノイズが収まるまで(しきい値以下の電圧に収束するまで)Arduinoでdelayして無視する
課題2
Arduinoのアナログ入力に信号を入れて、点火信号電圧の70%程度の電圧でトリガーをかける
課題3
トリガー電圧、ノイズを無視する時間は車両ごとに装着前にオシロで波形観測し、変数で設定できるようにする
文字だけだとなんのこっちゃですが、この後の記事でデータ取りを行った3車種のオシロ波形をアップしますので見てください。
今回は本当に最低限の機能しか必要ないので入れていませんが、用途によってLCD付けたりBluetoothでスマホに投げたり色々出来ると思います。
肝はノイズの対策でdelay関数を使ったことですね。
また回転数検出はレシプロカル方式で算出しているのでほぼ正確なはずです。
何度もいいますがハードもソフトもど素人ですので暖かい目で見守ってください。
このあとの記事は
1:ハードウェア編
2:波形整形ソフトウェア編
3:回転数算出ソフトウェア編
4:実際の運用方法や備考
の4本立てて書こうと思います。
Qiita初めてなのでよくわかってませんがこの記事が誰かのためになれば幸いです。
ではまた次の記事で!