Arduino及びDFPlayerMiniを用いた自動車用速度警告装置の製作
というわけで、今回はこのキンコンを作ります。
車には車速に応じて車速パルスという電気信号を発生させる機能が備わっていて、エンジンやナビの制御に使われています。この周波数を読み取ることによって車の速度を判断することができます。
周波数の読み取りにはArduinoを、音声の再生はDFPlayerMiniを用います。
使用部品
・Arduino(nano,mini,ATmega328P等)
・DFPlayerMini(非純正品)
・12V→5V 降圧モジュール
・5V→7V 昇圧モジュール(普通はなくていい)
・microSD
・スピーカー
DFPlayerMiniはDFRobot製のmp3プレイヤーです。安いコピー品が多く出回っています。単体動作も出来ますが、Arduino等からの制御もできます。音声データはmp3でmicroSDに取り込みます。3Wのアンプを搭載しているため、スピーカーを取り付けるだけで十分な音量を得られます。
Arduinoとの接続や基本のプログラムなど、詳細についてはこちら(準備中)。
データシートや他のブログによると5Vで動作することが分かりますが、何故か6.5Vから8Vで動作したため昇圧しました。普通はいらないです。今考えてもこれは謎です。
Arduinoについては、今回はATmega328Pと外付け部品数点によって同等のものとしました。この辺はお好みで。ArduinoProMini互換品が小さく安いのでおすすめです。
プログラム
#include <FreqCounter.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
float frq;
#define warning 44 //警告する速度においての周波数[Hz]
/* 15Hz=20km/h 44Hz=60km/h 71Hz=100km/h */
void setup() {
Serial.begin (9600);
mp3_set_serial (Serial);
mp3_set_volume (30); //音量0~30
}
void loop() {
FreqCounter::f_comp = 8;
FreqCounter::start(1000);
while (FreqCounter::f_ready == 0) {}
frq = FreqCounter::f_freq;
if (frq >= warning) {
mp3_play(1); //「0001.mp3」を再生
delay(2000); //音声ファイルの長さ以上
} else {}
}
プログラムは周波数カウンターのものをほぼそのまま使っています。
周波数の値を1秒ごとに読み取り、警告音を発生させたい速度においての周波数になったら、DFplayerへ信号を与えます。プログラム内で周波数→速度を計算するのではなく、設定したい速度の周波数をあらかじめ求めています。
JIS規格で定められている、車速パルスの周波数から速度を求める公式は以下の通りです。
JIS-D5601
http://www.jisc.go.jp/app/jis/general/GnrJISNumberNameSearchList?toGnrJISStandardDetailList
私の場合、n1 = 4, N2 = 637で計算したところ合っていました。
周波数カウンターのプログラム(記事の最後にリンクあり)を実行し、シリアルモニタに周波数と車速を表示させ、車を実際に走らせて確認しました。
完成品
かなり見た目が美しくないですがちゃんと動作しました。
私の車(トヨタ・WiLLサイファ)の場合、車速パルスの電圧は5Vのようでしたので配線をそのままArduinoに入力しました。12Vで出力される場合は抵抗などで降圧する必要があります。
ユニットの電源スイッチを設ける場合は、プラス線に加え、車速パルス線を必ず切り離すようにしてください。動作確認後に(うるさかったので止めようと)12V線のみを切り離したところ、メーター内の警告ランプが点灯しギアが4速に入らなくなりました。エンジンを切って配線を全て切り離して解決しました。エンジンコンピューターに関わるため注意が必要です。
動画はこちら。制限速度70km/hの道路で、60km/hから警告音が鳴るようにしています。
動画撮ってきた pic.twitter.com/oDaitrMTFe
— はつかり兄 (@hatsukari_k) 2017年8月10日
母を乗せた時に「昔こんなのあったねぇ」と懐かしがってました。私は頭文字Dで初めて知った世代です...
スイッチで警告音の種類や鳴る速度を切り替えられるようにしても面白いかもしれません。今回は実際のキンコンの音源を鳴らしたかったためDFPlayerMiniを使用しましたが、単純に圧電ブザーやLEDでもいいかもしれませんね。
参考ページ
Lab3 - Laboratory for Experimental Computer Science
Arduinoで遊ぼう - 周波数カウンタ - なんでも作っちゃう、かも。
Amazonリンク
amazonで購入し中国から2週間後に届きました。1個250円でした。
DFRobot社の純正品は1000円しますが、中国製でも品質は良く普通に使えました。
では!