đồ án cân điện tử

Đồ án tốt nghiệp: Cân điện tử sử dụng mạch arduino có kết nối với giao diện máy tính

Đang xem: đồ án cân điện tử

Đồ án tốt nghiệp: Cân điện tử sử dụng mạch Arduino có kết nối với giao diện máy tính với mục tiêu tạo cơ hội tìm hiểu và thực hành một cách thiết thực những nội dung lý thuyết trong các môn đã học, đặc biệt là môn Cấu trúc máy tính và giao diện môn Đo lường va điều khiển bằng máy tính.

Xem thêm: bản vẽ đồ án thép 2

Đồ án tốt nghiệpCân điện tửCân điện tử sử dụng mạch arduinoThiết kế lập trình cho arduinoThực hiện lập trình cho arduinoThiết kế phần cứng arduino

Nội dung Text: Đồ án tốt nghiệp: Cân điện tử sử dụng mạch arduino có kết nối với giao diện máy tính

Xem thêm: nghị luận văn học 10

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM  TPHCM KHOA CÔNG NGHỆ ĐIỆN­ĐIỆN TỬ ĐỒ ÁN 1 CÂN ĐIỆN TỬ DÙNG  LOADCELL GIẢNG VIÊN HƯỚNG DẪN:  DƯƠNG VĂN KHẢI VIÊN THỰC HIỆN:  PHẠM QUANG KHANH MSSV: 2013110245 THÁNG 05/2015MỤC LỤC LỜI MỞ ĐẦU Để tạo cơ hội thực hành nắm rõ hơn những kiến thức về ngành học, tác giả  đã chọn nghiên cứu và thực hiện đề  tài: Cân điện tử  sử  dụng mạch arduino có  kết nối với giao diện máy tính. Trong khuôn khổ đề tài, tác giả sẽ thực hiện làm  mạch phần cứng, phần mềm và giao diện như sau: Mục tiêu của đề  tài: tạo cơ  hội tìm hiểu và thực hành một cách thiết thực  những nội dung lý thuyết trong các môn đã học, đặc biệt là môn Cấu trúc máy tính  và giao diện môn Đo lường va điều khiển bằng máy tính. Và kế đó, áp dụng những  nghiên cứu này vào một bài thực hành cụ  thể  để hiểu rõ hơn lý thuyết và thu góp   kinh nghiệm thực hành thực tế. Đối tượng và phạm vi đề  tài: Sử dụng mạch arduino, loadcell cùng với các  thiết bị  điện khác để  làm một cái cân có thể  cân được một số  vật dụng thông   thường có những đặc điểm sau: ­ Cân được vật nặng tối đa 5kg ­ Sử dụng led đơn và led 7 đoạn hiển thị cân nặng đơn vị lạng (100 gam) ­ Có nút nhấn dùng để  lấy lại mức không (reset zero) khi sử dụng thêm đĩa   cân hoặc vật chứa những gì cần cân trọng lượng ­ Có thể kết nối với máy tính để  theo dõi cân nặng, lấy lại mức không cho   cân và gửi tín hiệu điều khiển xuống cơ cấu chấp hành của cân Phương pháp nghiên cứu:  Dựa trên những kiến thức đã học kết hợp với   những kiến thức trong môn học cấu trúc máy tính và giao diện về mạch arduino và   giao diện máy tính cùng với sự  tìm tòi, tổng hợp kiến thức từ  các nguồn khác để  phân tích và chọn lựa những cách thức  ứng dụng phù hợp phục vụ  cho thực hiện   đề tài. Ý nghĩa của đề  tài: Đề  tài là một cây cầu gắn kết giữa lý thuyết học được   và với việc thực hiện, tạo ra các sản phẩm thực tế để  tăng kiến thức và tay nghề  của học viên. Mặt khác, đề tài cũng là tài liệu tham khảo cho những nghiên cứu co  liên quan hoặc áp dụng cho thực tế. Bố cục đề tài được chia làm 4 phần như sau: Chương 1: Giới thiệu chung về đề tài cân điện tử Chương 2: Viết giao diện máy tính cho cân Chương 3: Thiết kế, thực hiện phần cứng và lập trình cho arduino Chương 4: Bài học kinh nghiệm và kết luận GIỚI THIỆU CHUNG VỀ ĐỀ TÀI CÂN ĐIỆN TỬ Giới thiệu sơ lược về đề tài cân điện tử Đề tài cân điện tử được thực hiện dựa trên một số tiêu chí như sau: Phần cứng: ­ Tận dụng những linh kiện, chất liệu có sẵn để giảm thiểu chi phí ­ Sản phẩm cần gọn, nhẹ, dễ kết nối và sử dụng ­ Thiết kế đơn giản và bắt mắt Phần mềm: ­ Dùng những kiến thức về lập trình đã được học và kế thừa những dữ liệu,  đoạn lệnh của những người đi trước, kết hợp và phát triển thành một phần   mềm phù hợp cho phần cứng ­ Dễ hiểu và dễ nghiên cứu ­ Thời gian đáp ứng nhỏ, có tín hiệu thông báo khi reset zero Giao diện: ­ Đơn giản, bắt mắt, dễ quan sát các số liệu ­ Có nút reset zero Với những tiêu chí đó, cân được kết nối như hình sau: Mô hình cân điện tử  được tạo ra bởi sự  kết nối giữa mạch arduino (2) với   máy tính (1), mạch cân loadcell (3), mạch nút nhấn ­ hiển thị (4) và động cơ  servo   (5). Trong đó thì mạch ardruino làm nhân tố trung tâm để liên lạc giữa các thiết bị  khác với nhau. Máy tính cùng với giao diện có khả năng đọc được những thông tin  chỉ  số  mà arduino gửi lên và gửi các tín hiệu điều khiển đến arduino. Mạch cân   loadcell có chức năng đọc giá trị  cân nặng và gửi cho arduino. Mạch hiển thị­ nút  nhấn có chức năng hiển thị  số bằng tín hiệu từ  arduino và gửi tín hiệu trạng thái   nút nhấn cho arduino. Động cơ servo có chức năng đóng mở van theo tín hiệu điều   khiển từ  arduino. Arduino có chức năng xử  lý tín các tín hiệu đến từ  máy tính, nút   nhấn và loadcell cùng gửi tín hiệu đi và tín hiệu cho máy tính và tín hiệu điều khiển   đến mạch hiển thị và động cơ servo. Giới thiệu các thiết bị phân cứng sử dụng cho cân điện tử Máy vi tính Máy vi tính là một thiết bị  không thể  thiếu trong cuộc sống hiện đại và cả  trong nghiên cứu, nhất là trong ngành điện tử có lập trình. Trong nội dung đề tài này, tác giả sử dụng một máy vi tính có cấu hình trung  bình (chíp sử lý core 2 duo­ ram 2GB) có cài sẵn một số phần mềm cần thiết: ­  Phần mêm Arduino IDE dùng để rà soát lỗi và biên dịch lệnh cho arduino. ­ Phần mềm hỗ trợ lập trình giao diện. ­ Phần mềm Proteus: dùng để  vẽ  mạch nguyên lý và mạch in để  làm mạch  hiển thị­nút nhấn. Internet cũng là một yếu tố quan trọng hỗ trợ cho việc viết chương trình nạp   cho arduino thông qua các thư viện, các đoạn code mẫu và hướng dẫn khác.  Máy vi tính được kết nối với arduino qua cổng usb bằng cáp phụ  kiện của   arduino. Mạch Arduino Uno R3 Hình dáng và công dụng của mạch Arduino Uno R3 Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng tương tác  với nhau hoặc với môi trường được thuận lợi hơn. Phần cứng bao gồm một board  mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM  Atmel 32­bit. Những Model hiện tại được trang bị  gồm 1 cổng giao tiếp USB, 6   chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng   khác nhau. Được   giới   thiệu   vào   năm   2005,   Những   nhà  thiết  kế  của Arduino cố  gắng mang  đến một phương  thức  dễ   dàng,   không   tốn   kém   cho   những   người   yêu   thích,   sinh   viên   và   giới   chuyên   nghiệp để  tạo ra những nhiết bị  có khả  năng tương tác với môi trường thông qua  các cảm biến và các cơ  cấu chấp hành. Những ví dụ  phổ  biến cho những người   yêu thích mới bắt đầu bao gồm các robot đơn giản, điều khiển nhiệt độ  và phát   hiện chuyển động. Đi cùng với nó là một môi trường phát triển tích hợp (IDE) chạy   trên các máy tính cá nhân thông thường và cho phép người dùng viết các chương  trình cho Aduino bằng ngôn ngữ C hoặc C++. Hình  : Các chân kết nối của arduino R3 Hình  : Các chân kết nối của chíp Atmega328 và các chân tương ứng trong arduino Nhắc tới dòng mạch Arduino dùng để  lập trình, cái đầu tiên mà người ta   thường nói tới chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới   thế hệ thứ 3 (R3). Dựa vào hình 2 và hình 3, chúng ta hoàn toàn có thể thiết kế một  bo mạch rời với arduino và chạy bằng chíp Atmega328 đã nạp code bằng Arduino.   Trong đề  tài này, tác giả  thực hiện thi công một bo mạch rời sử  dụng chíp của   arduino. Mạch này có thể hoạt động độc lập mà không cần sử dụng đến bo arduino  để tiết kiệm chi phí. Khi cần kết nối với máy tính, cần sử dụng mạch chuyển đổi  serial – Usb để  kết nối với máy tính. Trong trường hợp giao tiếp với các chíp vi  điều khiển khác, có thể giao tiếp trực tiếp bằng cổng serial. Những thông số kỹ thuật và đặc điểm của mạch Arduino Uno R3 Vi điều khiển ATmega328 họ 8bit Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB) Tần số hoạt động 16 MHz Dòng tiêu thụ khoảng 30mA Điện áp vào khuyên dùng 7­12V DC Điện áp vào giới hạn 6­20V DC Số chân Digital I/O 14 (6 chân hardware PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA Dòng ra tối đa (5V) 500 mA Dòng ra tối đa (3.3V) 50 mA Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Loadcell và mạch khuếch đại tín hiệu cân Hx711 Loadcell 5kg Cấu tạo chính của loadcell gồm các điện trở strain gauges R1, R2, R3, R4 kết   nối thành 1 cầu điện trở  Wheatstone như  hình dưới và được dán vào bề  mặt của   thân loadcell. Hình  : Sơ đồc ấu tạo loadcell Một điện áp kích thích được cung cấp cho ngõ vào loadcell (2 góc (1) và (4)   của cầu điện trở Wheatstone) và điện áp tín hiệu ra được đo giữa hai góc. Tại trạng thái cân bằng (trạng thái không tải), điện áp tín hiệu ra là số không   hoặc gần bằng không khi bốn điện trở được gắn phù hợp về giá trị. Đó là lý do tại sao cầu điện trở  Wheatstone còn được gọi là một mạch cầu  cân bằng.  Khi có tải trọng hoặc lực tác động lên thân loadcell làm cho thân loadcell bị  biến dạng (giãn hoặc nén), điều đó dẫn tới sự thay đổi chiều dài và tiết diện của   các sợi kim loại của điện trở  strain gauges dán trên thân loadcell dẫn đến một sự  thay đổi giá trị  của các điện trở strain gauges. Sự thay đổi này dẫn tới sự  thay đổi  trong điện áp đầu ra. Sự  thay đổi điện áp này là rất nhỏ, do đó nó chỉ  có thể  được đo và chuyển  thành số sau khi đi qua bộ khuếch đại của các bộ chỉ thị cân điện tử (đầu cân). Trong khuôn khổ đề tài, tác giả đã chọn sử dụng  loại loadcell có khả năng cân nặng 5kg có những thông  số  như sau: Điện áp điều khiển: 5­10v Tín hiệu đầu ra: tín hiệu điện áp Kích thước: 12,7 x 12.7 x 75mm Loadcell có 4 dây có màu lần lượt là đen, đỏ, trắng và xanh, trong đó có 2 dây  để cấp nguồn và 2 dây cấp tín hiệu ra. Tùy loại loadcell và nhà sản xuất mà các dây  này có chức năng khác nhau nhưng thường thì cặp dây đỏ  ­ đen là dây cấp nguồn,   dây đỏ cấp nguồn dương và dây đen nối mass, 2 dây còn lại là dây tín hiệu (có thể  phát hiện chính xác 2 dây còn lại dây nào là dây tín hiệu dương và dây nào là dây tín   hiệu âm bằng cách mắc thử mạch và nếu tín hiệu cân ra là âm thì đảo 2 dây này lại   thì sẽ không còn hiện tượng này nữa. Loadcell thực tế  nhóm sử  dụng có dây  đỏ  là   dây  nguồn  dương,   dây  đen  là   dây  trung   tính,  dây trắng là dây tín hiệu dương và dây xanh  lục  là dây tín hiệu âm. Mạch khuếch đại tín hiệu cân nặng Hx711 Hx711 là mạch đọc giá trị cảm biến loadcell với độ phân giải 24bit và chuyển   sang giao tiếp 2 dây (clock và data) để gửi dữ liệu cho vi điều khiển /arduino.  Thông số kỹ thuật: ­ Điện áp hoạt động: 2.7 – 5V ­ Dòng điện tiêu thụ:  Ngoài ra, để  tiết kiệm chân kết nối với arduino, mạch có dùng thêm chíp   74595 (chíp ghi dịch) kết hợp trong mạch hiển thị. Động cơ servo Động cơ servo là một loại động cơ có thể điều chỉnh được góc quay bằng tín  hiệu điều khiển thông qua dây điều khiển. Động cơ  servo được chia làm nhiều loại, chủ  yếu dựa vào góc có thể  quay  được (180 độ  hoặc 360 độ) hay dựa vào chất lượng (loại thường: sử  dụng bánh   răng nhựa, loại tốt: dùng bánh răng kim loại). Trong đề  tài này, tác giả  sử  dụng   động cơ  servo SG90 có thể  quay được góc 180 độ  và sử  dụng bánh răng nhựa để  tiết kiệm chi phí. Để kết nối động cơ servo với arduino, chỉ cần phân biệt được 3 dây của động   cơ  servo gồm một dây nguồn (màu đỏ), dây trung tính (màu nâu) và dây nhận tín   hiệu điều khiển (màu vàng) như hình dưới. Hình  : Chức năng các dây kết nối động cơ servo Như  vậy, dây đỏ  sẽ  được kết nối với chân 5v của arduino, dây nâu nối với   chân GND của arduino và dây cam sẽ  nối với một chân tín hiệu tương tự  (PWM)  của arduino. VIẾT GIAO DIỆN MÁY TÍNH CHO CÂN Giới thiệu chung về giao diện máy tính cho cân điện tử Giới thiệu phần mềm Visual studio 2012 Phần mềm Visual studio 2012 là một phiên bản phần mềm Visual studio khá  mới do công ty phần mềm Microsoft cung cấp. Phần mềm có thể giúp để lập trình  tạo ra những giao diện (phần mềm máy tính) một cách khá dễ  dàng và tiện lợi.  Trong đề tài này,  giao diện cân điện tử sẽ được viết bằng phần mềm visual studio   bằng ngôn ngữ Visual basic. Hình  : Logo của phần mềm visual studio 2012 Giới thiệu chung về giao diện cho cân điện tử Giao diện cân điện tử được viết  ra có các thành phần như trong giao diện sau: Hình  : Giao diện cân điện tử Vì giao diện mang tính hỗ trợ cho việc nghiên cứu nên trong giao diện vẫn giữ  lại phần nội dung truyền nhận để  dễ  theo dõi và chỉnh sửa trong thời gian nghiên  cứu. Ngoài những gì có thể thấy trực tiếp trên giao diện, phần mềm còn sử dụng 2   timer, 1 cổng serial và 1 menu scrip. Việc lập trình cho từng phần sẽ được trình bày   trong các mục tiếp sau đây. Lập trình chung cho form Phần lập trình chung cho form có mục đích để  khai báo biến và hằng dùng  chung cho cả phần mềm, khai báo cổng com và quy định cho cổng com hoạt động.   Phần lập trình này được viết như sau: Public Class Form1 ;khai báo biến và hằng Private readBuffer As String = String.Empty Private comOpen As Boolean Private nhangiatridat As String = String.Empty Private cannang As String = String.Empty Private dem As Integer = 0 ;khai báo cổng com cùng những thông số để cổng hoạt động Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ” read avaiable COM Ports: Dim Portnames As String() = System.IO.Ports.SerialPort.GetPortNames If Portnames Is Nothing Then MsgBox("There are no Com Ports detected!") Me.Close() End If ” device params With SerialPort1 .ParityReplace = &H3B ” replace ";" when parity error occurs .PortName = "COM3" “cboComPort.Text ;Tên cổng com rất quan trọng .BaudRate = CInt("9600") “CInt(cboBaudRate.Text) .Parity = IO.Ports.Parity.None .DataBits = 8 .StopBits = IO.Ports.StopBits.One .Handshake = IO.Ports.Handshake.None .RtsEnable = False .ReceivedBytesThreshold = 1 “threshold: one byte in buffer > event is fired .NewLine = vbCr ” CR must be the last char in frame. This terminates the SerialPort.readLine .ReadTimeout = 10000 End With ” check whether device is avaiable: Try SerialPort1.Open() comOpen = SerialPort1.IsOpen Catch ex As Exception comOpen = False MsgBox("Error Open: " & ex.Message) End Try End Sub Khi đã có cổng com, ta viết chương trình để  phần mềm nhận tín hiệu từ  arduino gửi lên máy tính. Nhận và sử lý dữ liệu đến và xuất ra màn hình Vì dữ  liệu từ  arduino gửi lên sẽ  có trình tự  là  ; ; vì thế, việc nhận dữ  liệu và tách các dữ  liệu này ra là cần  thiết. Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived If comOpen Then Try readBuffer = SerialPort1.ReadLine() “data to UI thread Me.Invoke(New EventHandler(AddressOf DoUpdate)) Catch ex As Exception MsgBox("read " & ex.Message) End Try End If End Sub “”” “”” update received string in UI “”” “”” Public Sub DoUpdate(ByVal sender As Object, ByVal e As System.EventArgs) readBuffer = Trim(readBuffer) Txt_nhan.Text = readBuffer ; lưu dữ liệu nhận được vào Txt_nhan.Text cannang = Mid(readBuffer, 1, InStr(readBuffer, ";") – 1) ; gán giá trị từ ký tự 1 đến trước dấu ; của Txt_nhan.Text vào cannang hienthicannang.Text= Mid(cannang, 2) ; xuất giá trị cân ra hienthicannang readBuffer = Mid(readBuffer, InStr(readBuffer, ";") + 1) ; xóa từ đầu đến dấu ; trong readBuffer trangthaivan.Text = Mid(readBuffer, 1, InStr(readBuffer, ";") – 1) ; xuất giá trị chuỗi trước dấu ; trong readBuffer ra trangthaivan nhangiatridat = Mid(readBuffer, InStr(readBuffer, ";") + 1) ; gán giá trị đặt bằng nội dung sau dấu ; trong readBuffer sailech.Text = cannang – nhangiatridat ; gán giá trị sailech bằng sự chênh lệch giữa cân nặng và giá trị đặt Timer1.Enabled = True ;khởi động timer 1 End Sub Ngoài đoạn code này, còn có 1 đoạn code nhỏ  của timer 1 có liên quan đến   hoạt động nhận dữ liệu để báo khi hết thời gian nhận tín hiệu như sau:  Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick Timer1.Enabled = False End Sub Như  vậy, tới đây thì khi có dữ  liệu gửi lên, giao diện đã sử  lý được và hiện   lên màn hình. Kế đến, cần lập trình cho giao diện có khả  năng gửi những yêu cầu   xuống arduino để điều khiển. Gửi tín hiệu điều khiển xuống Arduino Để điều khiển được arduino, cần phải quy ước một số ký hiệu khi gửi xuống   để khi lập trình arduino, cần phải có sự  đồng nhất này để tín hiệu gửi đi không bị  hiểu nhầm. Nút nhấn Chuỗi gửi  Ý nghĩa xuống arduino Reset r Reset zero cho cân Mở m Mở van 100% Đóng d Đóng van Tự động t Bật chế độ tự động Đặt s# Set (đặt lại) giá trị  đặt bằng con số  sau  ký tự s. (# có thể là 1 hay nhiều chữ số) Mỗi lệnh gửi đi sẽ tương ứng với 1 nút nhấn trên giao diện và cần được lập  trình riêng. Tuy nhiên,  cấu trúc các câu lệnh là tương tự  nhau. Nút reset được lập  trình như sau: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Reset.Click Txt_truyen.Text = "r" If comOpen Then SerialPort1.WriteLine(Txt_truyen.Text) End Sub Đoạn   code   trên   thực   hiện   2  công   việc   khi   nhấn   nút   là   gán  nội   dung  của   Txt_truyen là ký tự  r. sau đó gửi nội dung đó bằng cổng nối tiếp. Như  vậy, đoạn   code sẽ  được rút gọn đi nếu không sử  dụng hộp Txt_truyen.Text để  hiển thị  nội  dung truyền như sau: Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Reset.Click If comOpen Then SerialPort1.WriteLine(“r”) End Sub Tuy nhiên, để tiện cho việc theo dõi, tác giả sẽ chọn cách đầu là cho thể hiện   ở Txt_truyen.Text để theo dõi. Các nút khác cũng được lập trình tương tự: Nút nhấn mở: Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Mo.Click Txt_truyen.Text = "m" If comOpen Then SerialPort1.WriteLine(Txt_truyen.Text) tudong.Enabled = True End Sub Nút nhấn đóng: Private Sub Button5_Click(sender As Object, e As EventArgs) Handles dong.Click Txt_truyen.Text = "d" If comOpen Then SerialPort1.WriteLine(Txt_truyen.Text) tudong.Enabled = True End Sub Nút nhấn mở  và đóng có thêm một dòng lệnh đổi chế  độ  enabled của nút   nhấn tudong thành True để khi nhấn 1 trong 2 nút này thì nút tudong se nổi lên, cho  phép nút này hoạt động. Nút nhấn tudong: Private Sub Button2_Click(sender As Object, e As EventArgs) Handles tudong.Click Txt_truyen.Text = "t" If comOpen Then SerialPort1.WriteLine(Txt_truyen.Text) tudong.Enabled = False End Sub Khi nút nhấn tudong được nhấn thì giao diện sẽ gửi đi chữ  t và đồng thời vô  hiệu hóa chính nó. Nút nhấn dat: Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Dat.Click If comOpen Then Txt_truyen.Text = "s" Txt_truyen.Text += giatridat.Text SerialPort1.Write("s") SerialPort1.Write(giatridat.Text) End If End Sub Nút nhấn dat (đặt) có chức năng gửi đi chuỗi gồm có chữ  s và chuỗi số trong   textbox giatri dat. Vì thế, cần dùng 2 lệnh gửi đi (lệnh  SerialPort1.Write), lần đầu  gửi chữ s, lần sau gửi giá trị trong hộp thoại giá trị đặt. Đồng thời, cũng phải hiển  thị  ra trong Txt_truyen chuỗi gửi đi, vì thế  ta dùng lệnh gán cộng thêm: += để  nối   chuỗi s với nội dung trong giatridat. Ngoài ra, nút gửi và nút xóa cũng được lập trình: Private Sub Btn_gui_Click(sender As Object, e As EventArgs) Handles Btn_gui.Click If comOpen Then SerialPort1.WriteLine(Txt_truyen.Text) End Sub Private Sub Btn_xoa_Click(sender As Object, e As EventArgs) Handles Btn_xoa.Click Txt_nhan.Text = " " Txt_truyen.Text = " " End Sub Hiển thị trạng thái của cân bằng hình ảnh Trong giao diện còn có một khung hình ảnh được điều khiển bằng timer phụ  thuộc vào giá trị  của biến   trangthaivan.text. Khi trangthaivan.text =0 thì hiển thị  hình d không thay đổi. Nhưng nếu trangthaivan.text khác 0 thì sẽ hiển thị luân phiên  hình  a, b và c để  tạo hiệu  ứng  ảnh động. Để  làm được việc này, cần dùng thêm  một biến dem và một timer (timer2). Đoạn code được viết trong timer2 như sau: Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick If (trangthaivan.Text = 0) Then dem = 0 Else dem = dem + 1 If (dem = 0) Then hinhhienthi.Image = System.Drawing.Image.FromFile _ ("E:Hinh cand.jpg") If (dem = 1) Then hinhhienthi.Image = System.Drawing.Image.FromFile _ ("E:Hinh cana.jpg") If (dem = 2) Then hinhhienthi.Image = System.Drawing.Image.FromFile _ ("E:Hinh can.jpg") If (dem = 3) Then hinhhienthi.Image = System.Drawing.Image.FromFile _ ("E:Hinh canc.jpg") dem = 0 End If End Sub  Hình  : Hình ảnh nguồn cho giao diện Đoạn code này có ý nghĩa như  sau: khi timer tác động thì kiểm tra trạng thái   van, nếu trangthaivan bằng 0 thì cho biến dem =0, nếu trangthaivan khác 0 thì tăng  biến đếm lên 1 đơn vị. Sau đó xét biến dem, nếu biến dem =0 thì cho hiện lên hình  d, nếu là 1 cho hiện hình a, nếu là 2 thì cho hiện hình b, nếu là 3 thì cho hiện hình c  và đặt lại dem=0. Tạo menuscrip và form thông tin Có thể tạo thêm menuscrip như trong 2 hình sau và lập trình cho mỗi phần như biên   dưới: Lập trình cho nút Exit: Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click Close() End Sub Lập trình cho nút thông tin: Private Sub ThôngTinToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ThôngTinToolStripMenuItem.Click AboutBox1.Show() End Sub Trong đoạn code lập trình cho nút thông tin có sử  dụng một giao diện phụ  khác có tên là AboutBox1. Ta có thể tạo giao diện phụ bằng cách vào mục Project   chọn mục Add window form… để khi bấm vào thông tin, sẽ có một hộp thoại mới   mở ra, hiển thị những thông tin cần thiết như hình: Hình  : Cửa sổ phụ hiển thị thông tin Tiếp sau đây, phần lập trình arduino và thiết kế  phần cứng cũng rất quan   trọng để có một sản phẩm hoàn chỉnh.