SƠ ĐỒ NGUYÊN LÝ:
·
Khối nguồn: sử dụng điện áp 12V DC từ Adapter,
sau đó dùng module LM2596 để giảm áp 5V cung cấp cho toàn hệ thống.
·
Khối hiển thị: sử dụng màn hình LCD 20x4 và
module LCD I2C để giao tiếp với Arduino và hiển thị tất cả thống số.
·
Khối công suất: Sử dụng Module L9110 để điều khiển
2 động cơ bơm, và buzzer 5V để báo nước đầy.
·
Khối cảm biến: Sử dụng cảm biến DHT11, độ đục chất
lỏng, cảm biến PH, Phao nước… để gửi dữ liệu về Arduino xử lí.
·
Khối xử lí trung tâm: Đọc và sử lí tất cả dữ liệu
từ cảm biến trả về và xuất ra màn hình, điều khiển bơm và giao tiếp gửi dữ liệu
sang Node MCU.
·
Khối gửi dữ liệu lên internet: Nhận data từ
Arduino Nano và xử lí tách chuỗi. Sau đó gửi các giá trị lên Blynk Server để
app đọc được data.
#include <DHT.h>
#include <Wire.h>
#include
<LiquidCrystal_I2C.h>
#include
<SoftwareSerial.h>
SoftwareSerial
Serial2(2,3);
#include
<Servo.h>
Servo servo;
#define phao 5 // D5
#define coi 6 // D6
#define DHTPIN 4 // D4
#define PHSensor A0
#define doduc A1
#define motorin A2 //
on: high
#define motorout A3 //
on: low
#define pump 7 //
LiquidCrystal_I2C
lcd(0x27, 16, 2);
#define DHTTYPE DHT11
DHT dht(DHTPIN,
DHTTYPE);
int bom, chedo;
float PH;
int h, t, value;
unsigned long int
avgValue;
float b;
int buf[10], temp;
String A,B,C,D;
byte abc[]={
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000};
void Sensor() {
h = dht.readHumidity();
t = dht.readTemperature();
value= map(analogRead(doduc),0,1023,0,100);
if ( value>98){
value= 98;
}
if (digitalRead(pump) == 1 &&
value> 85) {
digitalWrite(motorin, 1);
lcd.setCursor(13, 0);
lcd.print("OFF");
}
else if (digitalRead(pump) == 0 || value <85)
{
digitalWrite(motorin, 0);
lcd.setCursor(13, 0);
lcd.print("ON ");
}
for (int i = 0; i < 10; i++) //lấy mẫu của
10 lần
{
buf[i] = analogRead(PHSensor);
delay(10);
}
for (int i = 0; i < 9; i++) //sắp xếp giá
trị từ nhỏ đến lớn
{
for (int j = i + 1; j < 10; j++)
{
if (buf[i] > buf[j])
{
temp = buf[i];
buf[i] = buf[j];
buf[j] = temp;
}
}
}
avgValue = 0;
for (int i = 2; i < 8; i++) //Lấy số trung bình của 6 lần đo
avgValue += buf[i];
float phValue = (float)avgValue * 5.0 / 1024
/ 6; //Chuyển từ Analog sang milivol
PH = 3.5 * phValue; //Chuyển Milivol sang độ PH
A=String(value);
B=String(t);
C=String(h);
D=String(PH);
A+=B;
A+=C;
A+=D;
lcd.setCursor(4, 1);
lcd.print(value);
lcd.setCursor(12, 1);
lcd.print(t);
lcd.setCursor(3, 0);
lcd.print(PH, 1);
}
void mucnuoc() {
if (digitalRead(phao) == 1 ) {
digitalWrite(coi, 0);
digitalWrite(motorout, 0);
}
else {
digitalWrite(coi, 1);
digitalWrite(motorout, 1);
}
}
void setup()
{
Serial.begin(9600);
Serial2.begin(9600);
servo.attach(12);
servo.write(90);
lcd.init();
lcd.backlight();
lcd.createChar(0,abc);
pinMode(coi, OUTPUT);
pinMode(motorin, OUTPUT);
pinMode(motorout, OUTPUT);
pinMode(phao, INPUT_PULLUP);
pinMode(pump, INPUT);
pinMode(doduc, INPUT_PULLUP);
digitalWrite(coi, 0);
digitalWrite(motorin, 1);
dht.begin();
lcd.setCursor(0, 0);
lcd.print(" De tai:
");
lcd.setCursor(0, 1);
lcd.print("Be Ca Thong Minh");
delay(5000);
lcd.setCursor(0, 0);
lcd.print("Nguyen Hoai Nam ");
lcd.setCursor(0, 1);
lcd.print("Mssv: 2202180036");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PH: Bom:OFF");
lcd.setCursor(0, 1);
lcd.print("NTU: %
T: C");
lcd.setCursor(14, 1);
lcd.write(abc);
}
void loop()
{
Sensor();
mucnuoc();
Serial2.println(A);
Serial.println(A);
delay(1000);
}
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút hiện ra ở góc phải phía trên, nhấn vào để đến trang download
------------------------------------------------------------------------------------
DV1 - NHẬN VẼ MẠCH - LẬP TRÌNH 8051/ARDUINO/STM LẤY TRONG NGÀY
BẤM XEM CÁCH ĐẶT HÀNG TẠI ĐÂY
-----------------------------------------------------------------------------------
DV2 - Mua linh kiện về làm mạch nhanh - Miễn phí Ship
DV3 - Kênh youtube chia sẻ kiến thức điện tử thực hành ngay
DV4 - Kênh cộng đồng Facebook Điện Tử ChipKool
CÔNG TY ECHIPKOOL - UY TÍN - CHẤT LƯỢNG - NHANH CHÓNG - BẢO MẬT