hc-sr04 Наполнение бочки для полива, помогите пожалуйста.
- Войдите на сайт для отправки комментариев
Ср, 27/04/2016 - 21:15
Есть емкость на 1000 литров, дальномер hc-sr04, электромагнитный клапан 12 вольт, Ардуино UNO и реле.
Задача ултразвукового hc-sr04: Включить реле ( открыть клапан ) на расстоянии 90 см от дальномера и выключить реле на расстоянии 10 см, и ОЧЕНЬ важный цикл - НЕ включать реле пока уровень воды не опустился на 90 см, потом открыл клапан, емкость наполнилась до 10 см от УЗ hc-sr04, и снова реле выключилось, и НЕ включается до 90 см. Нашел в форуме код но для моей задачи он не пдходит. Помогите с кодом.
#define Trig 6 #define Echo 7 #define ledPin 8 void setup() { pinMode(Trig, OUTPUT); //инициируем как выход pinMode(Echo, INPUT); //инициируем как вход pinMode(ledPin, OUTPUT); Serial.begin(9600); /* задаем скорость общения. В нашем случае с компьютером */ } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop() { digitalWrite(Trig, HIGH); /* Подаем импульс на вход trig дальномера */ delayMicroseconds(10); // равный 10 микросекундам digitalWrite(Trig, LOW); // Отключаем impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=impulseTime/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<40) // Если расстояние менее 30 сантиметром { digitalWrite(ledPin, HIGH); // Светодиод горит } else { digitalWrite(ledPin, LOW); // иначе не горит } delay(100); /* ждем 0.1 секунды, Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. */ }
У Вас есть две границы, нижняя 90см и верхняя 10см. Область определения для работы мотора от 90 до 10. Помните математику за 7-й класс, как находится область определения функции графическим методом? Нарисовали бы на листочке и стало бы понятно, ибо наглядно. :)
В нижней границе мотор необходимо включить, в верхней - выключить.
Извените за безграмотность но очень хочется реализовать проект
При компиляции кода программа ругается на строку
if (Level<=HighLevel) {выключить}; // как только вода набралась до верхнего уровня, выключаем мотор
Почему так происходит ?
Потому что надо не тупо копировать, а сначала понять что копируешь.
Должно получиться так ?
Примерно. Только в loop() надо ещё регулярно получать этот самый Level с датчика .. :)
УЗ датчик на 100% влажность + конденсат как реагирует?
Советую ( настоятельно) добавить усреднение показаний датчика.
А то они очень любят часто бросаться случайными импульсами от нуля до бесконечности.
И прочтите про третий параметр
pulseIn(pin, value, timeout)
http://arduino.ru/Reference/PulseIn
Видимо "смотря какой датчик" или "какая библиотека" .. мой работает как часы с точностью в 1мм на всем диапазоне измерений.
Или я "что-то делаю не так"? :)
В итоге, продолжительной работы и основной помощью одного из участников данного проекта, был скомпелирован скетч, и загружен в Ардуину, но похоже Ардуина не правильно понимает on, off, реле выключено на расстоянии более 90 см и включено при менее 90 как надо, но на 10 см ни как не реагирует хотя должно выключиться, пока ситуация вот такая, буду разбираться с работой.
"О сколько нам открытий чудных, готовит Просвещенья дух ..". (с) Кто-то из древних.
Приятно видеть, что у Вас получилось.
Надо было не "поменял HIGH на LOW", а понять почему надо было поменять. Не ждать пока один напишет логику решения, а другой найдёт ошибку Вашей реализации логики. :)
Надо было не "поменял HIGH на LOW", а понять почему надо было поменять. Не ждать пока один напишет логику решения, а другой найдёт ошибку Вашей реализации логики. :)
Господь с Вами, о чём это Вы? Вы разве не поняли почему компилятор ругался на строку
Открою Вам страшный секрет - потому. что именно в таком виде она компилятору и подсовывалась :)))
Надо было не "поменял HIGH на LOW", а понять почему надо было поменять. Не ждать пока один напишет логику решения, а другой найдёт ошибку Вашей реализации логики. :)
Господь с Вами, о чём это Вы? Вы разве не поняли почему компилятор ругался на строку
Открою Вам страшный секрет - потому. что именно в таком виде она компилятору и подсовывалась :)))
Очевидно! Я как раз и предложил человеку попытаться думать. Но, мало ли, может там совсем юное создание, или наоборот человек преклонных лет, или литературный критик, или разовая задача... :)