скачут показания УЗ дальномера
- Войдите на сайт для отправки комментариев
Втр, 08/09/2015 - 03:09
Есть код самодельного парктроника из УЗ дальномера и активной пьезы.
Почему то прыгают показания дальномера.
данные с посл. монитора:
(УЗ направлен на стену)
MS: 5536, CM: 100.21, IN: 39.45
MS: 7138, CM: 129.20, IN: 50.87
MS: 6620, CM: 119.83, IN: 47.18
MS: 5363, CM: 97.07, IN: 38.22
MS: 2914, CM: 52.75, IN: 20.77
MS: 2968, CM: 53.72, IN: 21.15
MS: 2956, CM: 53.51, IN: 21.07
MS: 5477, CM: 99.14, IN: 39.03
MS: 5528, CM: 100.06, IN: 39.39
MS: 5510, CM: 99.73, IN: 39.27
MS: 9527, CM: 172.44, IN: 67.89
MS: 6673, CM: 120.79, IN: 47.55
MS: 5437, CM: 98.41, IN: 38.75
MS: 5504, CM: 99.63, IN: 39.22
MS: 5486, CM: 99.30, IN: 39.09
MS: 5512, CM: 99.77, IN: 39.28
MS: 5485, CM: 99.28, IN: 39.09
MS: 5512, CM: 99.77, IN: 39.28
MS: 5461, CM: 98.85, IN: 38.92
MS: 5488, CM: 99.34, IN: 39.11
MS: 5537, CM: 100.22, IN: 39.46
MS: 5528, CM: 100.06, IN: 39.39
MS: 5512, CM: 99.77, IN: 39.28
MS: 5485, CM: 99.28, IN: 39.09
MS: 5486, CM: 99.30, IN: 39.09
MS: 5479, CM: 99.17, IN: 39.04
MS: 7313, CM: 132.37, IN: 52.11
MS: 5441, CM: 98.49, IN: 38.77
MS: 9547, CM: 172.81, IN: 68.03
MS: 5372, CM: 97.24, IN: 38.28
MS: 5510, CM: 99.73, IN: 39.27
MS: 9629, CM: 174.29, IN: 68.62
MS: 6388, CM: 115.63, IN: 45.52
MS: 1516, CM: 27.44, IN: 10.80
MS: 6632, CM: 120.04, IN: 47.26
MS: 5348, CM: 96.80, IN: 38.11
MS: 5485, CM: 99.28, IN: 39.09
скетч:
#include <Ultrasonic.h> #define TRIGGER_PIN 12 #define ECHO_PIN 13 #define led 10 Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN); void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { float cmMsec, inMsec; long microsec = ultrasonic.timing(); cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); Serial.print("MS: "); Serial.print(microsec); Serial.print(", CM: "); Serial.print(cmMsec); Serial.print(", IN: "); Serial.println(inMsec); if ((cmMsec) < 10 && (cmMsec) > 0) { digitalWrite(led, HIGH); delay(50); digitalWrite(led, LOW); delay(50); } if ((cmMsec) < 20 && (cmMsec) > 10) { digitalWrite(led, HIGH); delay(130); digitalWrite(led, LOW); delay(130); } if ((cmMsec) < 30 && (cmMsec) > 20) { digitalWrite(led, HIGH); delay(210); digitalWrite(led, LOW); delay(210); } if ((cmMsec) < 40 && (cmMsec) > 30) { digitalWrite(led, HIGH); delay(290); digitalWrite(led, LOW); delay(290); } if ((cmMsec) < 50 && (cmMsec) > 40) { digitalWrite(led, HIGH); delay(370); digitalWrite(led, LOW); delay(370); } if ((cmMsec) < 60 && (cmMsec) > 50) { digitalWrite(led, HIGH); delay(450); digitalWrite(led, LOW); delay(450); } if ((cmMsec) < 70 && (cmMsec) > 60) { digitalWrite(led, HIGH); delay(530); digitalWrite(led, LOW); delay(530); } if ((cmMsec) < 80 && (cmMsec) > 70) { digitalWrite(led, HIGH); delay(610); digitalWrite(led, LOW); delay(610); } if ((cmMsec) < 90 && (cmMsec) > 80) { digitalWrite(led, HIGH); delay(690); digitalWrite(led, LOW); delay(690); } if ((cmMsec) < 100 && (cmMsec) > 90) { digitalWrite(led, HIGH); delay(770); digitalWrite(led, LOW); delay(770); } if ((cmMsec) < 110 && (cmMsec) > 100) { digitalWrite(led, HIGH); delay(850); digitalWrite(led, LOW); delay(850); } if ((cmMsec) > 110) { digitalWrite(led, LOW); }
А если просто вот так попробовать? http://zelectro.cc/HC-SR04 Или даже вот так http://chingachgook.net/arduino/arduino-i-ultrazvukovoj-dalnomer-hc-sr04.html
попробовал, результат не лучше, вот:
Добавь после замера выдержку в полсекунды.
так работает, но пьеза с обилием delay, пищит уже не так как нужно
после первого условия поставил delay(50); , так более менее сносно работает
1. Рекомендованный период между импульсами должен быть не менее 50 мсек.
2. Весьма полезны фильтрация и усреднение полученных данных. Вот это https://bitbucket.org/alxarduino/leshakfilters/get/5b4c5a29d0aa.zip посмотрите.
после первого условия поставил delay(50); , так более менее сносно работает
Ну и по традиции http://arduino.ru/tutorials/BlinkWithoutDelay если нужно)
Всем спасибо за советы, за архив - отдельное!
Покупал 4 или 5 штук, все, кроме одного работали нормально, а у одного постоянно менялись показания. Внешне никаких багов не видно.
Глючные они...... сами по себе....
Он же обычно глючить начинает (если рабочий) когда под углом к плоскости его ставишь или к неровной еще плоскости... Он может упал (или на него че нит грохнулось) и приемник/передатчик на пару миллиметров сместился и вот результат... А как он ведет себя на расстоянии до 10см?