Ви не увійшли.
Здравствуйте. Есть такая проблема.В общем есть некий ультразвуковой датчик движения. Не получается прикрутить бузер и серво
Серво привод нужно установить в положение от 0 до 180 градусов (если до предмета расстояние 3 м, установить 180 градусов, если меньше 3х метров - 0 градусов) И настроить интенсивност звучания бузера.
Помогите пожалуйста, начинающему.
вот примерный код :
#define trigPin 9 //Sensor Echo pin connected to Arduino pin 12
#define echoPin 10 //Sensor Trip pin connected to Arduino pin 11
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600); // инициализация послед. порта
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); // Подаем 0 на выход микроконтроллера
delayMicroseconds(2); //задержка 2 мкс
digitalWrite(trigPin, HIGH); // Подаем сигнал на выход микроконтроллера
delayMicroseconds(10); // Удерживаем 10 микросекунд
digitalWrite(trigPin, LOW); // Затем убираем
duration = pulseIn(echoPin, HIGH); //замеряем время Echo
distance = duration/58.2; // пересчитываем в см.
Serial.println(distance); // выводим в последовательный порт
delay(1000);
}
Неактивний
Для этой задачи необходимо иметь несколько процедур. В одной процедуре с максимально допустимой частотой опрашивайте датчик расстояния. Полученные данные следует обработать цифровым фильтром, например, в фильтре Калмана (см.Википедию) для удаления случайных выбросов значений.
В другой процедуре, по полученным через фильтр значениям расстояния, устанавливайте сервопривод в нужное положение. Здесь же, или в третьей процедуре, изменяйте громкость буззера.
Вторая и третья процедуры должны выполняться значительно реже, например 1-10 раз в секунду.
Вызов процедур с разной частотой можно оформить с помощью таймеров. Для этого есть хорошие библиотеки, например MsTimer2, TimerOne и др.
Можно сделать все и в цикле loop() используя millis():
if((millis() - time1) > period1) {
myProcedure1();
time1=millis();
}
Здесь period1 - периодичность выполнения первой процедуры в миллисекундах.
Аналогично вызывайте вторую и третью процедуру со своими time2, time3, period2, period 3.
Не забудьте объявить все переменные и процедуры.
Я аналогичным способом измерял расстояние до земли при посадке. Такой себе landtronic, как я его назвал. В моем случае при снижении до 3-5 метров звучал сигнал.
Вот краткое Описание и фото
Неактивний