 |
|
24.09.2017, 14:19
|
|
Ультразвуковой датчик HC-SR04 и Arduino UNO
Живу я тут
Регистрация: 31.12.2014
Адрес: Львов
Сообщений: 1,421
Поблагодарил(а) : 279
Поблагодарили 843 раз(а) в 539 сообщениях

24.09.2017, 14:19
Рейтинг:
()
Добрый вечер коллеги аквариумисты!
Для создания девайса для своего аквариума нужна Ваша помощь, о чём я и прошу. Речь идёт о автодоливе воды.
Имеется Arduino UNO, датчик расстояния HC-SR04, обычный светодиод и зуммер, и всякая нужная мелочь.
В сети нашёл самый простой и наиболее подходящий скетч:
Скрытый текст
#define echoPin 7 // Вывод Echo
#define trigPin 8 // Вывод Trigger
#define LEDPin 13 // Светодиод "вне зоны доступа"
int maximumRange = 20; // Максимально доступный диапазон
int minimumRange = 4; // Минимально доступный диапазон
long duration, distance; // Длительность эхо, расстояния
void setup() {
Serial.begin (9600); //Включаем отладочный вывод
//Настраиваем порты
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT);
}
void loop() {
//Выключаем Trigger
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//Посылаем 10мкс импульс на Trigger
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
//Считаем длительность сигнала эхо
duration = pulseIn(echoPin, HIGH);
//Рассчитываем расстояние (по скорости звука)
distance = duration/58.2;
if (distance >= maximumRange || distance <= minimumRange){
/* Выводим отрицательное значение расстояния на компьютер и зажигаем светодиод
"Вне зоны доступа"*/
Serial.println("-1");
digitalWrite(LEDPin, HIGH);
}
else {
/* Отправляем расстояние на компьютер и гасим светодио */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}
//Delay 50ms before next reading.
delay(50);
}
Понравился тем что в рамках заданного расстояния можно отслеживать уровень воды. Вместо/или в парралель светодиоду установив пищалку получится "алярм", в случае когда уровень воды от автослива опустится ниже нужного уровня(20см, 5-я строчка скетча) или выше(4см, 6-я строчка) - светодиод и пищалка дадут знать.
Но это в вышеописанном скетче присутствует. Моя просьба в другом. Можете добавить ещё один диапазон, чтоб он как раз и управлял столь желаемым мной -автодоливом, посредством подключения через реле??? Тот диапазон что есть сейчас (4см-20см) - останется для аварийного сигнализирования. Новый нужен в внутренних рамках, например 5см-19см, получается по 1см до аварийного срабатывания диапазона 4см-20см. Данные расстояния приблизительные.
И можно ли сдетать так - чтоб светодиод /пищалка, диапазона 4-20 не просто включался - а моргал/пищал зуммером.
Огромная просьба откликнуться нашим программистам и отполировать код !!
|
Просмотров: 11267
|
Пользователь, который поблагодарил Сергій М за данный пост:
|
|
Реклама помогает развиваться |
|
26.09.2017, 23:08
|
#16
|
Живу я тут
Регистрация: 31.12.2014
Адрес: Львов
Сообщений: 1,421
Поблагодарил(а) : 279
Поблагодарили 843 раз(а) в 539 сообщениях
|
Re: Ультразвуковой датчик HC-SR04 и Arduino UNO ===www.aquaforum.ua===
Реле будет стоять с Led3 только в диапазоне 50-190, бребезжание диодов как-то всё равно, а вот реле и ЭМклапан долива, разве что MOSFET поставить, или твердотельные, хоть они и подороже будут.
|
|
|
27.09.2017, 10:31
|
#17
|
Живу я тут
Регистрация: 31.07.2010
Адрес: Белоруссия, Гомель
Сообщений: 411
Поблагодарил(а) : 38
Поблагодарили 189 раз(а) в 85 сообщениях
|
Re: Ультразвуковой датчик HC-SR04 и Arduino UNO ===www.aquaforum.ua===
Цитата:
Сообщение от Сергій М
Реле будет стоять с Led3 только в диапазоне 50-190, бребезжание диодов как-то всё равно, а вот реле и ЭМклапан долива, разве что MOSFET поставить, или твердотельные, хоть они и подороже будут.
|
Проблема решается на программном уровне. Пробуйте:
Скрытый текст
Цитата:
#include "Arduino.h"
#define echoPin 7 // HC-SR04
#define trigPin 8 // HC-SR04
#define LEDInfo 11
#define LEDWarning 12
#define LEDError 13
long duration, distance;
// clearance to avoid rattling of sensors
const byte GapDistance = 3;
//LED3
const byte LEDInfoMin = 50;
const byte LEDInfoMax = 190;
//LED2
const byte LEDWarningMin = 40;
const byte LEDWarningMax = 200;
//LED1
const byte LEDErrorMin = 0;
const byte LEDErrorMax = 200;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDInfo, OUTPUT);
pinMode(LEDWarning, OUTPUT);
pinMode(LEDError, OUTPUT);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration / 5.82;
/*
* 0-37 203 - > - LEDError1 (ON)
*/
if ((distance >= LEDErrorMin && distance < LEDWarningMin - GapDistance)
|| distance > LEDErrorMax + GapDistance) {
// LEDError1 (ON)
if (digitalRead(LEDError) == LOW) {
digitalWrite(LEDError, HIGH);
}
} else {
// LEDError1 (OFF)
if (digitalRead(LEDInfo) == HIGH) {
digitalWrite(LEDInfo, LOW);
}
// LEDWarning3 (OFF)
if (digitalRead(LEDWarning) == HIGH) {
digitalWrite(LEDWarning, LOW);
}
}
/*
* 53 -187 - LEDInfo2 (ON)
*/
if (distance >= LEDInfoMin + GapDistance && distance <= LEDInfoMax - GapDistance) {
// LEDInfo2 (ON)
if (digitalRead(LEDInfo) == LOW) {
digitalWrite(LEDInfo, HIGH);
}
} else {
// LEDError (OFF)
if (digitalRead(LEDError) == HIGH) {
digitalWrite(LEDError, LOW);
}
// LEDWarning3 (OFF)
if (digitalRead(LEDWarning) == HIGH) {
digitalWrite(LEDWarning, LOW);
}
}
/*
* 43-47 193-197 LEDWarning3 (ON)
*/
if ((distance >= LEDWarningMin + GapDistance && distance < LEDInfoMin - GapDistance)
|| (distance > LEDInfoMax + GapDistance && distance <= LEDWarningMax - GapDistance)) {
// LEDWarning3 (ON)
if (digitalRead(LEDWarning) == LOW) {
digitalWrite(LEDWarning, HIGH);
}
} else {
// LEDInfo (OFF)
if (digitalRead(LEDInfo) == HIGH) {
digitalWrite(LEDInfo, LOW);
}
// LEDWarning3 (OFF)
if (digitalRead(LEDError) == HIGH) {
digitalWrite(LEDError, LOW);
}
}
delay(50);
}
|
|
|
|
27.09.2017, 12:42
|
#18
|
Живу я тут
Регистрация: 31.12.2014
Адрес: Львов
Сообщений: 1,421
Поблагодарил(а) : 279
Поблагодарили 843 раз(а) в 539 сообщениях
|
Re: Ультразвуковой датчик HC-SR04 и Arduino UNO ===www.aquaforum.ua===
Спасибо, вечером всё проверю на практике!!
|
|
|
27.09.2017, 21:02
|
#19
|
Живу я тут
Регистрация: 31.12.2014
Адрес: Львов
Сообщений: 1,421
Поблагодарил(а) : 279
Поблагодарили 843 раз(а) в 539 сообщениях
|
Re: Ультразвуковой датчик HC-SR04 и Arduino UNO ===www.aquaforum.ua===
К сожалению что-то не так, на старом коде все диоды работали, хоть и часто переключались на гранях, в новом же работает согласно параметрам только 1 диод LEDWarning 12, остальные просто еле-еле моргают. Проверял все контакты - всё ок, так как тут же заливаю старый скетч - работает на ура.
Последний раз редактировалось Сергій М; 27.09.2017 в 21:14..
|
|
|
26.03.2018, 21:47
|
#20
|
Я тут недавно
Регистрация: 26.03.2018
Адрес: Киев
Сообщений: 1
Поблагодарил(а) : 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ультразвуковой датчик HC-SR04 и Arduino UNO ===www.aquaforum.ua===
Я интересуюсь радиоэлектроникой и вот недавно тестировал такой датчик. В характеристиках указано что он работает от 2 до 400 см. В реальности он работает от 5 см. В общем не буду долго писать вот тут почитайте http://elschemo.ru/dlya-nachinayushh...hikom-hc-sr04/
|
|
|
Реклама помогает развиваться |
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 03:21. Часовой пояс GMT +3.
|