МІНІСТЕРСТВО НАУКИ ТА ОСВІТИ УКРАЇНИ
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
РАДІОЕЛЕКТРОНІКИ
Звіт з лабораторної роботи №4
по предмету «Програмування Embedded System»
за темою:”ДОСЛІДЖЕННЯ АРХІТЕКТУРИ ARDUINO UNО 3 ДЛЯ УПРАВЛІННЯ СИСТЕМОЮ РОЗУМНОГО ПОЛИВУ НА ОСНОВІ ДАТЧИКА ВОЛОГОСТІ ГРУНТУ WAVESHARE 9527”
Харків
Мета роботи: Дослідження архітектури ARDUINO UNО 3. Створення проекту в середовищі моделювання AUTODESK TINKERCAD на основі MCU ATmega 328P, з метою управління системою розумного поливу на основі датчика вологості грунту WAVESHARE 9527.
Хід роботи:
Для виконання лабораторної роботи я використовувала:
1) ARDUINO UNО 3.
2) Датчик вологості грунту WAVESHARE 9527.
Сенсор при роботі споживає струм близько 35 мА. Напруга живлення 3,3 -5 В. Сигнал, що повертається при живленні від 5 В: 0 - 4,2 В. Відобразивши ці значення на 10-бітний діапазон, можна скористатися наступними приближениями:
- 0 - 300: сухий грунт;
- 300 - 850: вологий грунт;
- 850 - 1023: датчик в воді.
3)LCD WH1602 - дисплей на основі мікроконтролера - HD44780.
Підключення LCD-дисплея відбувається наступним чином.
- GND - земля (іноді пишуть Vss);
- Vcc - напруга живлення +5 В (іноді пишуть Vdd);
- Vo - напруга контрастності від 0В до + 5В, даний вихід треба підключити до потенціометра, для регулювання;
- RS – вихід, за допомогою якого дисплей визначає, що в нього надходить: дані або команди;
- RW - вихід за допомогою якого, дисплей визначає передавати або отримувати дані;
- E - лінія синхронізації;
- D0 - D7 – шина команд/даних
- LED (+) - через резистор, що обмежує - 300Ом;
- LED (-) - виходи для живлення підсвічування.
Дисплей може працювати в 2-ох режимах:
- режим № 1 - 8-и розрядний (тобто коли, для обміну інформацією використовуються контакти від D0 до D7), дані пересилаються за один такт;
- режим № 2 - 4-х розрядний (для обміну використовуються тільки контакти D4 - D7), в цьому випадку дані пересилаються за 2 такту, спочатку старші 4 біти, потім молодші 4 біти.
4) Мультиметр - 2шт.
5) Потенціометр - 3шт.
6) Датчик рівня води глибиномір T1592.
Характеристики:
- робоча напруга: DC3-5V;
- робочий струм: менш ніж 20 мА;
- тип сенсора: аналоговий;
- зона виявлення: 40 мм x 16 мм;
- робоча температура: 10-30;
- вологість: 10% -90% без конденсації;
- розміри: 62 мм x 20 мм x 8 мм.
Відобразивши ці значення у 5-вольтовому діапазоні, можна скористатися наступними приближениями:
- 0 - 500mV: відсутність води в баку;
- 500mV - 1V: мало води в баку;
- 1V - 4,5V: досить води в баку;
- 4,5V - 5V: верхня межа води в баку.
7) Резістори - 2 шт.
В програмі Autodesk Tinkercad я створила проект з метою управління системою розумного поливу на основі датчика вологості грунту WAVESHARE 9527./
Глибокомір вимірює кількість води в баці та виводить на екран
“Tank is empty” і потім “Tank filling”, коли бак стає порожнім/
Коли грунт сухий на екран виведено інформацію “Watering”/
Коли грунт вологий, то на екран виведено “watering rejected”/
Програма написана мовою C++, з використанням бібліотеки
LiquidCrystal().
// подключаем библиотеку
#include <LiquidCrystal.h>
// инициализируем библиотеку с номерами
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup() {
// вводим LCD номера колонок и рядов:
lcd.begin(16, 2);
}
void loop() {
float voltage;
// ставим курсор в колонку 0, линию 1
lcd.setCursor(0,0);
//очищаем экран
clearScreen();
//ставим курсор в столбик 4, рядок 0
lcd.setCursor(4,0);
lcd.print("SPzm20-01");
lcd.setCursor(0,1);
lcd.print("Pushkar O.O.");
delay(1000);
clearScreen();
while(true){
amountWater();
showWaterGrade();
showSoilMoisture();
watering();
delay(300);
}
}
void clearScreen(){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
}
void watering(){
if(getSoilMoisture() < 300.0){
clearScreen();
digitalWrite(8, 5);
lcd.setCursor(0,1);
lcd.print("watering");
for(int i = 0; i < 3; i++){
delay(500);
lcd.print(".");
}
}
else if(getSoilMoisture() > 300.0){
clearScreen();
digitalWrite(8, 5);
lcd.setCursor(0,1);
lcd.print("watering rejected");
for(int i = 0; i < 3; i++){
delay(500);
lcd.print(".");
}
digitalWrite(8, 0);
clearScreen();
}
}
void amountWater(){
float level = getWaterGrade();
if(level < 1.0){
clearScreen();
digitalWrite(8, 5);
lcd.setCursor(0,1);
lcd.print("Tank is empty");
delay(500);
boolean motorIsWorking = true;
while(level < 4.5){
lcd.setCursor(0,1);
lcd.print("tank filling");
level = getWaterGrade();
delay(300);
}
motorIsWorking = false;
digitalWrite(8, 0);
clearScreen();
}
}
void showWaterGrade(){
float value = getWaterGrade();
lcd.setCursor(7,1);
lcd.print(value);
}
void showSoilMoisture(){
lcd.setCursor(7,0);
float moisture = getSoilMoisture();
lcd.print(moisture,1);
}
float getWaterGrade(){
float value = analogRead(0);
value = value/200;
return value;
}
float getSoilMoisture(){
float moisture = analogRead(1);
return moisture;
}
Висновок
Виконавши лабораторну роботу, я розглянула архітектуру ARDUINO UNО 3. І створила проект в середовищі моделювання AUTODESK TINKERCAD на основі MCU ATmega 328P, з метою управління системою розумного поливу на основі датчика вологості грунту WAVESHARE 9527.