- Компоненти
- Ултразвуков сензорен модул
- Работа на автоматичен контролер за нивото на водата
- Електрическа схема и обяснение
- Програмиране
В този базиран на Arduino автоматичен проект за индикатор за ниво на водата и контролер ще измерим нивото на водата с помощта на ултразвукови сензори. Основният принцип на ултразвуковото измерване на разстоянието се основава на ECHO. Когато звуковите вълни се предават в околната среда, те се връщат обратно към изхода като ECHO след удряне по някакво препятствие. Така че трябва да изчислим само времето за пътуване на двата звука, означава изходящо време и време за връщане към изхода след нанасяне на препятствие. И след известно изчисление можем да получим резултат, който е разстоянието. Тази концепция се използва в нашия проект за воден контролер, където водната моторна помпа се включва автоматично, когато нивото на водата в резервоара стане ниско. Можете също да проверите тази проста схема на индикатора за нивото на водата за по-опростена версия на този проект.
Компоненти
- Arduino Uno
- Ултразвуков сензорен модул
- 16x2 LCD
- Реле 6 Волта
- ULN2003
- 7806
- PVT
- Меден проводник
- 9 волта батерия или 12 волтадаптора
- Свързващи проводници
Ултразвуков сензорен модул
Ултразвуковият сензор HC-SR04 се използва за измерване на разстоянието в диапазон от 2cm-400cm с точност до 3mm. Сензорният модул се състои от ултразвуков предавател, приемник и контролна верига.
Ултразвуковият сензорен модул работи върху природния феномен на ECHO на звука. Изпраща се импулс за около 10us, за да задейства модула. След което модулът автоматично изпраща 8 цикъла от 40 KHz ултразвуков сигнал и проверява ехото му. Сигналът след удар с препятствие се връща обратно и се улавя от приемника. По този начин разстоянието на препятствието от сензора просто се изчислява по формулата, дадена като
Разстояние = (време х скорост) / 2.
Тук сме разделили произведението на скоростта и времето на 2, защото времето е общото време, необходимо за достигане на препятствието и връщане обратно. По този начин времето за достигане на препятствие е само половината от общото време.
Работа на автоматичен контролер за нивото на водата
Работата по този проект е много проста, използвахме ултразвуков сензорен модул, който изпраща звуковите вълни във водния резервоар и открива отражение на звукови вълни, което е ECHO. На първо място трябва да задействаме ултразвуковия сензорен модул за предаване на сигнал чрез Arduino и след това да изчакаме да получим ECHO. Arduino отчита времето между задействането и получената ECHO. Знаем, че скоростта на звука е около 340 m / s. така че можем да изчислим разстоянието с помощта на дадената формула:
Разстояние = (време за пътуване / 2) * скорост на звука
Когато скоростта на звука е приблизително 340 м в секунда.
Чрез използването на тези методи получаваме разстояние от сензора до водната повърхност. След него трябва да изчислим нивото на водата.
Сега трябва да изчислим общата дължина на резервоара за вода. Тъй като знаем дължината на резервоара за вода, тогава можем да изчислим нивото на водата, като извадим полученото разстояние от ултразвука от общата дължина на резервоара. И ще получим разстоянието на нивото на водата. Сега можем да преобразуваме това ниво на водата в процент на водата и да го покажем на LCD. Работата на пълния проект за индикатор за нивото на водата е показана в долната блок-схема.
Електрическа схема и обяснение
Както е показано в схемата за контрол на нивото на водата, дадена по-долу, щифтовете за задействане и ехо на ултразвуковия сензор са директно свързани към щифтове 10 и 11 на arduino. LCD 16x2 е свързан с arduino в 4-битов режим. Контролният щифт RS, RW и En са директно свързани към ардуино пин 7, GND и 6. А пинът за данни D4-D7 е свързан към 5, 4, 3 и 2 на ардуино, а зумер е свързан към пин 12. 6 волта реле е също свързан на щифт 8 на arduino чрез ULN2003 за включване или изключване на водната моторна помпа. Регулатор на напрежение 7805 също се използва за осигуряване на 5 волта към релето и към останалата верига.
В тази схема ултразвуковият сензорен модул е поставен в горната част на кофата (резервоар за вода) за демонстрация. Този сензорен модул ще отчете разстоянието между сензорния модул и водната повърхност и ще покаже разстоянието на LCD екрана със съобщение „Водното пространство в резервоара е:“. Това означава, че тук показваме празно място на разстояние или обем за вода, вместо ниво на водата. Поради тази функционалност можем да използваме тази система във всеки резервоар за вода. Когато нивото на празната вода достигне на разстояние около 30 см, тогава Arduino ВКЛЮЧВА водната помпа чрез задвижващо реле. И сега LCD ще покаже „НИСКО ниво на водата“ „Двигателят е ВКЛЮЧЕН“ и светодиодът за състоянието на релето ще започне да свети
Сега, ако празното пространство достигне на разстояние около 12 см. Arduino изключва релето и LCD ще покаже „Резервоарът е пълен“ „Двигателят е изключен“. Звуковият сигнал също издава известно време и светодиодът за състоянието на релето ще се изключи.
Програмиране
За да програмираме Arduino за контролер на нивото на водата, първо дефинираме всички щифтове, които ще използваме в проекта за свързване на външни устройства като реле, LCD, зумер и т.н.
#define trigger 10 #define echo 11 #define motor 8 #define зумер 12
След това инициализираме всички устройства, използвани в проекта.
lcd.begin (16,2); pinMode (спусък, ИЗХОД); pinMode (ехо, INPUT); pinMode (мотор, ИЗХОД); pinMode (зумер, ИЗХОД); lcd.print ("Ниво на водата"); lcd.setCursor (0,1); lcd.print ("Индикатор"); забавяне (2000);
Сега инициализирайте модула на ултразвуковия сензор и прочетете времето за изпращане и получаване на ултразвукови вълни или звук, като използвате pulseIn (щифт). След това извършете изчисления и покажете резултата на 16x2 LCD, като използвате подходящи функции.
digitalWrite (спусък, HIGH); delayMicroseconds (10); digitalWrite (спусък, LOW); delayMicroseconds (2); време = pulseIn (ехо, HIGH); разстояние = време * 340/20000; lcd.clear (); lcd.print ("Водно пространство в"); lcd.setCursor (0,1); lcd.print ("Резервоарът е:"); lcd.print (разстояние); lcd.print ("Cm");
След него проверяваме условията дали резервоарът за вода е пълен или нивото на водата е НИСКО и предприемаме съответните действия.
if (разстояние <12 && temp == 0) {digitalWrite (мотор, LOW); digitalWrite (зумер, HIGH); lcd.clear (); lcd.print ("Воден резервоар пълен"); lcd.setCursor (0,1); lcd.print ("Motor Off OFF"); забавяне (2000); digitalWrite (зумер, LOW); забавяне (3000); temp = 1; } else if (разстояние <12 && temp == 1) {digitalWrite (мотор, LOW); lcd.clear (); lcd.print ("Воден резервоар пълен"); lcd.setCursor (0,1); lcd.print ("Motor Off OFF"); забавяне (5000); }