Để góp phần làm sáng tỏ hiệu quả của những ứng dụng trong thực tế củamôn vi xử lý, sau một thời gian học tập được các thầy cô trong khoa giảng dạy về các kiến thức chuyên ngành, đồng thờ
TỔNG QUAN
Nhu cầu tự động hóa ở Việt Nam
Ngành tự động hóa là một lĩnh vực công nghệ then chốt cho sự phát triển của mỗi quốc gia Khi tự động hóa được áp dụng rộng rãi, nó sẽ làm tăng năng suất và cải thiện chất lượng sản phẩm một cách đáng kể Tuy nhiên hiện tại nước ta vẫn thiếu quy mô và năng lực làm chủ công nghệ tự động hóa, điều này cản trở đáng kể sự phát triển ở nhiều mặt Nhìn nhận từ khía cạnh tích cực, đây cũng là cơ hội để ngành tự động hóa tận dụng nhu cầu lớn từ nền sản xuất còn lạc hậu và mở rộng thị trường nội địa cũng như xuất khẩu.
Và nghành tự động hóa trong nông nghiệp tại nước ta lại càng thiếu và yếu rất nhiều, đòi hỏi nhành phải đi sâu vào giải quyết nhiều vấn đề để nâng cao chất lƣợng cũng nhƣ số lƣợng của sản xuất nông nghiệp tại nước ta.
Mục tiêu của đề tài
- Nghiên cứu mô hình điều khiển máy bơm nước sử dụng sóng wifi và sóng điện thoại.
- Nghiên cứu cơ sở lý thuyết để xây dựng mô hình dựa trên các kiến thức đã học về lập trình
- Ứng dụng các công nghệ gần gũi với cuộc sống con người để xây dựng lên hệ thống điều khiển từ xa.
1.3 Tính tối ƣu của đề tài
- Tạo tính tƣ duy cho sinh viên trong quá trình nghiên cứu.
- Có tính linh động và mở rộng cho sinh viên thiết kế mô hình dựa trên cơ sỡ thực tế.
- Mô hình đơn giản nhƣng rất hữu ích.
THIẾT BỊ VÀ CÁC GIẢI PHÁP CÔNG NGHỆ
Giới thiệu về Mạch Arduino UNO R3
Mạch Arduino Uno là dòng mạch Arduino phổ biến, khi mới bắt đầu làm quen, lập trình với Arduino thì mạch Arduino 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
Arduino Uno R3 là dòng mạch cơ bản và linh hoạt, thường được sử dụng cho người mới bắt đầu Bạn có thể khai thác các dòng Arduino khác như Arduino Mega, Arduino Nano và Arduino Micro để mở rộng dự án Tuy vậy, với các ứng dụng cơ bản, mạch Arduino Uno là lựa chọn phù hợp nhất.
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là:
ATmega8 (Board Arduino Uno r2), ATmega168, ATmega328 (Board Arduino
Uno r3) Bộ não này có thể xử lí những tác vụ đơn giản nhƣ điều khiển đèn
LED nhấp nháy và xử lý tín hiệu đóng vai trò then chốt trong các hệ thống xe điều khiển từ xa, cho phép điều khiển động cơ bước và động cơ servo một cách chính xác và ổn định Việc kết hợp điều khiển động cơ bước và động cơ servo mở ra nhiều ứng dụng tự động hóa và robot, từ di chuyển tuyến tính đến điều chỉnh góc quay với độ chính xác cao Bên cạnh đó, có thể làm một trạm đo nhiệt độ – độ ẩm và hiển thị dữ liệu lên màn hình LCD, phục vụ cả ứng dụng công nghiệp và dân dụng Các ứng dụng khác cũng được khai thác nhờ các mô-đun xử lý tín hiệu và điều khiển linh hoạt, giúp tiết kiệm chi phí và tăng tính mở rộng cho các dự án điện tử và tự động hóa.
Mạch Arduino UNO R3 với thiết kế tiêu chuẩn sử dụng vi điều khiển
ATmega328 là lựa chọn phổ biến cho dự án vi điều khiển Tuy nhiên, nếu yêu cầu phần cứng của bạn không quá cao hoặc ngân sách hạn chế, bạn có thể dùng các vi điều khiển có chức năng tương đương nhưng rẻ hơn, như ATmega8 với bộ nhớ flash 8KB, hoặc các lựa chọn khác trong dòng AVR như ATmega16/ATmega32 hoặc các phiên bản nhỏ hơn của ATtiny phù hợp với nhu cầu.
ATmega168 (bộ nhớ flash 16KB).
Arduino UNO R3 có thể cấp nguồn 5V qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng từ 7–12V DC và điện áp giới hạn từ 6–20V Thông thường, cấp nguồn bằng pin vuông 9V là lựa chọn hợp lý khi bạn không có nguồn từ cổng USB Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO.
GND (Ground) là cực âm của nguồn cấp cho Arduino UNO Khi bạn dùng các thiết bị có nguồn điện riêng, các chân GND của những nguồn này phải được nối với nhau, tạo thành một tham chiếu điện áp chung cho toàn mạch để Arduino hoạt động ổn định và an toàn.
5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA.
3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA. Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND.
IOREF là chân trên Arduino UNO dùng làm tham chiếu điện áp cho các shield và cho phép tương thích với các mức điện áp khác nhau Điện áp tham chiếu tại IOREF tương ứng với điện áp hoạt động của vi điều khiển trên board; với Arduino UNO, chân này luôn ở mức 5V Tuy nhiên, bạn không nên lấy nguồn từ chân IOREF để cấp nguồn cho mạch hay shield, bởi chức năng của nó chỉ nhằm tham chiếu và điều chỉnh điện áp chứ không phải là nguồn cấp.
RESET là thao tác nhấn nút Reset trên board nhằm reset vi điều khiển Khi nút Reset được kích hoạt, chân RESET được nối với GND qua một điện trở 10KΩ, tạo tín hiệu reset ổn định và đảm bảo vi điều khiển khởi động lại đúng như thiết kế Khái niệm này là nền tảng trong thiết kế hệ thống nhúng và được trình bày trong đồ án tốt nghiệp tại Trường ĐH-BRVT.
Arduino UNO không có bảo vệ chống cắm nguồn ngược, nên bạn phải cực kỳ thận trọng và kiểm tra kỹ các cực âm – dương của nguồn trước khi cấp điện cho Arduino UNO Việc chập mạch nguồn sẽ biến Arduino UNO thành một miếng nhựa chặn giấy Nếu có thể, hãy dùng nguồn từ cổng USB để giảm thiểu rủi ro và bảo vệ bảng mạch.
Chân 3.3V và 5V trên Arduino là các chân cấp nguồn ra dành cho cấp nguồn cho các thiết bị bên ngoài, không phải là nguồn cấp vào cho board Việc cấp nguồn sai vị trí có thể làm hỏng board và điều này không được nhà sản xuất khuyến cáo Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới 6V có thể làm hỏng board.
Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều khiển ATmega328.
Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của
Arduino UNO nếu vƣợt quá 200mA sẽ làm hỏng vi điều khiển.
Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển.
Trên Arduino UNO, cường độ dòng điện qua bất kỳ chân Digital hoặc Analog nào cũng không được vượt quá 40 mA, nếu vượt quá sẽ làm hỏng vi điều khiển Vì vậy, khi bạn không dùng các chân này để truyền nhận dữ liệu, hãy mắc một điện trở hạn dòng để giới hạn dòng điện và bảo vệ vi điều khiển.
Khi làm việc với mạch Arduino, đặc biệt với người mới bắt đầu, cấp nguồn cần được thực hiện thận trọng Nên dùng nguồn 5V chuẩn qua USB hoặc cấp nguồn 9V cho jack nguồn của Arduino Việc cấp nguồn đúng sẽ giúp tránh hỏng mạch và bảo vệ các thành phần khác trong hệ thống Trước khi cấp nguồn, hãy kiểm tra dây dẫn và cổng nguồn, đồng thời đảm bảo nguồn ổn định để Arduino hoạt động an toàn và bền lâu.
Vi điều khiển Atmega328 tiêu chuẩn sử dụng trên Arduino uno r3 có: 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong bộ nhớ
Flash của vi điều khiển thường có vài KB dành cho bootloader, nhưng đừng lo vì phần này chiếm rất ít dung lượng và bạn hiếm khi cần quá 20 KB.
2KB cho SRAM (Static Random Access Memory): đây là nơi lưu giữ giá trị các biến bạn khai báo khi lập trình Bạn càng khai báo nhiều biến thì càng cần nhiều bộ nhớ RAM cho chương trình chạy Tuy nhiên, ở nhiều trường hợp thực tế, RAM không phải là mối quan tâm lớn của người lập trình Dữ liệu lưu trong SRAM sẽ bị mất khi nguồn điện bị ngắt.
Module SIM900A
Module sim900 mini sử dụng nguồn khoảng 3.7V ~ 4.8V, có thể dùng pin lithium nhƣng không đƣợc quá 4,8V nếu không các linh kiện điện tử sẽ bị cháy Về kết nối
Module này sử dụng giao diện TTL và có thể kết nối trực tiếp với MCU hoặc ARM mà không cần bộ chuyển đổi, bỏ qua các liên kết máy tính như USB, RS232, RS485 và các giao diện nối tiếp khác; khi kết nối sai với các chuẩn serial này, module có thể bị cháy hoặc hỏng.
Sơ đồ chân của module sim900 mini
TXD: Chân truyền Uart TX.
RXD: Chân nhận Uart RX.
Headphone: Chân phát âm thanh.
Microphone: Chân nhận âm thanh (phải gắn thêm Micro từ GND vào chân này thì mới thu đƣợc tiếng).
HÌNH ẢNH CỦA MODULE SIM900A MINI
Hình 2.7 Mặt trước Module sim900A Mini
Hình 2.8 Mặt sau Mudule sim900A Mini
Hình 2.9 Các chân của Modile sim900A mini Đồ án tốt nghiệp Trường ĐH-BRVT
Modul sim900a mini sau khi hàn thêm diot vào chân vcc và tụ 2200uF/10V sẽ sử dụng đƣợc nguồn 5v từ mạch arduino
5V nối với chân 5V của board Arduino.
GND nối với chân GND của board Arduino.
TX nối với chân 51/2 của board Arduino MEGA/UNO.
RX nối với chân 50/3 của board Arduino MEGA/UNO.
PWR: Đây là chân bật tắt modul sim900a.
SPK: Chân này cần kết nối nếu bạn muốn xuất âm thanh ra loa thoại.
MIC: Chân này cần kết nối nếu bạn muốn tạo mic để đàm thoại.
Giới thiệu về màn hình LCD 16x2
Hình dáng và kích thước:
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 là loại LCD thông dụng.
Hình 2.10 : Hình dáng của loại LCD thông dụng
Trong quá trình sản xuất LCD, các nhà sản xuất thường tích hợp chip điều khiển HD44780 ngay bên trong vỏ và chỉ đưa ra các chân giao tiếp cần thiết, giúp giảm kích thước module, tăng tính gọn gàng và dễ tích hợp vào hệ thống điều khiển Thiết kế này tối ưu hóa khả năng tương thích với giao diện điều khiển tiêu chuẩn của LCD và giảm chi phí lắp ráp Theo đồ án tốt nghiệp Trường ĐH-BRVT, cách bố trí này thể hiện xu hướng hiện đại trong thiết kế module hiển thị, mang lại hiệu quả về tiết kiệm diện tích và nâng cao độ tin cậy của hệ thống.
Bảng 2.1 : Chức năng các chân của LCD
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
15 -Nguồn dương cho đèn nền
* Ghi chú : Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ
LCD thông qua các chân DBx.
Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua các chân DBx.
HD44780 có một sơ đồ khối cho thấy chức năng của từng chân và cách chúng hoạt động Để hiểu rõ hơn các chân điều khiển và dữ liệu, ta phân tích chip HD44780 qua các khối cơ bản của nó, từ đó nắm bắt cách điều khiển LCD và xử lý lệnh Đây là nội dung chính của đồ án tốt nghiệp Trường ĐH-BRVT, nhằm trình bày cái nhìn hệ thống về cách kết nối phần cứng và phần mềm cho module hiển thị dựa trên HD44780.
Hình 2.11 : Sơ đồ khối của HD44780
Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR (Instructor Register) và thanh ghi dữ liệu DR (Data Register)
Thanh ghi IR (IR register) đóng vai trò chủ chốt trong việc điều khiển LCD Để ra lệnh cho màn hình, người dùng truyền tín hiệu qua tám đường bus DB0-DB7 và các lệnh được nhà sản xuất LCD nạp trực tiếp vào thanh ghi IR Nói cách khác, khi ta nạp một chuỗi lệnh vào thanh ghi IR, LCD sẽ nhận và thực thi các lệnh tương ứng, từ thiết lập chế độ hiển thị đến gửi dữ liệu lên màn hình Quá trình nạp lệnh vào IR giúp chuẩn hóa giao tiếp và đảm bảo sự đồng bộ giữa MCU và LCD, đồng thời tối ưu hóa tốc độ truyền nhận lệnh và độ tin cậy của hệ thống hiển thị.
8 bit, chíp HD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó.
VD : Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
(ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM này gởi ra cho
MPU (ở chế độ đọc) Nghĩa là, khi MPU ghi thông tin vào DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM.
Khi thông tin về địa chỉ được ghi vào IR, dữ liệu tại địa chỉ đó trong RAM nội bộ của HD44780 sẽ được chuyển sang DR và từ DR được truyền ra để hiển thị lên màn hình LCD Quá trình này cho phép bộ điều khiển HD44780 đọc dữ liệu và gửi nội dung tới mạch hiển thị, đảm bảo nội dung cần hiển thị được cập nhật đúng trên màn hình LCD.
Thông qua việc điều khiển hai chân RS và R/W, ta có thể chuyển đổi giữa hai thanh ghi khi giao tiếp với MPU Bảng dưới đây tổng hợp các thiết lập cho RS và R/W tùy theo mục đích giao tiếp, giúp tối ưu hoá quá trình trao đổi dữ liệu và đảm bảo chế độ đọc/ghi phù hợp với từng thao tác.
Bảng 2.2 : Chức năng chân RS và R/W theo mục đích sử dụng
1 1 Đồ án tốt nghiệp Trường ĐH-BRVT
Cờ báo bận BF: (Busy Flag)
Trong quá trình thực thi các hoạt động nội bộ trên chip, mạch nội bên trong cần một khoảng thời gian để hoàn tất Trong thời gian này, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (qua chân DB7 khi RS=0, R/W=1) để báo cho MPU biết LCD đang bận Khi công việc nội bộ kết thúc, nó sẽ đặt cờ BF về mức 0 để cho biết LCD đã sẵn sàng nhận giao tiếp lại.
Bộ đếm địa chỉ AC : (Address Counter)
Trong sơ đồ khối, thanh ghi IR không được kết nối trực tiếp với hai vùng RAM DDRAM và CGRAM mà thông qua bộ đếm địa chỉ AC Bộ đếm này liên kết với hai vùng RAM theo kiểu rẽ nhánh, cho phép lựa chọn vùng RAM tương tác dựa trên tín hiệu điều khiển Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin này được truyền tới cả hai vùng RAM, nhưng việc chọn vùng RAM tương tác đã được tích hợp sẵn trong mã lệnh.
Sau khi ghi vào RAM hoặc đọc từ RAM, bộ đếm AC tự động tăng lên hoặc giảm đi 1 đơn vị, và nội dung của AC được xuất ra cho MPU thông qua DB0-DB6 khi RS=0 và R/W=1; tham khảo bảng tóm tắt RS - R/W để nhận biết các chế độ điều khiển.
Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh và được cập nhật sau khi cờ BF lên mức cao (not busy) Do đó, khi lập trình hiển thị, bạn phải delay tADD khoảng 4 µs-5 µs ngay sau BF=1 trước khi nạp dữ liệu mới; xem hình minh họa bên dưới để tham khảo.
Hình 2.12 : Giản đồ xung cập nhật AC
Vùng RAM hiển thị, còn được gọi là DDRAM (Display Data RAM), là vùng RAM dùng để hiển thị nội dung trên màn hình Mỗi địa chỉ RAM tương ứng với một ô ký tự trên màn hình, và khi bạn ghi vào vùng DDRAM một mã 8-bit, LCD sẽ hiển thị ở vị trí tương ứng trên màn hình ký tự có mã 8-bit mà bạn đã cung cấp Hình minh họa đi kèm sẽ trình bày rõ mối liên hệ giữa địa chỉ RAM và vị trí ký tự trên màn hình.
Hình 2.13 : Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD
Vùng RAM này có dung lượng 80×8 bit, nghĩa là có thể lưu trữ 80 ký tự mã 8-bit Các vùng RAM còn lại không được dùng cho hiển thị có thể được dùng làm RAM đa mục đích.
Lưu ý là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã HEX
Vùng ROM chứa kí tự CGROM: Character Generator ROM
Vùng ROM được dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh và được định địa chỉ bằng 8 bit Tuy nhiên, vùng ROM này chỉ lưu giữ 208 mẫu kí tự 5x8 và 32 mẫu kí tự 5x10, tổng cộng là 240 mẫu kí tự thay vì 256 (2^8) Người dùng không thể thay đổi vùng ROM này Đồ án tốt nghiệp Trường ĐH-BRVT.
Hình 2.14 : Mối liên hệ giữa địa chỉ của ROM và dữ liệu tạo mẫu kí tự.
Như vậy, để ghi vào vị trí thứ x trên màn hình một ký tự y, người dùng phải ghi vào vùng DDRAM tại địa chỉ x một chuỗi mã ký tự 8 bit từ CGROM Bảng mối liên hệ giữa DDRAM và vị trí hiển thị cho thấy mỗi ô hiển thị trên màn hình được ánh xạ với một địa chỉ DDRAM và ký tự y được trình diễn thông qua mã ký tự trong CGROM Chú ý là trong bảng mã ký tự của CGROM ở hình bên dưới có mã ROM A00.
Ví dụ : Ghi vào DDRAM tại địa chỉ “01” một chuỗi 8 bit “01100010” thì trên LCD tại ô thứ 2 từ trái sang (dòng trên) sẽ hiển thị kí tự “b”.
Bảng 2.3 : Bảng mã kí tự (ROM code A00)
Vùng RAM chứa kí tự đồ họa CGRAM : (Character Generator RAM)
Trong bảng mã ký tự, nhà sản xuất dành vùng địa chỉ byte cao 0000 để người dùng tự thiết kế các mẫu ký tự đồ họa riêng Tuy nhiên dung lượng của vùng này rất hạn chế: chỉ có thể tạo 8 ký tự loại 5x8 điểm ảnh hoặc 4 ký tự loại 5x10 điểm ảnh Để ghi dữ liệu vào CGRAM, hãy tham khảo hình 6 ở bên dưới Đây là đồ án tốt nghiệp Trường ĐH-BRVT.
Hình 2.15 : Mối liên hệ giữa địa chỉ của CGRAM, dữ liệu của CGRAM, và mã kí tự.
Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp với LCD :
Trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình điều khiển LCD ta chỉ có thể tác động trực tiếp lên hai thanh ghi DR và IR thông qua các chân DBx, và ta cần thiết lập đúng tín hiệu ở các chân RS và R/W để chuyển qua lại giữa hai thanh ghi này (xem bảng 2).
Module chuyển đổi I2C cho LCD10602
I2C sử dụng hai đường truyền tín hiệu:
Một đường xung nhịp đồng hồ(SCL) chỉ do Master phát đi ( thông thường ở 100kHz và 400kHz Mức cao nhất là 1Mhz và 3.4MHz).
Một đường dữ liệu(SDA) theo 2 hướng.
Có nhiều thiết bị có thể được kết nối đồng thời trên một bus I2C, nhưng sẽ không xảy ra nhầm lẫn giữa các thiết bị vì mỗi thiết bị có một địa chỉ duy nhất và mối quan hệ chủ-tớ (master/slave) tồn tại suốt thời gian kết nối Mỗi thiết bị có thể hoạt động như thiết bị nhận, truyền dữ liệu, hoặc vừa nhận vừa truyền, và chế độ truyền hay nhận phụ thuộc vào vai trò của thiết bị là chủ (master) hay tớ (slave).
Khi một thiết bị hoặc IC được kết nối với bus I2C, nó có một địa chỉ duy nhất để phân biệt và có thể được cấu hình là thiết bị chủ (master) hoặc thiết bị slave Sự phân biệt này tồn tại để xác định quyền điều khiển trên bus I2C, vì master mới là thiết bị điều khiển chính, gửi lệnh và điều phối giao tiếp, trong khi các thiết bị slave chỉ phản hồi theo yêu cầu của master Việc quản lý vai trò master/slave và địa chỉ I2C giúp điều phối dữ liệu giữa các thiết bị trên cùng một bus, tránh xung đột và tối ưu hóa hiệu quả truyền thông.
Trong hệ thống giao tiếp giữa hai thiết bị, thiết bị chủ đảm nhận vai trò tạo xung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốt quá trình truyền dữ liệu Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong quá trình giao tiếp, giúp đồng bộ hóa dữ liệu và kiểm soát chu kỳ truyền tin.
Về lý thuyết lẫn thực tế I2C sử dụng 7 bit để định địa chỉ, do đó trên một bus có
Trong hệ thống I2C, 112 , 16 địa chỉ còn lại được sử dụng vào mục đích riêng Bit còn lại quy định việc đọc hay ghi dữ liệu (1 là write, 0 là read) Điểm mạnh của I2C chính là hiệu suất và sự đơn giản của nó: một khối điều khiển trung tâm có thể điều khiển cả một mạng thiết bị mà chỉ cần hai lối ra điều khiển.
Ngoài chế độ địa chỉ 7‑bit, I2C còn hỗ trợ chế độ địa chỉ 10‑bit với tổng cộng 1024 địa chỉ Tương tự chế độ 7‑bit, chỉ có 1008 thiết bị có thể kết nối trên cùng một bus, còn lại 16 địa chỉ được dùng cho mục đích riêng hoặc các chức năng đặc biệt.
Hình 2.23 Chế độ bit Đồ án tốt nghiệp Trường ĐH-BRVT
THIẾT KẾ MẠCH VÀ CHƯƠNG TRÌNH
Thiết kế mạch trên Proteus
Hình 3.1 Sơ đồ mạch nguyên lí
Sơ đồ mạch in
Hình 3.2 Sơ đồ mạch in
Phần viết chương trình
This microcontroller project demonstrates an SMS/GSM based control system with an Arduino‑style firmware skeleton It defines a GSM SMS handler (SMSGSM sms), buffers for a phone number (char number[20]) and a small value string (char value_str[5]), and a status byte (byte stat), alongside a Vietnamese status variable (trangthai) The code maps hardware interfaces to pins (button1=4, button2=5, cambien=6, dongco=7, loa=8, mode=11, Up=10, Dowm=9) and creates multiple state-tracking variables (modeState, lastmodeState, UpState, DowmState, lastUpState, lastDowmState), as well as button and sensor status indicators (button1Status, button2Status, cambienStatus) and counters (x, y, z, dem) The inclusion of a setup() function indicates initialization for an embedded system where GSM messages, user input from two buttons, and sensor feedback drive mode changes and operational logic, a typical focus of the graduation project at BRVT University.
Đoạn mã khởi tạo và bật LCD bằng lcd.init() và lcd.backlight() Nó cấu hình các chân GPIO của vi điều khiển: chân 7 ở OUTPUT để điều khiển thiết bị ngoài, button1 và button2 ở INPUT để nhận tín hiệu từ nút nhấn, cambien ở INPUT để đọc dữ liệu từ cảm biến, loa ở OUTPUT để phát âm thanh, còn các chân mode và Up ở INPUT Có chú thích về việc cài đặt chân A0 ở trạng thái đọc dữ liệu và lệnh pinMode(dongco, OUTPUT) cho việc điều khiển động cơ hoặc thiết bị liên quan Tóm lại, mã này thiết lập trạng thái ban đầu cho hệ thống, cho phép LCD hiển thị thông tin và tiếp nhận tín hiệu từ nút nhấn, cảm biến, đồng thời sẵn sàng điều khiển loa hoặc động cơ khi cần.
Serial.println("GSM Shield testing."); if (gsm.begin(2400))
Serial.println("\nstatus=READY"); else Serial.println("\nstatus=IDLE");
UpState = digitalRead(Up); if ((UpState != lastUpState)&(UpState ==1))
{ delay(50); digitalWrite(loa,0); y=y+1; lcd.clear(); lcd.setCursor(3, 1); lcd.print(y); lcd.setCursor(5, 1); lcd.print("Phut");
DowmState = digitalRead(Dowm); if ((DowmState != lastDowmState)&(DowmState ==1)) { digitalWrite(loa,1); delay(50); digitalWrite(loa,0); y=y-1; if (y