Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

Ứng dụng của nguồn pin năng lượng mặt trời

I. Giới thiệu linh kiện


1. Arduino mega 2560
- Arduino Mega2560 là một vi điều khiển bằng cách sử dụng ATmega2560.

- Bao gồm:
 54 chân digital (15 có thể được sử dụng như các chân PWM)
 16 đầu vào analog,
 4 UARTs (cổng nối tiếp phần cứng),
 1 thạch anh 16 MHz,
 1 cổng kết nối USB,
 1 jack cắm điện,
 1 đầu ICSP,
 1 nút reset.
 Arduino Mega 2560 có sơ đồ linh kiện như các hình sau đây (hơi nhiều
chân)
 5 Chân GND
 3 chân 5V
 1 chân 3.3v
 1 nút reset
 16 chân analog
 4 chân UART
 54 Chân digital trong đó có 15 chân chúng ta có thể sử dụng như PWM
 6 Chân lập trình ISP

Và nhiều thành phần khác...

2. ESP8266 WIFI NodeMCU


ESP8266 NodeMCU là một nền tảng IoT mã nguồn mở, được phát triển bởi
một nhóm kỹ sư tại Trung Quốc. Nền tảng này được xây dựng trên ESP8266,
một vi điều khiển Wi-Fi SoC (System on a Chip) được sản xuất bởi Espressif
Systems. NodeMCU cung cấp một bộ SDK để lập trình cho ESP8266 bằng
ngôn ngữ Lua hoặc C++. Với các tính năng như Wi-Fi, GPIO, ADC, I2C, SPI,
PWM và một số tính năng khác, NodeMCU ESP 8266 được sử dụng rộng rãi
trong các ứng dụng IoT như kiểm soát thiết bị, thu thập dữ liệu và giao tiếp với
các thiết bị khác.

Thông số kỹ thuật của NodeMCU


 Microcontroller: ESP8266EX
 Điện áp hoạt động: 3.3V DC
 Số chân I/O: 17 chân GPIO
 Kết nối mạng: WiFi 802.11 b/g/n
 Giao diện mạng: TCP/IP
 Đồng hồ thời gian thực (RTC): không tích hợp
 Bộ nhớ trong: 4MB
 RAM: 80KB
 Cổng nạp: Micro-USB
 Hỗ trợ các giao thức: MQTT, CoAP, HTTP/HTTPS
 Kích thước: 49 x 24.5 x 13mm
3. Khóa 12V

4. Quạt 12V
5. Modul relay 5V

6. Modul cảm biến khí gas

7. Còi buzzer

8. Ds1307
9.
10.LCD 1602 + I2C
II. Ứng dụng
- Khi sử dụng nguồn điện được chuyển hóa, bạn có thể điều khiển các thiết bị
từ xa một cách thuận tiện thông qua ứng dụng Blynk trên Internet.

- Cấp nguồn cho LCD và Ds1307 để hiển thị thời gian thực:
III. Code Tham Khảo
- ESP8266:
 #define BLYNK_TEMPLATE_ID "TMPL61iiuTHm9"
 #define BLYNK_TEMPLATE_NAME "Cambienanhsang"
 #define BLYNK_AUTH_TOKEN "1pFBZz2FI_I08W-L5GHeBcawVRyvGA2t"

 #include <ESP8266WiFi.h>
 #include <BlynkSimpleEsp8266.h>

 #define Khoa D0 // Khóa
 #define Quat D1 // Quạt

 char auth[] = "1pFBZz2FI_I08W-L5GHeBcawVRyvGA2t";
 char ssid[] = "Trung123";
 char pass[] = "trung123";

 WidgetLED LED_KETNOI(V0);
 unsigned long timeT = millis();

 void setup() {
 Serial.begin(9600);
 Blynk.begin(auth, ssid, pass);
 pinMode(D0, OUTPUT);
 pinMode(D1, OUTPUT);
 ////
 delay(10);
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);
 WiFi.begin(ssid, pass);
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");
 }
 randomSeed(micros());
 Serial.println("");
 Serial.println("WiFi connected");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
 }

 unsigned long timeUpdata=millis();
 void loop() {
 //Chương trình điều khiển LED KET NOI chớp tắt mỗi giây
 if(millis()-timeT>1000)
 {
 if(LED_KETNOI.getValue()) LED_KETNOI.off();
 else LED_KETNOI.on();
 timeT=millis();
 }

 if (Serial.available()) {
 String receivedData = Serial.readStringUntil('\n'); // Đọc dữ liệu từ
cổng serial mềm đến khi gặp ký tự xuống dòng

 if (receivedData.startsWith("Gas:"))
 {
 float gasValue = receivedData.substring(4).toFloat(); // Lấy giá trị
cảm biến gas từ dữ liệu nhận được
 Blynk.virtualWrite(V2, gasValue); // Gửi giá trị gas lên Blynk
 }
 else {
 Serial.println("Dữ liệu không hợp lệ");
 }
 }

 Blynk.run();
 }

 BLYNK_CONNECTED()
 {
 Blynk.syncAll(); //Đồng bộ data từ server xuống esp khi kết nối
 }

 BLYNK_WRITE(V3) // Cửa
 {
 int t = param.asInt();
 digitalWrite(D0, t);
 }

 BLYNK_WRITE(V1) // Quạt
 {
 int t = param.asInt();
 digitalWrite(D1, t);
 }
- Anduino Mega 2560:
 #include <SoftwareSerial.h>
 #include <Wire.h>
 #include <RTClib.h>
 #include <AccelStepper.h>
 #include <LiquidCrystal_I2C.h>

 #define Rx 11 // Định nghĩa chân 11 là Rx
 #define Tx 12 // Định nghĩa chân 12 là Tx
 #define GasSensorPin A1 // Chân analog cảm biến khí gas
 #define Coi 2 // Chân digital của Còi

 LiquidCrystal_I2C lcd(0x27, 16, 2); // Địa chỉ của màn hình LCD I2C và
kích thước của nó (16x2)

 RTC_DS1307 rtc;

 SoftwareSerial mySerial(Rx, Tx); // Khởi tạo cổng serial mềm
 int gasValue = 0; // Biến lưu trữ giá trị cảm biến khí gas

 void setup() {
 // Khởi tạo màn hình LCD
 lcd.init();
 lcd.backlight();
 lcd.setCursor(0, 0);
 lcd.print("RTC & Steppers");

 Wire.begin();
 rtc.begin();

 if (!rtc.isrunning()) {
 rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
 }

 Serial.begin(9600);
 mySerial.begin(9600);
 pinMode(Coi, OUTPUT);
 }

 void loop() {
 ////////////////////////////////////
 DateTime now = rtc.now();

 // Hiển thị thời gian lên màn hình LCD
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Time: ");
 if (now.hour() < 10) {
 lcd.print('0'); // Thêm số 0 đằng trước nếu giờ nhỏ hơn 10
 }
 lcd.print(now.hour(), DEC);
 lcd.print(':');
 if (now.minute() < 10) {
 lcd.print('0'); // Thêm số 0 đằng trước nếu phút nhỏ hơn 10
 }
 lcd.print(now.minute(), DEC);
 lcd.print(':');
 if (now.second() < 10) {
 lcd.print('0'); // Thêm số 0 đằng trước nếu giây nhỏ hơn 10
 }
 lcd.print(now.second(), DEC);

 lcd.setCursor(0, 1);
 lcd.print("Date: ");
 lcd.print(now.day(), DEC);
 lcd.print('/');
 lcd.print(now.month(), DEC);
 lcd.print('/');
 lcd.print(now.year(), DEC);

 delay(1000);
 ////////////////////////////////////
 gasValue = analogRead(GasSensorPin); // Đọc giá trị từ cảm biến
khí gas
 mySerial.print("Gas:"); // Gửi giá trị cảm biến khí gas
qua serial
 mySerial.println(gasValue);

 if (gasValue > 500)
 {
 digitalWrite(Coi,1);
 delay(100);
 digitalWrite(Coi,0);
 delay(100);
 }

 delay(50); // Đợi 50ms trước khi lặp lại
 }

You might also like