Professional Documents
Culture Documents
Trang 0
Trang iii
Trang 1
Trang 0
Chƣơng 1:TỔNG QUAN
1.1. Đặt vấn đề.
Khí hậu là một yếu tố quan trọng hàng đầu đối với vi c phát triển nông nghi p
ở Vi t Nam, một đất nước vẫn còn tới trên 70% dân số sống bằng nghề nông. Đặc
bi t, dưới tác động của biến đổi khí hậu hi n nay mà Vi t Nam sẽ là một trong 5
nước bị ảnh hưởng nghiêm trọng nhất, vi c phòng chống, cảnh báo và ứng phó với
những hi n tượng thời tiết bất thường, đảm bảo cho sự phát triển bền vững của
ngành nông lâm nghi p đóng vai trò rất quan trọng.
Tr m theo d i thời tiết có nhi m v lưu trữ các giá trị thời tiết như nhi t độ ,
lượng mưa, tốc độ gió, hướng gió và áp suất không khí theo chu k thời gian nhất
định và lưu giá trị với định d ng file excel theo ngày tháng và n m, thuận ti n cho
vi c thống kê thời tiết.
1.2. Đối tƣợng và phạm vi nghiên cứu:
Theo d i thời tiết, lưu trữ các thông số giá trị của thời tiết thông qua th nhớ
bằng file excel ti n lợi cho vi c thống kê. Các file được lưu theo thời gian thực và
tên theo ngày tháng, d dàng cho vi c chọn file và xuất biểu đ bằng abview.
Trên mức độ nghiên cứu và làm quen với khí tượng thu v n đề tài bao g m:
0 quặng đo lượng mưa, 01 thiết bị đo tốc dộ gió tự thiết kế, 01 thiết bị xác định
hướng gió, 01 cảm biến đo áp xuất và nhi t độ không khí.
1.3. Phƣơng pháp nghiên cứu:
Thực hi n đề tài bằng thực nghi m, tìm hiểu các cơ sở lí thuyết về lưu trữ dữ
li u trên sách báo, trên m ng internet. T đó nghiên cứu thiết kế ra sản phẩm thực
tế.
1.4. Ý nghĩa khoa học và thực tiễn của đề tài:
Với xu thế biến đổi khí hậu thế giới nói chung và Vi t Nam nói riêng, lưu
trữ thời tiết là một nhu cầu cấp thiết cho vi c theo d i và dự báo thời tiết, đ ng thời
phòng tránh thiên tai. Đối với nông nghi p thì có thể ch m sóc cây tr ng, vật nuôi
theo t ng điều ki n thời tiết hằng ngày dựa trên số li u thời tiết m i n m.
Có thể l p đặt t i nhà, vì giá thành r , s d ng các công t c t thay thế cho
các cảm biến đ t tiền.
Trang 1
Chƣơng 2: CƠ SỞ LÝ THUYẾT
2.1. Arduino Uno R3
Trang 2
Dung lượng bộ nhớ Flash: 32 KB, 0.5 KB used by bootloader.
SRAM: 2 KB
EEPROM: 1 KB
Tốc độ th ch anh: 6 MHz
2.2. Arduino Data Logging Shield
Trang 3
Tương thích với Arduino Uno, eonardo, Mega 2560 R3, Mega ADK R3,...
2.3 C ng tắc t .
Công t c t lo i thường mở 4x2 mm . nó có kích thước nhỏ gọn và trọng
lượng nh có thể được l p đặt trong không gian h n chế, rất thích hợp cho các thiết
bị thu nhỏ.
Hình 2.3:
Thông số kỹ thuật:
- Tổng Chiều Dài 44 mm.
- Chiều Dài càng kính: 14 mm.
- Thủy tinh Đường Kính 2 mm.
- Công suất tối đa 0 Wát.
- Đi n áp cao 250VDC.
- Chuyển đổi nhi t độ tối đa 0.5A.
- Tải trọng tối đa .0A.
- Thời gian hành động .0 ms.
- Độ nảy thời gian 0.6 ms.
- Thời Gian phát hành 0.4 ms.
- Đáp ứng tần số 4000Hz.
Trang 4
- Tối đa tần số ho t động 500Hz.
2.4 Cảm i n BMP 1 0
Cảm biến áp suất BMP 80 đo áp suất của môi trường s d ng áp kế số. Bằng
cách chuyển đổi áp suất thành độ cao tương ứng, b n có thể dùng cho vi c xác định
độ cao của robot, máy bay hay một vật thể được phóng lên cao.
Cảm biến BMP 80 có thể đo được áp suất trong dải 300 ~ 00hPa, thiết bị
chỉ ho t động với dòng đi n nhỏ khoảng 0.3uA thích hợp cho các thiết bị s d ng
Pin.
Cảm biến đi kèm bộ hi u chỉnh và sẵn sàng cho vi c s d ng. Giao tiếp
chuẩn I2C đã có trở kéo lên sẵn trên Board thuận ti n cho vi c s d ng. S d ng
I2C, thiết bị cung cấp áp suất và nhi t độ lên đến 6bits.
Trang 5
Chƣơng 3: THIẾT KẾ VÀ THI CÔNG
3.1. Sơ đ ngu ên .
Hình 3.1:
3.2. Sơ đ khối.
Khối Ngu n
Khối
Cảm biến Khối x lí trung tâm Khối lưu trữ
Hình 3.2. k ố.
Trang 6
3.3. Chức năng và nhiệm vụ t ng khối.
Khối ngu n:
- Điều khiển t t mở ngu n.
- Ổn định ngu n và cung cấp ngu n cho các tải tiêu th .
- Ngu n 5V dòng tối đa 3A đảm bảo đủ tải cho toàn bộ mô hình.
Khối cảm biến:
- Duy trì và truyền tín hi u về khối x lí trung tâm.
- Khối bao g m cảm biến BMP 180.
Khối x lí trung tâm .
- Giao tiếp với các khối còn l i.
- Nhận tín hi u t khối cảm biến.
- X lí và truyền vào khối lưu trữ.
Trang 7
3.4. Lƣu đ giải thuật.
Khởi ch y RTC
Thành công
T o file
Thất b i
Thành công
ưu vào file
Kết thúc
ngày
Hình 3.3. Lư ậ.
Giải thích:
- Khi chương trình ho t động Arduino sẽ kiểm tra m ch thời gian thực và th
nhớ SD. Nếu th SD chưa được c m vào thì d ng chương trình , sau khi th SD
Trang 8
khởi động xong sẽ tiến hành t o file. File được t o có tên là N- -T- - với phía sau N
là thời gian ngày và tháng ch y theo thời gian thực. Khi quá trình tiến hành hết 0
ngày sẽ tự động Reset.
- Khi file đã được t o xong và sẵn sàng để lưu dữ li u Arduino sẽ tiến hành
đọc giá trị của cảm biến. Nếu quá trình đọc giá trị cảm biến thất b i chương trình sẽ
quay l i bước đọc giá trị cảm biến, ngược l i khi giá trị cảm biến được di n ra hoàn
tất thì b t đầu lưu dữ li u vào file đã t o trước đó.
- Chu k đọc, lưu giá trị cảm biến được thực hi n 5 giây lần.
3.5 ng ụng v i uđ Lapvi w .
Để thuận ti n cho vi c theo dỏi thời tiết thì biểu đ là một trong những công c
quan trọng cho vi c đó, vì vậy ra đời ứng d ng vẽ biểu đ là một nhu cầu cấp thiết cho
cho người quan sát theo d i thời tiết.
Vận d ng các kiến thức đã học ở học kì môn điều khiển và đo lường bằng máy
tính ứng d ng vẽ biểu đ là sản phẩm để vẽ biểu đ theo ngày tháng và theo các cột
trong file excel được arduino lưu l i.
Hình 3.4:
Trang 9
3.6. K t cấu đo tốc đ gi ƣợng mƣa và hƣ ng gi .
3.6.1. K t cấu đo tốc đ gi
Hình 3.5: ậ ố
- Với kết cấu 3 muổng hứng gió được cách đều nhau t o thành hướng quay
cố định chỉ theo chiều khi có gió tác động. Bán kính t tâm đến muổng là 0.065
mét, thời gian lấy mẫu m i 5 giây lần, mô hình đo gió với công thức:
V(km h) số vòng x bán kính x 2pi x 2 x 60 ÷ 000 x (sai số)
- Phần thiết kế cơ khí bằng nhựa in 3D nh kết hợp với vòng bi siêu nhỏ
giảm tối đa lực ma sát.
- Sai số là hằng số chênh l ch giữa máy đo gió thực tế với mô hình, độ chính
xác của mô hình tương đương máy đo Hot-Wire Air Velocity Meter.
Trang 10
Hình 3.6
3.6.2. K t cấu đo hƣ ng gi
Hình 3.7: ậ ư
- Với 8 công t c t chia đều theo hình tr đứng bên trong. Đảm bảo khi nam
châm ở giữa hai công t c cả 2 sẽ bật, đều này sẽ t o được 6 trường hợp ứng với 6
hướng gió.
Trang 11
Hình 3.8 ư
3.6.3. K t cấu đo ƣợng mƣa.
Hình 3.9 ư ư
- Bộ phận đo lượng mưa được chia thành 2 phần với thể tích bằng nhau. Thể
tích chứa nước m i lần bậc là 0ml. Tiết di n hứng nước trên bề mặt quặng là
56.7cm2. Công thức tính mực nước mưa:
H (cm) Số lần bậc x 0 ÷ 56.7
Trang 12
Chƣơng 4: KẾT LUẬN
4.1. K t quả đạt đƣợc.
- Tìm hiểu và s d ng được cơ bản cách lưu dữ li u.
- Hiểu được chức n ng và ứng d ng của cảm biến nhi t độ và áp suất
BMP180.
- Tìm hiểu và thiết kế được mô hình.
- ập trình trên labview t o giao di n vẽ biểu
- H thống ho t động đúng yêu cầu đặt ra.
4.2. Ƣu/khu t đi m.
Ưu điểm:
- Mô hình ho t động ổn định.
- Vận d ng linh ki n cơ bản để t o mô hình phức t p.
- Thiết kế các mô hình đo bằng nhựa t máy in 3D độ bền cao.
- H thống có thể tháo lấp d dàng.
- Mô phỏng được quá trình ho t động của một h thống theo d i thời tiết.
- Có phần giao di n vẽ biểu đ ti n lợi trong vi c quan sát theo d i.
Khuyết điểm:
- Chưa có độ chính xác tuy t đối, gió là đ i lượng vật l rất tương đối khó
kiểm chứng.
- Phần giao di n vẽ biểu đ chưa vẽ được trung bình của tháng.
4.3. Hƣ ng phát tri n của đề tài.
- Cải thi n thiết kế cơ khí để giống với h thống thực bên ngoài.
- Nâng cao độ chính xác.
- Kết hợp thêm nhiều cảm biến để nâng cấp như một khí tượng thu v n.
- àm thêm đưa dữ li u lên web để ti n cho vi c theo d i t xa.
Trang 13
TÀI LIỆU THAM KHẢO
Trang 14
PHỤ LỤC
Code arduino:
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_BMP085.h>
const int chipSelect = 10;
File logfile;
RTC_DS1307 RTC;
int e,g,c,show = 0,error = 0,pointer = -1,revolutions = 0,rps = 0;
byte direct = 1;
char* compass[] = {"N ", "NNE", "NE ", "NEE", "E ", "SEE", "SE ",
"SSE", "S ", "SSW", "SW ", "SWW", "W ", "NWW", "NW ",
"NNW","???"};
float radius = 0.065,rainfall2,kmph;
double rainfall = 0;
const unsigned long CHU_KY_1 = 5000UL;
unsigned long chuky1 = 0;
double temperature = 0.0;
double barometer = 0.0;
Adafruit_BMP085 bmp;
void setup()
{ pinMode( 4, INPUT_PULLUP);
pinMode( 5, INPUT_PULLUP);
pinMode( 6, INPUT_PULLUP);
pinMode( 7, INPUT_PULLUP);
pinMode( 8, INPUT_PULLUP);
Trang 15
pinMode( 9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
attachInterrupt(0, rps_fan, FALLING);
pinMode(3, INPUT_PULLUP);
attachInterrupt(1, tipbuckets, FALLING);
bmp.begin();
Serial.begin(9600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()){
RTC.adjust(DateTime(__DATE__, __TIME__));}
pinMode(SS, OUTPUT);
if (!SD.begin(chipSelect)) {
delay(3000);
asm volatile ( "jmp 0"); }
DateTime now = RTC.now();
c = (now.minute());
e = c/2 +1;
g = (now.hour());
char filename[] = "N00T00.csv";
filename[1] = (e/10)+'0';
filename[2] = (e%10)+'0';
filename[4] = (g/10)+'0';
filename[5] = (g%10)+'0';
if (!SD.exists (filename))
{ logfile = SD.open(filename, FILE_WRITE);
logfile.print(" ");
Trang 16
logfile.println("Date,Time,Nhietdo(C),Tocdogio(m/s),Huonggio,Luongmua(
ml),Apsuat(Pa)" );}
else {logfile = SD.open(filename, FILE_WRITE);}
Serial.println(filename);
}
void loop() {
String dataString = "";
DateTime now = RTC.now();
if (e == now.minute()/2)
{ asm volatile ( "jmp 0");}
if (millis() - chuky1 > CHU_KY_1) {
rps = revolutions;
revolutions = 0;
chuky1 = millis();
direct = (((PINB & B00001111) << 4) | ((PIND & B11110000) >> 4)) ^
B11111111;
switch (direct) {
case 1://00000001
pointer = 0;
break;
case 3://00000011
pointer = 1;
break;
case 2://00000010
pointer = 2;
break;
case 6://00000110
pointer = 3;
break;
Trang 17
case 4://00000100
pointer = 4;
break;
case 12://00001100
pointer = 5;
break;
case 8://00001000
pointer = 6;
break;
case 24://00011000
pointer = 7;
break;
case 16://00010000
pointer = 8;
break;
case 48://00110000
pointer = 9;
break;
case 32://00100000
pointer = 10;
break;
case 96://01100000
pointer = 11;
break;
case 64://01000000
pointer = 12;
break;
case 192://11000000
pointer = 13;
break;
Trang 18
case 128://10000000
pointer = 14;
break;
case 129://10000001
pointer = 15;
break;
default:
pointer = 16;//???
break;
}
if (rps != -1) { //Update every 5 seconds, this will be equal to reading
frequency (Hz)x5.
kmph = rps * 3.1414 * 2 * radius * 12 * 60 / 1000; // sô
vong*2pi*r*12*60 van toc km/h
temperature = (double)bmp.readTemperature(); //internal temperature
barometer = (double)bmp.readPressure() / 100.0; //Pa reduced to mBar
logfile.print(" ");
logfile.print(now.year(), DEC);
logfile.print('-');
logfile.print(now.month(), DEC);
logfile.print('-');
logfile.print(now.day(), DEC);
logfile.print(",");
logfile.print(now.hour(), DEC);
logfile.print('-');
logfile.print(now.minute(), DEC);
logfile.print('-');
logfile.print(now.second(), DEC);
logfile.print(",");
logfile.print(temperature,1);
Trang 19
logfile.print(',');
logfile.print(kmph,2);
logfile.print(',');
logfile.print(compass[pointer]);
logfile.print(',');
logfile.print(rainfall2,2);
logfile.print(',');
logfile.print(barometer,0);
logfile.print(',');
logfile.println(dataString);
logfile.flush();
}}}
void rps_fan() {
revolutions++;}
void tipbuckets() {
rainfall++;//the tich moi lan bac la 10ml
rainfa ll2 = rainfall*10/56.7;}
Trang 20