Professional Documents
Culture Documents
Ứng dụng của nguồn pin năng lượng mặt trời
Ứng dụng của nguồn pin năng lượng mặt trời
- 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
4. Quạt 12V
5. Modul relay 5V
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
}