скачут показания УЗ дальномера
- Войдите на сайт для отправки комментариев
Втр, 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см?