0

こんにちは、使用している超音波センサーの次のコードがありますが、結果が正確ではなく、ターゲットからの距離をセンチメートルで表示したいと思います。

    #include <LiquidCrystal.h> //Load Liquid Crystal Library
LiquidCrystal LCD(10, 9, 5, 4, 3, 2);  //Create Liquid Crystal Object called LCD

int trigPin=13; //Sensor Trip pin connected to Arduino pin 13
int echoPin=11;  //Sensor Echo pin connected to Arduino pin 11
int myCounter=0;  //declare your variable myCounter and set to 0
int servoControlPin=6; //Servo control line is connected to pin 6
float pingTime;  //time for ping to travel from sensor to target and return
float targetDistance; //Distance to Target in inches
float speedOfSound=776.5; //Speed of sound in miles per hour when temp is 77 degrees.

void setup() {

Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row LCD
LCD.setCursor(0,0);  //Set LCD cursor to upper left corner, column 0, row 0
LCD.print("Target Distance:");  //Print Message on First Row
}

void loop() {

  digitalWrite(trigPin, LOW); //Set trigger pin low
  delayMicroseconds(2000); //Let signal settle
  digitalWrite(trigPin, HIGH); //Set trigPin high
  delayMicroseconds(15); //Delay in high state
  digitalWrite(trigPin, LOW); //ping has now been sent
  delayMicroseconds(10); //Delay in high state

  pingTime = pulseIn(echoPin, HIGH);  //pingTime is presented in microceconds
  pingTime=pingTime/1000000; //convert pingTime to seconds by dividing by 1000000 (microseconds in a second)
  pingTime=pingTime/3600; //convert pingtime to hourse by dividing by 3600 (seconds in an hour)
  targetDistance= speedOfSound * pingTime;  //This will be in miles, since speed of sound was miles per hour
  targetDistance=targetDistance/2; //Remember ping travels to target and back from target, so you must divide by 2 for actual target distance.
  targetDistance= targetDistance*63360;    //Convert miles to inches by multipling by 63360 (inches per mile)

  LCD.setCursor(0,1);  //Set cursor to first column of second row
  LCD.print("                "); //Print blanks to clear the row
  LCD.setCursor(0,1);   //Set Cursor again to first column of second row
  LCD.print(targetDistance); //Print measured distance
  LCD.print(" inches");  //Print your units.
  delay(250); //pause to let things settle


  }  

どんな助けにも感謝します。

4

3 に答える 3

1

2.54 を掛けて、インチをセンチメートルに変換します。

float targetDistanceCentimeters = targetDistance*2.54;

あなたのコードは正しいように見えるので、これはハードウェアの問題だと思います。私の経験では、超音波センサーは通常、壁や表面が比較的平らな大きな物体以外の物体までの距離を測定するのが非常に苦手です。したがって、システムの精度をテストしたい場合は、壁や本などのオブジェクトに対してテストしてください。測定中にセンサーが動いている場合は、動きが速すぎないことを確認してください。小さな物体または薄い物体までの距離を測定している場合は、フィルタリングして測定値の平均を取る必要があります。どれだけ正確になりたいかはあなた次第ですが、フィルター処理された測定値の平均が 20 程度あれば適切な結果が得られると思います。

考慮すべきもう 1 つの点は、適切な供給電圧があり、センサーが床に対してある角度で向けられていないことです。これにより、不要な反射が発生する可能性があります。

于 2016-05-27T07:22:35.597 に答える