• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

アンドロ沼のブログ一覧

2020年12月31日 イイね!

水温計の作り方(ケース編)

で、ケースですが今度はマイコン基板が入って、かつ小さくて加工のしやすいものを探さないといけません。(あと見栄えと)
まずは、定番のフリスクでで試してみました。フリスクケースの中の仕切り板が邪魔でしたが、こいつを切り取ったところ、十分入る大きさだというのがわかりました。ただ、OLEDを最終的に見せるために穴をあけると、加工次第によっては穴がみっともなくなる可能性があり、かつ段差も生じるなどいろいろ不都合が考えられました。また、内部で固定するときにホットボンド使う気だったのですが、宙に浮かせてホットボンドする必要があり、加工時に失敗すると、また外観がいまいちになる危険性がありました。

で、色々悩みながら100均のセリアを物色していたところ、透明なトラベルケースを見つけ、これならディスプレイの穴がなくても行けそうということで、買ってみました。(キャンドゥでも売ってました。)

ただ、買ったときから大きさギリギリだなーと思っていたんですが、家に持って帰り、実際に基板を入れてみると、USBがぶつかって入らないことがわかりました。

ただ、写真の赤線部分を削ればギリギリ入りそうだし、むしろ配線を引き入れる穴はどのみち必要だし、USBが出てれば、書き換えも簡単(これが一番かも。)とポジティブに考えて、これで行くことにしました。結果、0クリアランスと言ってもいい具合にピッタリ収まり、さらに、クリアランスがないことで中で微動だにしない=固定しなくてもいいという副次効果も発生してこれで行くことになりました。

ただ、あまりにもギリギリなので、マイコン基板のばらつきによっては入らない可能性もあるので、要注意です。(実際、別な基板はバリがあって、最初はいらなかった。バリをカッターで削ったら入ったけど。)
Posted at 2020/12/31 20:06:24 | コメント(0) | トラックバック(0) | クルマ
2020年12月31日 イイね!

水温計の作り方(マイコンボード編2)


前回は、1602のキャラクタ表示LCDで、水温計を作りましたが、ケースが大きくてかさばり、液晶が周りの照度で見えにくかったりする問題があり、自発光ディスプレイにしたいという欲求がありました。(LCDでも、明るさを調整する機能つければ、問題ないのだけれど、明るさセンサつけて自動補正するところまで凝ると、いつまでたっても完成しない恐れあり。)
また、完成した写真を知人に見せたところ、「外観もうちょっと何とかならないすか?」というありがたいお言葉をいただきましたので、小型化して、設置場所を変えたというのもあって。OLED付きのESP32基板を使うことにしました。
物は添付のURLのものですが、私が買ったときは900円位だったので、ずいぶん高くなっていますが、機能を考えれば激安なので、まあ仕方がないかと。ただ、この手の基板の値段が上がるということは、実は生産が終了している懸念があります。日本では技適に対応した無線機器使わないとまずいのですが、ESP32のOLED付きで手ごろなものは種類が少なく、この基板がなくなってしまうと、非常に困ったことになります。もし、自分でも作ってみたい人は、無くなる前に買ってしまった方がいいかもしれません。
Posted at 2020/12/31 19:27:49 | コメント(0) | トラックバック(0) | クルマ
2020年11月22日 イイね!

水温計の作り方(ソフトの説明編4)

ソフトの説明も、これで終わりです。なぜか、最後に初期化の説明してしまいます。まず、一行目のところですが、LCDライブラリの初期化で、I2Cのアドレスが0x3F(ジャンパで変えられるそうですが・・)、16桁、2行だという定義をしてる形です。

Setup関数の中では、CANの通信ボーレートを500kbps(フリードでは、500kbpsでいいですが、古い車違ったりすることもあります。)、CANのTxをGPIOの5番、CANのRxをGPIOの4番に指定しています。私の回路図とは違うつなぎ方をしてしまったときは、このピン番号を変更すれば、別なピンにアサインすることが可能です。つぎの行では、受信Queueの大きさをセットしていますが、これで足りてるかどうかは、さっぱり私も知りません。この辺りは、CANドライバのサンプルコードから適当に持ってきてるだけだったりします。ただ、足りなければメッセージの取りこぼしが出るし、多すぎれば使えるRAMの量が減るので、規模の大きいプログラムを作るときは、ちゃんと考慮しましょう。(今回程度の軽負荷の場合は、適当で大丈夫かと。)

そのあとは、LCDの初期化をして、バックライトをつけ、CANを受信するまで、「Waiting CAN」の文字を表示する処理をしています。

一応、ソフトの説明もここまでとなります。わからないことがあれば、コメントで聞いてくれれば、回答します。

LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
void setup() {
CAN_cfg.speed=CAN_SPEED_500KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_5;
CAN_cfg.rx_pin_id = GPIO_NUM_4;
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//start CAN Module
ESP32Can.CANInit();
prev_time = millis();
lcd.begin(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Waiting CAN");
}
Posted at 2020/11/22 14:09:47 | コメント(0) | トラックバック(0) | 日記
2020年11月22日 イイね!

水温計の作り方(ソフトの説明編3)

今回は、受信処理を主に説明します。ソフトの説明編1で書いたように、0x18db33f1の機能アドレスを送信すると、誰から返事が来るのかわからない状況です。そうなると、リクエストの返信のIDの最後一バイトは、何が入ってもいいようにしないといけません。(関連情報URLのところで、解説があります。)
このため、下記の受信処理の冒頭で、受信を判断したら次のIF文で、最後の1バイトを除くIDがこちらの送信メッセージに対する返信かどうかを判断してます。(これをしないと、余計なメッセージにもいちいち反応してしまい、処理が回らなくなったりします。)

次のIF文では、受信データの3バイト目がPIDの0x05だったら、水温の情報だと判断して、LCDの0行目に受信した温度データから40を引いて、その値を表示してます。(PIDの0x05のデータは、摂氏の温度に+40したものだとWikipediaに書いてあります。)

受信データの3バイト目が、0x05ではなく、0x0Cだったときは、エンジンの回転数と判断して、LCDの2行目に回転数を表示しています。ただ、このLCDの関数は左詰めで数字表示するので、桁数が減る(例えば、モーター駆動に切り替わって、エンジンが止まる等)と、前回エンジンが回ってた時の桁が残り、なんだかわからなくなります。(実際そうなった。)なので、前のところで、余計にスペースを書き込んで、前回のデータを消してから、回転数を表示してます。

この方法で直ったかと思いきや、今度はエンジンが止まった時に、数字がちらちらするようになりました。エンジンが止まってる間、0rpmの値を受け取り続けると、毎回毎回0を書こうとして、「消して書く。」動作を200msで繰り返すためです。なので、最後のIF文で仕方なく、前回と同じ値を受け取ったときは表示を書き換えないようにして、見た目がまともになりました。

回転数の情報は、受信したデータの4バイト目に256をかけて、5バイト目を足し、4で割ったものが回転数だとWikipediaに書かれているので、その通りに計算しています。

if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){
if ((rx_frame.MsgID & 0xFFFFFF00) == 0x18daf100) {
if ((rx_frame.data.u8[2])== 0x05) {
lcd.setCursor(0,0);
lcd.print("Water Temp = ");
lcd.setCursor(13,0);
lcd.print((signed char)(rx_frame.data.u8[3]) - 40);
}else if ((rx_frame.data.u8[2])== 0x0c) {
current_rpm=(int)(((int)rx_frame.data.u8[3])*256 + (int)rx_frame.data.u8[4])/4;
if (current_rpm != last_rpm) {
lcd.setCursor(0,1);
lcd.print("ENGINE rev: ");
lcd.setCursor(12,1);
lcd.print(current_rpm);
last_rpm = current_rpm;
}
}
}
}
Posted at 2020/11/22 13:52:19 | コメント(0) | トラックバック(0) | 日記
2020年11月22日 イイね!

水温計の作り方(ソフトの説明編2)

前回、リクエストの中身を解説しましたけど、今度はスケジューラーのところを解説します。取得したいデータの性質を考えると、水温なんて頑張っても数秒に一回しか変わりません。また、エンジン回転数は数ms毎に変化する値なので、なるべく速く取得したい数値です。ただ、人間はそんなに早く数値読むことができません。(今回は手抜きで数字表示だし。)

ということで、今回は50msで周期を作り、回転数は200msに一回、水温は1秒に一回取得することにします。なので、回転数は50msでカウントアップされるタイマーの4回に一回で送れば良いということになり、カウンタを4で割って、4かけて元の数と一致するときに送信要求を送ることにしました。(4で割って余りが0の時でもよかったかもしれない。)

で、水温は0から始まって、20回目の19になったときに、送信要求を送っています。(ついでにカウンタをクリア)

if ((prev_time-millis())> 50) {
prev_time=millis();
if (loop_counter == ((loop_counter/4)*4)) { // if counter value is even
/* ここに回転数の取得メッセージの送信処理が入る */
} else if (loop_counter == 19) { // 1sec expired
/* ここに水温の取得メッセージの送信処理が入る */
}
if (loop_counter >= 19) {
loop_counter = 0;
} else {
loop_counter++;
}
}
}

実際、水温は最初100msくらいで更新したときは、数値が戻ることもあったのですが、これで問題なくゆっくり変化するようになりました。

また、エンジン回転数は人間の読み取りもそうなんですが、実際にはLCDもさほど速くないので、200msで更新してもさっぱり読み取れないことが分かったので、0.3秒とか、0.5秒でもよかったかもしれない。

表示するときに、グラフ表示などでグラフィカルに表示するのであれば、100msなどに早めるのも手ですが、CANバスはいつも混み合っていて、そこにこの読み出し要求とその応答が混ざると混み具合が激しくなり、車両の重要な通信が妨げられて、遅延する可能性があります。これは、車両のエラー表示の原因になりかねないので、10msに一回とかの高速で要求することはやめてください。(どうせ人間読めないから。)

まあ、反省点ですが、頑張って外字機能とか使えば、この液晶でも棒グラフは出せると思います。この液晶は1文字が5x7ドットなので、500rpmで一文字、100rpmで1ドットなので、1,2,3,4幅の縦ドットをそれぞれ外字登録してあげれば、横棒グラフ表示できると思います。(とはいえ、どうせATなので自分で変速できないから、回転数を正確に見れてもあまり意味はないですが・・・) 見栄えをよくしたい人はチャレンジしてもいいのかも。
参照情報URLに外字登録のやり方を解説しているところを貼り付けておきました。ヤフオクで売ってるハイブリットモニターのように、自作のアイコン的なものを表示したいときは、これ使えばできます。(このブログ全部読むと、自分で2000円くらいであのモニタは作れると思います。ただ、そこに至るまでの労力を考えると、あの値段は妥当だな(むしろ安い?)というのも理解できると思います。)
Posted at 2020/11/22 09:26:58 | コメント(0) | トラックバック(0) | 日記

プロフィール

「水温計の作り方(M5StickC plus ソースコード編2) http://cvw.jp/b/1552949/45254112/
何シテル?   07/05 22:01
アンドロ沼です。アクアからフリードハイブリッドに買い換えしました。
みんカラ新規会員登録

ユーザー内検索

<< 2025/9 >>

 123456
78910111213
14151617181920
21222324252627
282930    

愛車一覧

ホンダ フリードハイブリッド ホンダ フリードハイブリッド
家族が増え、強い圧力がかかり買い換えました。
スズキ ワゴンRハイブリッド スズキ ワゴンRハイブリッド
電車通勤から、車通勤に替り買い足しました。
トヨタ アクア トヨタ アクア
Fitからアクアに買い替えついでに、いろいろいじろうと思ってます。

過去のブログ

2021年
01月02月03月04月05月06月
07月08月09月10月11月12月
2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation