hiro yamamoto works

ESP8266 Web logger
RaspberryPi HiRes Audio
Mini Solar power system
当ブログ掲載内容は無保証です。利用は自己責任でお願いいたします。

 

カレンダー

2021
October
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

QRコード

検索



このブログを検索

カウンター

本日のアクセス
昨日のアクセス
総アクセス数

ブログサービス

Powered by

teacup.ブログ
RSS

ESP32 HTTPサーバからのダウンロード速度UP(調査中)

調査継続中ですが

わかったことを載せておきます。

SD.begin(5, SPI, 24000000, "/sd");//24000000=24Mhz デフォルト 4Mhz

SPI.begin(); // start up the SPI bus
SPI.setFrequency(6000000);//6000000=6Mhz デフォルト 1Mhz

デフォルト設定でのテスト結果
平均 230 KB/s
ESP-WROOM-02では
平均 150 KB/s(120〜180 KB/s)

設定変更後
平均 366 KB/s(416〜330 KB/s)
SPIの変更効果は?再検証予定

条件
約8MBファイルをRasPi4(4GB)のLXTerminalでwgetで
ダウンロード
0
タグ: Arduino ESP-WROOM-32
投稿者:管理人

シリンダ移動時間測定器(完)

最終版スケッチ

センサ1だけを使って往復合計時間を測定するモードを
追加しました。
切換えはクリアスイッチを押しながら電源をいれ、約2秒
後に離すことでできるようにしました。

気になる点
スケッチ実行速度が測定値にどのくらい影響するか
わからない。

クリックすると元のサイズで表示します
通常測定
シリンダセンサをシリンダの両ストロークエンドに取り付け
ONすることを確認します。測定前はどちらかのセンサが
ONしている状態にします。クリアを押してからシリンダを
動作させて測定します。
Push、Pull時間を表示します。
クリックすると元のサイズで表示します

1センサ往復測定
クリアスイッチを押しながら電源をいれ、約2秒
後に離す。
センサ1取り付け位置は通常測定と同様(センサ2有無不問)
測定前はセンサ1がONしている状態にします。
クリアを押してからシリンダを動作させて測定します。
時間を表示します。
クリックすると元のサイズで表示します


クリックすると元のサイズで表示します
ターミナルブロックに自作センサと電源を接続

クリックすると元のサイズで表示します
電源スイッチと表示クリアスイッチ

稚拙スケッチの紹介
注意 コピペ後#includeの後の不等号を半角に直します。
   コメント表現の揺れあります。
/*
millis()約50日でオーバーフローは考慮しない
PORTBは、Arduinoのデジタルピンの8番から13番に対応する。
ポートBをすべて入力
D8(sensor0) アクチェータの出(push)側端
D9(sensor1) アクチェータの戻り(pull)側端
Bit0,1(D8,9)入力はプルアップすること。active LOW*/
#include
#include

LiquidCrystal_PCF8574 lcd(0x27); // set the LCD address to 0x27 for a 16 chars and 2 line display

uint8_t buttonState = 0;
uint8_t lastButtonState = 0;
unsigned long pushStartTime = 0;
unsigned long pushEndTime = 0;
unsigned long pushTime = 0;
unsigned long pullStartTime = 0;
unsigned long pullEndTime = 0;
unsigned long pullTime = 0;
unsigned long PP_Time = 0;
const uint8_t clearPBS = 2;//測定値クリアプッシュスイッチ
bool PPMode = false;

void setup() {
//Serial.begin(115200);
Wire.begin();
//Wire.setClock(100000);//400kHzでも動きそうだが(デフォルトは100kHz 100000)
pinMode(clearPBS, INPUT_PULLUP);//測定値クリアボタンスイッチ
DDRB = B00000000; // ポートBをすべて入力
//
//電源投入時に測定値クリアボタンスイッチHIGHなら従来通りPush-Pull測定モード
//LOWだったら、往復測定モードとする。
//
lcd.setBacklight(1);
if (digitalRead(clearPBS) == LOW) {
//フラグを立てる
PPMode = true;
//Push-Pull Modeのlcd初期表示
lcd.begin(16, 2); // initialize the lcd
lcd.clear();//
lcd.setCursor(0, 0); lcd.print("Push-Pull(Sen1)");
lcd.setCursor(5, 1); lcd.print(PP_Time);
lcd.setCursor(14, 1); lcd.print("mS");

} else {

lcd.begin(16, 2); // initialize the lcd
lcd.clear();//
lcd.setCursor(0, 0); lcd.print("Push ");
lcd.setCursor(5, 0); lcd.print(pushTime);
lcd.setCursor(14, 0); lcd.print("mS");
lcd.setCursor(0, 1); lcd.print("Pull ");
lcd.setCursor(5, 1); lcd.print(pullTime);
lcd.setCursor(14, 1); lcd.print("mS");
}
}

void loop() {

/*B PORT入力ピンレジスタの下位2Bitだけ(D8,D9)使う
入力との論理積を取ることで必要以外bitの影響を受けないようにする & 0x03 00000011
*/
if (PPMode == false) {
buttonState = PINB & 0x03; // D8:PortB Bit0 D9 Bit1 磁気検出ON = L

//D9,D8どちらかがLOWになったときから始める
if (buttonState != lastButtonState) {//以前と現在が違う時

/*D9pull端戻り限ONの時LOW,D8push端出限ONの時LOW PORT Bのbit0がD8,bit1がD9*/
/*現在D9H,D8H(移動中) && 以前D9L(pull端戻り限ON),D8H*/
if ((buttonState == 0x03) && (lastButtonState == 0x01)) {
pushStartTime = millis(); //戻り限から出発した時間を変数に記録
/*現在D9H,D8L(push端出限ON) && 以前D9H,D8H(移動中)*/
} else if ((buttonState == 0x02) && (lastButtonState == 0x03)) {
/*出限到着時間 - 戻り限出発時間 = 戻り〜出移動時間 変数へ記録*/
pushEndTime = millis();
pushTime = pushEndTime - pushStartTime;//移動中H,Hから到着H,L(D8push端出限)
lcd.setCursor(5, 0); lcd.print(" ");
lcd.setCursor(5, 0); lcd.print(pushTime);
/*現在D9H,D8H(出限から戻り限へ移動中) && 以前D9H(pull端戻り限OFF)D8L(push端出限ON)*/
} else if ((buttonState == 0x03) && (lastButtonState == 0x02)) {
pullStartTime = millis();//出限を出発した時間を変数に記録
/*現在D9L(pull端戻り限ON),D8H(push端出限OFF) && 以前D9H,D8H(出限から戻り限へ移動中)*/
} else if ((buttonState == 0x01) && (lastButtonState == 0x03)) {
/*戻り限到着時間(現在時間) - 出限出発時間 = 出〜戻り移動時間 変数へ記録*/
pullEndTime = millis();
pullTime = pullEndTime - pullStartTime;
lcd.setCursor(5, 1); lcd.print(" ");
lcd.setCursor(5, 1); lcd.print(pullTime);
}
/*clearBPSが押されて変数は0になっても、millis()カウントは電源投入から進んでいるので
clearBPS使い方 sensor1,2のいずれかがONする位置で押して下さい。sensor1,2両方がOFF状態で
押すと、アクチェータを移動してsensor1,2のいずれかがONした時に、数値が表示されてしまいます。
再度clearBPを押すと数値がクリアされ測定できます。 */
}
lastButtonState = buttonState;
if (digitalRead(clearPBS) == LOW) {//20210904>
buttonState = 0;
lastButtonState = 0;
pushStartTime = 0;
pushEndTime = 0;
pushTime = 0;
pullStartTime = 0;
pullEndTime = 0;
pullTime = 0;
PP_Time = 0;
lcd.clear();//LCDに表示されている情報を消す
delay(100);
lcd.setCursor(0, 0); lcd.print("Push ");
lcd.setCursor(5, 0); lcd.print(pushTime);
lcd.setCursor(14, 0); lcd.print("mS");
lcd.setCursor(0, 1); lcd.print("Pull ");
lcd.setCursor(5, 1); lcd.print(pullTime);
lcd.setCursor(14, 1); lcd.print("mS");
}
} else {
buttonState = PINB & 0x03; // D8:PortB Bit0 D9 Bit1 磁気検出ON = L

//D9,D8どちらかがLOWになったときから始める
if (buttonState != lastButtonState) {//以前と現在が違う時

/*D9pull端戻り限ONの時LOW,D8push端出限ONの時LOW PORT Bのbit0がD8,bit1がD9*/
/*現在D9H,D8H(移動中) && 以前D9L(pull端戻り限ON),D8H*/
if ((buttonState == 0x03) && (lastButtonState == 0x01)) {
pushStartTime = millis(); //戻り限から出発した時間を変数に記録

} else if ((buttonState == 0x01) && (lastButtonState == 0x03)) {
/*戻り限到着時間(現在時間) - 出限出発時間 = 出〜戻り移動時間 変数へ記録*/
pullEndTime = millis();
PP_Time = pullEndTime - pushStartTime;//1センサで往復時間を測定
lcd.setCursor(5, 1); lcd.print(" ");
lcd.setCursor(5, 1); lcd.print(PP_Time);
}
/*clearBPSが押されて変数は0になっても、millis()カウントは電源投入から進んでいるので
clearBPS使い方 sensor1,2のいずれかがONする位置で押して下さい。sensor1,2両方がOFF状態で
押すと、アクチェータを移動してsensor1,2のいずれかがONした時に、数値が表示されてしまいます。
再度clearBPを押すと数値がクリアされ測定できます。*/
}
lastButtonState = buttonState;
if (digitalRead(clearPBS) == LOW) {
buttonState = 0;
lastButtonState = 0;
pushStartTime = 0;
pushEndTime = 0;
pushTime = 0;
pullStartTime = 0;
pullEndTime = 0;
pullTime = 0;
PP_Time = 0;
lcd.clear();//LCDに表示されている情報を消す
delay(100);
lcd.setCursor(0, 0); lcd.print("Push-Pull(Sen1)");
lcd.setCursor(5, 1); lcd.print(PP_Time);
lcd.setCursor(14, 1); lcd.print("mS");
}
} //PPMode == true
}
0
投稿者:管理人
1 | 《前のページ | 次のページ》
/1 
 
AutoPage最新お知らせ