Tải bản đầy đủ (.pdf) (22 trang)

kỹ thuật lập trình cơ điện tử nghiên cứu thiết kế hệ thống chăm sóc cây cỏ tự động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.2 MB, 22 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

TRƯỜNG CƠ KHÍ

KHOA CƠ ĐIỆN TỬ

---*---KỸ THUẬT LẬP TRÌNHCƠ ĐIỆN TỬ

Đề tài:

Nghiên cứu thiết kế Hệ thống chăm sóc cây cỏ tự động

Giáo viên hướng dẫn: TS. Trương Công Tuấn Sinh viên thực hiện:

Đinh Văn Tuấn – 20184651Nguyễn Văn Đức – 20184395Nguyễn Đình Ngun - 20184567

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Phân cơng nhiệm vụ:

- Nguyễn Văn Đức: mua và lắp ráp linh kiện, hồn thiện phần cứng, đóng góp ý kiến, tìm kiếm giải pháp, trưởng nhóm

- Đinh Văn Tuấn: thiết kế giao diện, làm phần mềm, hoàn thiện slide, báo cáo, đóng góp ý kiến, tìm kiếm giải pháp

- Nguyễn Đình Nguyên: Làm báo cáo, hỗ trợ tìm kiếm linh kiện, đóng góp ý kiến, tìm kiếm giải pháp

<small>2.ĐỀXUẤT CẢI TIẾN...8</small>

<small>IV.TÀI LIỆU THAM KHẢO... 9</small>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

I. Đặt vấn đề

Hiê Hn nay t愃⌀i các đô th椃⌀ Viê Ht Nam chK yếu sư뀉 dụng các xe bNn chở nươꄁc đP tươꄁi cây cho giải phân cách hoă Hc nhân viên chăm sóc cây trong cáccông viên tươꄁi cây bQng các Āng nươꄁc. Điều này gây ra sư뀣 thiếu hiê Hu quả, đă Hc biê Ht như lượng nươꄁc chở bQng xe bNn không được nhiều, t Ān thơꄀi gian chi ph椃Ā di chuyPn, lượng nươꄁc tươꄁi chỗ thư뀀a chỗ thiếu. Ch椃Ānh vì vâ Hy viê Hc lắphê H th Āng tươꄁi tư뀣 đô Hng là mô Ht giải pháp hiê Hu quả mang l愃⌀i nhiều lợi 椃Āch. Trên thư뀣c tế ở trong nươꄁc đX có sư뀉 dụng mơ hình tươꄁi tư뀣 đô Hng nhưng chưa được ứng dụng rô Hng rXi. Các hê H th Āng này chK yếu được lắp đă Ht ở thành ph Ā HN Ch椃Ā Minh. Mô Ht trong s Ā đó là cơng viên Gia Đ椃⌀nh, Qu Āc lộ 22, Xa lộ Hà Nội, tuyến đươꄀng Tân Sơn Nhất - Bình Lợi… Theo ghi nhâ Hn cKa hê H th Āng

tươꄁi nươꄁc ở thành ph Ā HN Ch椃Ā Minh thì chi ph椃Ā tươꄁi nươꄁc t愃⌀i một s ĀđiPm đX giảm hơn 70% so vơꄁi việc điều khiPn bQng tay thơng thươꄀng ngồi cơng trươꄀng. Ơng Mark Walton - Giám đ Āc Walton Group cho biết :"Chi ph椃Āđầu tư một hệ th Āng tươꄁi tư뀣 động hiện nay không thật sư뀣 lơꄁn nếu xem xét yếu t Ā hoàn v Ān sau 2 - 3 năm sư뀉 dụng cũng như tuổi thọ cKa hệ th Āng có thP lên tơꄁi 25 - 30 năm. Hơn nữa chi ph椃Ā duy tu và bảo dưỡng hàng năm không đáng kP". Do đó việc áp dụng hệ th Āng tươꄁi tư뀣 động trong chăm sóc và duy tu mảng xanh t愃⌀i khu đô th椃⌀ sẽ giúp tiết kiệm chi ph椃Ā, an toàn, hiệu quả, đi theo xu thế chung cKa các đô th椃⌀ lơꄁn trên thế giơꄁi trong điều kiện tồn cầu hóa như hiện nay.

II. Kết quả

1. Cấu trúc khối của hệ thống

Giao diện điều khiển

Bộ điều khiển

Module sensorCơ cấu chấp hành

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

2. Tính tốn thiết kế

2.1 Lựa chọn phương án thiết kế các khối hệ thống

- Giảm tải cho quá trình lâ Hp trình lư뀣a chọn thiết kế giao điê Hn điều khiPn bQng windowform trên visual studio vơꄁi ngôn ngữ C#

- ĐP dễ dàng tiếp câ Hn, lâ Hp trình điều khiPn và giảm chi ph椃Ā hê H th Āng demo chọn sư뀉 dụng bô H vi xư뀉 lý Arduino UNO

- Giảm chi ph椃Ā mà vvn giữ được đô H ổn đ椃⌀nh và đô H ch椃Ānh xác, đô H ổn đ椃⌀nh tương đ Āi chọn sư뀉 dụng cảm biến đô H wm đất Soil Moisture Sensor

- Mơ hình demo tương đ Āi nhx và công suất thấp nên cơ cấu chấp hành được chọn là relay 5V và bơm mini 5V

- Đ Āi tượng nghiên cứu ở đây là môi trươꄀng đất xung quanh cây c Āi

2.2 Thông số kỹ thuật- Arduino UNO

Chip điều khiPn ch椃Ānh: ATmega328PChip n愃⌀p và giao tiếp UART: ATmega16U2

NguNn ni m愃⌀ch: 5VDC tư뀀 cổng USB hoặc nguNn ngồi cắm tư뀀 giắc tròn DC

S Ā chân Digital I/O: 14 (trong đó 6 chân có khả năng xuất xung PWM).S Ā chân PWM Digital I/O: 6

S Ā chân Analog Input: 6

Dòng điện DC Current trên mỗi chân I/O: 20 mADòng điện DC Current chân 3.3V: 50 mA

Flash Memory: 32 KB (ATmega328P), 0.5 KB dùng cho bootloader.SRAM: 2 KB (ATmega328P)

EEPROM: 1 KB (ATmega328P)Clock Speed: 16 MHz

LED_BUILTIN: 13

K椃Āch thươꄁc: 68.6 x 53.4 mm

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

Điện áp: 3V - 5VDòng: 100 - 200 mA

Lưu lượng: 1.2 - 1.6 l椃Āt/phút Trọng lượng: 28g

2.3 Cơ sở vận hành

- Cảm biến thu t椃Ān hiê Hu tư뀀 môi trươꄀng trả về tượng tư뀣 trong dải 0 đến 1023 cho bô H vi xư뀉 lý, giá tr椃⌀ này sẽ ánh x愃⌀ theo quy luâ Ht thư뀣c tế vơꄁi đơ H wm.Quy l Ht đó được lấy gần đúng như sau:

- Đô H wm th椃Āch hợp cho tư뀀ng khu vư뀣c sẽ được thiết lâ Hp ban đầu (X%)

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

3. S đồồ thu t gi iơ ậ ả

Mơi trươꄀngBơm

Relay ngắt<small>Đúng</small>

Relay đóngĐộ wm < Điều

kiện biênĐiều kiện biênGiao diện điều khiPn

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

4. Thiết kế mạch4.1 Mạch mô phỏng

Thư뀣c hiện mô phxng m愃⌀ch trên Proteus

4.2 Mạch thực tế

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

5. Giao diện điều khiển

Bắt đầu ch愃⌀y hệ th Āng, ta chọn cổng kết n Āi và baurate, sau đó tiến hành kết n Āi vơꄁi bộ điều khiPn.

Pause: T愃⌀m dư뀀ng nhận dữ liệuSave: Lưu dữ liệu sang file excelClear: Xóa dữ liệu

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

6. Kết quả thực nghiệm

III. Kết luận1. Đánh giá

- Hệ th Āng ch愃⌀y ổn đ椃⌀nh thu nhận được độ wm theo thơꄀi gian thư뀣c vàtư뀣 động bật tắt máy bơm đP ổn đ椃⌀nh độ wm theo độ wm cài đặt

- Tuy nhiên vì vấn đề chất lượng linh kiện nên s Ā liệu còn chưa ch椃Ānh xác

2. Đề xuất cải tiến

- Sư뀉 dụng thêm các lo愃⌀i cảm biến khác đP nâng cao chất lượng điều khiPn cũng như ph愃⌀m vi ứng dụng (cảm biến nhiệt độ, ánh sáng,...)- Sư뀉 dụng giao diện điều khiPn đP giám sát hệ th Āng tư뀀 xa thông qua

wifi, bluetooth

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

IV. Tài liệu tham khảoCode Arduino:

#include <LiquidCrystal.h>#define sensor A1

#define led 13#define motor 8

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);int state = 0;

long time_now = 0;long time_start = 0;float data = 0;void setup() { Serial.begin(9600); lcd.begin(20, 4); pinMode(sensor, INPUT); pinMode(led, OUTPUT); pinMode(motor, OUTPUT); lcd.setCursor(0, 0);

lcd.print("*-*-Welcome-*-*"); lcd.setCursor(0, 1);

lcd.print("Humidity: %");}

void loop() {

int value = analogRead(sensor); value = map(value, 0, 1023, 0, 100); lcd.setCursor(11, 1);

lcd.print(value);

if (value < 100) {

lcd.setCursor(13, 1); lcd.print(' '); }

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

}

if (value > 70) {

lcd.setCursor(0, 2); lcd.print("Good Condition"); lcd.setCursor(0, 3); lcd.print("Motor: OFF"); digitalWrite(led, LOW); digitalWrite(motor, LOW); }

else {

lcd.setCursor(0, 2); lcd.print("Water shortage"); lcd.setCursor(0, 3); lcd.print("Motor: ON "); digitalWrite(led, HIGH); digitalWrite(motor, HIGH); }

if(Serial.available()) {

char temp = Serial.read(); if(temp == '0') state = 0; if(temp == '1') state = 1; if(temp == '2') state = 2; }

switch(state) {

case 0: break; case 1:

time_start = millis(); data = value;

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

data = 0; time_now = 0; state = 0; break; }}

Code giao diện điều khiển:using System;

using System.Collections.Generic;using System.ComponentModel;using System.Data;

using System.Drawing;using System.Linq;using System.Text;

using System.Threading.Tasks;using System.Windows.Forms;using System.IO;

using System.IO.Ports;using System.Xml;using ZedGraph;

namespace Automatic_Lawn_Care_System{

public partial class Form1 : Form {

string SDatas = String.Empty; //khai bao chuoi luu du lieu tu Serial

string SRealTime = String.Empty; //khai bao chuoi luu thoi gian tuSerial

int status = 0; //khai bao bien xu su kien ve do thi double realtime = 0; //khai bao bien thoi gian de ve do thi double datas = 0; //khai bao bien du lieu de ve do thi

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

string[] Baudrate = { "600", "1200", "2400", "4800", "9600", "14400", "19200", "38400", "56000", "57600", "115200" }; comboBox2.Items.AddRange(Baudrate);

label3.Text = DateTime.Now.ToLongTimeString(); label4.Text = DateTime.Now.ToLongDateString(); textBox1.Text = ("System: Welcome!\r\n");

comboBox1.DataSource = SerialPort.GetPortNames(); //lay nguon cho comboBox1 la ten cac cong COM

comboBox2.SelectedIndex = 4; //setup do thi

GraphPane myPane = zedGraphControl1.GraphPane; //khoi tao do thi

myPane.Title.Text = "Humidity Over Time"; myPane.XAxis.Title.Text = "Time(s)"; myPane.YAxis.Title.Text = "Humidity(%)";

RollingPointPairList list = new RollingPointPairList(60000); //khai bao list diem (duong do thi)

LineItem curve = myPane.AddCurve("Humidity", list, Color.Red, SymbolType.None); //dinh nghia curve de ve

//hien thi truc X

myPane.XAxis.Scale.Min = 0;

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

myPane.AxisChange(); //ham xac dinh co truc }

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{ try {

string[] arrList = serialPort1.ReadLine().Split('|'); //doc mot dong cua Serial, cat chuoi khi gap '|'

SRealTime = arrList[0]; //chuoi dau tien luu vao SRealTime SDatas = arrList[1]; //chuoi thu hai luu vao SDatas double.TryParse(SDatas, out datas); //chuyen doi sang kieu double

double.TryParse(SRealTime, out realtime); realtime = realtime / 1000.0; //doi ms sang s

status = 1; //bat su kien xu ly chuoi xong, doi status = 1 de hien thi listview va ve do thi

} catch { return; } }

private void Data_Listview() {

if (status == 0) return; else {

ListViewItem item = new

ListViewItem(realtime.ToString()); //gan realtime vao cot dau tien cua Listview

item.SubItems.Add(datas.ToString());

listView1.Items.Add(item); //gan bien datas vao cot tiep theo

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

}

private void Draw() {

if (zedGraphControl1.GraphPane.CurveList.Count <= 0) return;

//kiem tra viec khoi tao cac duong curve //dua ve diem xuat phat

LineItem curve = zedGraphControl1.GraphPane.CurveList[0] as LineItem;

if (curve == null) return;

//list chua cac diem //get the PointPairList

IPointListEdit list = curve.Points as IPointListEdit; if (list == null)

if (realtime > xScale.Max - xScale.MajorStep) {

xScale.Max = realtime + xScale.MajorStep; xScale.Min = xScale.Max - 30;

}

//tu dong scale theo truc y

if (datas > yScale.Max - yScale.MajorStep)

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

}

//ham xoa do thi

private void ClearZedGraph() {

zedGraphControl1.GraphPane.CurveList.Clear(); //xoa duong zedGraphControl1.GraphPane.GraphObjList.Clear(); //xoa doi tuong

zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate();

GraphPane myPane = zedGraphControl1.GraphPane; //khoi tao do thi

myPane.Title.Text = "Humidity Over Time"; myPane.XAxis.Title.Text = "Time(s)"; myPane.YAxis.Title.Text = "Humidity(%)";

RollingPointPairList list = new RollingPointPairList(60000); //khai bao list diem (duong do thi)

LineItem curve = myPane.AddCurve("Humidity", list, Color.Red, SymbolType.None); //dinh nghia curve de ve

//hien thi truc X

myPane.XAxis.Scale.Min = 0; myPane.XAxis.Scale.Max = 30;

myPane.XAxis.Scale.MinorStep = 1; //don vi chia nho nhat myPane.XAxis.Scale.MajorStep = 5; //don vi chia lon myPane.YAxis.Scale.Min = 0;

myPane.YAxis.Scale.Max = 100; myPane.AxisChange();

}

//ham xoa du lieu private void ResetValue() {

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

status = 0; }

//ham luu ListView sang Excel private void SaveToExcel() {

Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();

xla.Visible = true;

Microsoft.Office.Interop.Excel.Workbook wb =

Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)xla.ActiveSheet; //dat ten cho hai o A1, B1, sau do tu dong gian do rong Microsoft.Office.Interop.Excel.Range rg =

(Microsoft.Office.Interop.Excel.Range)ws.get_Range("A1", "B1"); ws.Cells[1, 1] = "Time(s)";

ws.Cells[1, 2] = "Humidity(%)"; rg.Columns.AutoFit();

//luu tu o dau tien cua dong 2 (o A2) int i = 2;

}

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

label3.Text = DateTime.Now.ToLongTimeString(); if (!serialPort1.IsOpen)

{

label5.Text = ("Disconnected"); label5.ForeColor = Color.Red; progressBar1.Value = 0; }

else if (serialPort1.IsOpen) {

label5.Text = ("Connected"); label5.ForeColor = Color.Green; progressBar1.Value = 100; }

}

private void timer2_Tick(object sender, EventArgs e) {

Draw(); Data_Listview(); status = 0;

if (serialPort1.IsOpen) {

if (datas <= 70) {

textBox2.Text = ("_Motor_: ON"); }

else {

textBox2.Text = ("_Motor_: OFF"); }

} }

private void btConnect_Click(object sender, EventArgs e) {

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

serialPort1.Open(); serialPort1.Write("2");

textBox1.AppendText("System: SerialPort connected successfully.\r\n");

} }

private void btDisconnect_Click(object sender, EventArgs e) {

if (serialPort1.IsOpen) {

SaveToExcel();

textBox1.AppendText("System: Data has been saved.\r\n");

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

serialPort1.Write("0");

textBox1.AppendText("System: Paused!\r\n"); }

}

private void btClear_Click(object sender, EventArgs e) {

if (serialPort1.IsOpen) {

serialPort1.Write("2"); listView1.Items.Clear(); ClearZedGraph(); ResetValue();

textBox1.AppendText("System: Data has been cleared.\r\n");

} } } }}

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

BẢN NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪNGiáo viên hươꄁng dvn:

Sinh viên thư뀣c hiện :

Lơꄁp :

1. Nội dung ………

</div>

×