本日,夕方11回目の芝刈りをしました。汗びっしょりです。やはり,のび方が早くなってるようで,ゴミ袋
ひとふくろになりました。
IOT再びーESP32編(13)ーーープログラムの修正(A0221ATデータフォーマット)
スケッチを書き換えました。初期値を決定するのに,10回計測して,最大値と最小値を除いたものの平均を
とる関数を作成しました。
//初期値設定用 平均
float sokutei_heikin(int m){
float Value[10];
float Max;
float Min;
float Sum;
for(int Ct=0;Ct<m;Ct++){
Value[Ct]=measureDistance_1();//距離の測定関数を呼び出す。
Serial.print(Ct);
Serial.print(" =");
Serial.println(Value[Ct]);
if(Ct == 0) {//最初の測定値を最大・最小値として保存
Max=Value[0];
Min=Value[0];
}
else {
if(Value[Ct] > Max){//取得したデータを最大値と比較して,大きければ,新たに保存
Max=Value[Ct];
}
if(Value[Ct] < Min){////取得したデータを最小値と比較して,小さければ,新たに保存
Min=Value[Ct];
}
}
Sum+=Value[Ct];/*測定値を加算*///測定値を加算していく
}
Sum=(Sum-(Max+Min))/(m-2);//最大値と最小値を除いて,平均をとる。
Serial.print("AVE");
Serial.print(" =");
Serial.println(Sum);
return Sum;/*最大値・最小値を除いた平均値を返す*/
}
sokutei_heikin(10)ということで,10回の測定の平均をとる(最大・最小を除くので実際は8回)
設定で,動かして見ましたが,一回目の測定値が,きちんと測定されてないようなので,測定に入る
一回ダミーの測定をいれsて,実際は,11回の測定でやってみました。大きな変動もなく結果は良好
でした。
今回,最大・最小値を除いた平均を計算するのに,ちょっとなやみました。測定値を全部保存したうえ
ソートして,最大値と最小値を除こうかとも思いましたが,測定値をその都度一時保存の最大値と最小
値と比較するやり方が,よかったようです。
下記が,超音波センサーから,距離を測定するための関数です。
float measureDistance_1() {
char m[50];
Serial2.write("S");//RX端子をHIGHにするのに一文字書き込む。
if (Serial2.available()){
hdr = (byte)Serial2.read();
if (hdr == 255){
data_h = (byte)Serial2.read();
data_l = (byte)Serial2.read();
chksum = (byte)Serial2.read();
if (chksum == ((hdr + data_h + data_l)&0x00FF)){
distance = data_h * 256 + data_l;//距離計算
}
}
}
delay(100);
return distance;
}
distance = data_h * 256 + data_l の部分が,距離を計算する部分です。計算するといっても,HIGHの
データとLOWのデータが,1バイトずつ送られてくるので,桁数を合わせる計算をしているだけです。
マニュアルには,下記のような記述がありました。
計測が開始されるとその結果が下記のように,4バイトのデータでおくられてきます。
0XFF 0X07 0XA1 0XA7
各データは,
0XFF はヘッダーデータ
0X07 は上位データ
0XA1 は下位データ
0XA7 はチェックサム
のようになってますので,
上位のデータと下位のデータを合わせると,
07A1
という16進数が得られますので,これを10進数に直すと,1953mmというデータが得られるようです。
IOT再びーESP32編(12)ーーープログラムの修正
大きな不具合のなかった配線ですが,赤のLEDが点灯しなかったので,いろいろ調べてみると,LEDの足が断
線してました。また,組み込んでテストしてみると,大きな不都合はなかったものの,原因は分かりません
が,測定値が変動するようなので,その対策で,スケッチを修正することにしました。
オリジナルのスケッチでは,超音波の測定による距離をそのままWEBに渡していましたが,この部分を多少
変更します。
噴霧機満タンの状態での測定値を記憶して,それに基づいて,減り具合を加算するようにしたいと思いま
す。満タンの状態は,何度か測定して,平均をだして,初期値とするにあたって,誤差を抑えるために何回
か測定し,最大値と最小値を除いて,平均をとりたいと思います。
どうしたもんかとネット見ていると,下記のようなプログラムが見つかりました。C のものですが,これを
参考に修正しようと思います。
#include <stdio.h>
#define NumValue 5
int main(){
int Value[NumValue];
int Ct;
int Max;
int Min;
int Sum;
for(Ct = 0; Ct < NumValue; Ct ++) {
printf("Enter #%d → ", Ct + 1);
scanf("%d", &Value[Ct]);
if(Ct == 0) {
Max = Value[0];
Min = Value[0]; }
else {
if(Value[Ct] > Max) {
Max = Value[Ct];
}
if(Value[Ct] < Min) {
Min = Value[Ct];
}
}
}
printf("========\n");
Sum = 0;
for(Ct = 0; Ct < NumValue; Ct ++) {
if(Value[Ct] != Max && Value[Ct] != Min) {
Sum += Value[Ct];
}
}
printf("%d\n", Sum);
}
IOT再びーESP32編(11)ーーーテストーー超音波センサー
芝刈りーー今年第10回目
今年10回目の芝刈りです。一週間で,約5cmほど伸びるようです。今年は,例年になく,状態はいいよう
に思いますがサッチが取り切れてないところがやや茶色く見えます。
芝刈り前
芝刈り後
IOT再びーESP32編(10)ーーー組み込みーー超音波センサー
ハイガー======刈払機
2019年4月ですから,もう5年ほど前になりますが,安い,刈り払い機を購入しました。当時,
11,852円と格安でした。さすがに今は5000円ほど値上がっていますが,それでも,格安の
ものだと思います。
ただ,格安なのはいいのですが,やはり,値段相応のことはあるようで,今までに,いくつかの不具合が
ありました。最初の不具合は,使い始めて2ヶ月ぐらいで,何カ所か,ネジがなくなりました。
きっと,振動が大きいか,締め付けがあまかったのか,緩み止めの対策がなされていなかったのか,
原因はわかりません。メーカーにも連絡しましたが,けっきょっく面倒で,自分で直しました。それと,
詳しい時期は記憶にないのですが,ハンドルが折れるということが起きました。きっと使われているア
ルミの材質に問題があるのでしょうね。それから,ハンドルは,修理してつかってましたが,つい最近,そ
のハンドルも再び破損してしまいました。
このときは,エンジンがだめになっていたタナカのTBC256Hのハンドルを片方,切り取って,急遽使えるよう
にしました。TBC256Hは,かなり気に入ってたのですが,エンジンがだめになり,結局部品取りになりまし
た。(まあ,TBC256Hは,部品があれば修理できるので,オークションで出品待ちなのですが。)
こうして,修理しながら使ってたハイガーの刈り払い機が,また,調子が悪くなりました。良くみてみると,
燃料タンクからのチューブが劣化して,ちょうど,ゴムブッシュのところで,切れてしまったようです。
これも,きっと,チューブの材質問題でしょうかね。タナカのものにはなかったことです。まあ,修理という
ことで,〇mazonから,購入。
付属のゴムブッシュがあうかどうか分かりませんでしたが,ゴムブッシュもぴったりでした。
ついでに,このところエンジンがかかりにくかったのでキャブレター調整。プラグを外してみると
かぶりぎみだったので,燃料をちょっと絞りました。それでもかかりにくかったので,手元にあった
別のプラグに交換。一発でかかるようになりました。
ハイガーの刈り払い機は,コスパ的には,最高なのですが,修理をメーカー任せの方には,ちょっと
ハードルが高いような気がします。DIYが趣味で,修理しながら,使う,というのであれば,うって
つけの物だと思います。
芝刈りーー今年第9回目
日曜日,雨がちらついていたので,今日に延期かなと思ってましたが,午後から,付かぬ間の曇りの天気で急
遽9回目の芝かりを行ってしまいました。結果的に,長めにならずに芝刈りができてよかったです。大分成長
が早くなってきたので,軸刈り近くなるおそれを回避できました。大分密度もこくなってきましたが,部分
部分,サッチが目立つところがありますので,晴れの日をみて,熊手で,サッチ取りをするようですね。
IOT再びーESP32編(9)ーーー番外編
あれこれとネットサーフィンをしていて,WEBページとサーバーとのやりとりについて,おそまきながらわ
かってきました。この役割をになってるのが,ハンドラーと呼ばれる部分でした。その書き方や意味が少
しわかりました。
特に
サーバー→→→WEB
の方法がいまいちでしたが,この役割のになってるのが,esp32 の processor関数 だとい言うことが
分かりました。
このやりとりをする前段階として,
AsyncWebServerRequest *request; #requestというオブジェクトを作成
request->send(SPIFFS,"/hogehoge.hoge",String(),false,processor);
記述をするようで,記述で,hogehoge.hoge(html記載されたページ)の%で囲まれた文字列がprocessor関
数で置きかえられるとのことでした。
実際には,
WEBからサーバーへホームページ表示のrequest
が出されるなかで,いろいろ解釈されて,%で囲まれた文字列が,processor関数で置き換えられるとのこと
のようでした。これで,ちょっとだけ進歩かなと思います。