お盆中に完成させて、実走行テストしようとしているのですが、
台風10号のおかげで、17日土曜日以降となりそうです。
風速なので、ローラ台では、テストできないので実走行する以外に動作試験できません。3年前の実績があるので、そこそこ使えることは分っているのですが、3年前は、サイクリングに使うほど実走行をしてないので、今回は、実使用に耐える試作品ということを狙ってます。
●実装基板特徴
①LCDの下側にCPU基板を配置します。
②実装密度を目いっぱいあげました。
使用デバイスは、
1:CPU(LPC1114FN28)
2:3.3VDCDC昇圧コンバータ
3:マイクロSDカードドライブ
4:単四電池ケース
この基板で、
1、LCD(ACM1602NI)
2、OMRON D6FPH微差圧センサ
3、リードスイッチ車速センサ
5、クラシックBTモジュール
●SDマイクロプログラムでかくてコンパイルエラー
LPC1114FNは、32Kフラッシュしかないので、大きなライブラリーを使うと、容量オーバーになりました。SDFileSystemが大きくて
コンパイルできなくなりました。代替え案として、
①別のCPUに変更=>お盆中にできなくなるので今回は却下
②シリアルIFでデータを他に送信して、スマホでログ
=>BTモジュールでSPPでスマホに受信させるのは簡単
※昨年仕入れておいた中華BTモジュールです。技適非対応ですが、技適は、数年後に緩和されるはずなので、中華BTを使っていてもお咎めはないはずだと踏んで使ってます。
amazon でHC-06を買ったつもりですが、送られてきたモノが違っていてBT-04というモジュールでした。RXとTXをマイコンとつないで、シリアル転送するだけなので、何も設定いらずで通信でるので、簡単でいいです。今回はTxとRXを間違えて結線して10分ほどロスしました。3.6V-6Vとか書いてありますが、3.3Vで通信できてます。デフォルトは9600bpsです。
③シリアルIFとパワーメーター用マイコンと通信させて、
双方向通信で、風速と速度データをパワーメーターマイコンでログ=>SeatTubet型システムが完成したら採用。
ということで②の方式でくみ上げました
●動作テスト
LPC1114FNは、電源オンでは、LCDが動作しなくて、RESETボタンを設けておかないといけないようです。RESETしてからLCD表示始まります。
BlueToothの受信は、アンドロイドスマホで
アプリSerial BlueTooth Terminalというアプリを使ってみました。
今までBlueTermを使っていたのですが、他のアプリも試してみました。周期は、500msecに一回なので
9600bpsでも十分間に合います。
タイムスタンプをついているので、サイコンデータと同期しやすいので、これで風速データとサイコンデータを比較分析すると向かい風でのロスがみえると思います。
●mbed LPC1114FN用プログラム備忘録
使っているライブラリは、ACM1602.hだけです。
//実装接続プログラム2016/10/16 rev.1.0 //単一プログラムでライブラリー化せず // ********************Wind meter***************************** // Target LPC1768 // 1)ACM1602NI (I2C text LCD library) // Takuo WATANABE (wtakuo) // http://mbed.org/users/takuo/code/ACM1602NI/ // 2)SD FIle read/write // Junichi Katsu “超お手軽マイコンmbed入門”P60~ //example writing to SD card, sford // 3)Frequency Counter x2ch // Neel Shah //https://developer.mbed.org/users/Neel/code/Frequency_counter/ // 4)OMRON D6F-PH5050 I2C diff pressure meter // Kunihiko Matsuhashi //************************************************************* //————————————Header ———————————–#include “mbed.h” #include “ACM1602NI.h” #include “SDFileSystem.h” #define D6F_ADDR 0xD8 //I2Cアドレス定義 I2C i2c1(dp5,dp27); //DigitalOut led1(LED1); //DigitalOut led2(LED2); //DigitalOut pinout(p19); ACM1602NI lcd(dp5, dp27);//I2C LCD //SDFileSystem sd(dp2, dp1, dp6, dp25, “sd”); // the pinout on the mbed Cool Components workshop board Serial BT(dp16, dp15);//BT SPP serial //InterruptIn in1(p16); //Wind sensor InterruptIn in2(dp26);//Wheel encoder //Timer t1;//for Wind sensor Timer t2;//for Wheel encoder //————————-const 定義————————————// //float t1_period = 0; // This is the period between interrupts in microseconds //float t1_freq = 0; float t2_period = 0; // This is the period between interrupts in microseconds float t2_freq = 0; float Wind_speed=0; float Wheel_speed=0; float pitos=0; float mitudo=0; float tmpr=20; float Cof=0.9; int wtime=500; static const char d6f_config[5]={0x00,0xD0,0x40,0x18,0x06}; static const char d6f_comp_read[4]={0x00,0xD0,0x51,0x2c};//差圧データx51hを指定 static const char d6f_temp_read[4]={0x00,0xD0,0x61,0x2c};//温度テータx61hを指定 static const char d6f_mem_read[1]={0x07};//リードレジスタx07hから読む static const char d6f_init[2]={0x0B,0x00};//初期化レジスタx0Bhをx00でリセット //—————————————————————————– //初期化関数// uint8_t d6fph_strt(void) { //D6F-PHのレジスタ通信データを宣言・初期化する error=i2c1.write(D6F_ADDR,d6f_init,2); //差圧読み込み関数// i2c1.write(D6F_ADDR,d6f_config,5); //cout関数 //————————-main————————— int main() { while(1){ //Wind_speed=t1_freq*0.0577; Wheel_speed=t2_freq*0.11644;//2.096/18; d6fph_strt(); //fp=fopen(“/sd/mydir/sdtest.csv”, “a”); |
●以後
土日で練習で使って、実使用での課題抽出します。
それ以降は、SeatTube型パワーメーターと合体する作業を8月末までに完成させたいと思います。