Để góp phần làm sáng tỏ hiệu quả của những ứng dụng trong thực tế của mô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
Tự động hóa là lĩnh vực công nghệ quan trọng thúc đẩy phát triển kinh tế và xã hội của mỗi quốc gia Khi ngành này được đầu tư và ứng dụng rộng rãi, nó có thể tăng năng suất và cải thiện chất lượng sản phẩm, từ đó nâng cao sức cạnh tranh của nền công nghiệp Tuy nhiên ở nước ta, quy mô và năng lực làm chủ công nghệ tự động hóa còn yếu, khiến cho sự phát triển bị hạn chế và ảnh hưởng đến nhiều mặt của nền kinh tế Nhìn theo hướng tích cực, đây là cơ hội để ngành tự động hóa khai thác nhu cầu lớn từ nền sản xuất còn lạc hậu, đồng thời đẩy mạnh chuyển giao công nghệ, đào tạo nhân lực và đổi mới sáng tạo để đất nước có thể vươn lên trong kỷ nguyên số.
Ngành tự động hóa nông nghiệp nước ta đang đối mặt với mức độ thiếu hụt và yếu kém đáng kể, đặt ra yêu cầu phải đẩy mạnh giải pháp công nghệ để nâng cao chất lượng và sản lượng nông nghiệp Đầu tư vào tự động hóa, ứng dụng cảm biến, trí tuệ nhân tạo và robot nông nghiệp sẽ giúp tối ưu quá trình canh tác, giảm chi phí và tăng hiệu quả sản xuất Để thành công, cần giải quyết các vấn đề về hạ tầng CNTT, chuẩn hóa dữ liệu và thúc đẩy chuyển đổi số trong nông nghiệp Đồng thời, trọng tâm là nâng cao năng lực lao động, đào tạo nguồn nhân lực có kỹ năng công nghệ cao và tăng cường hợp tác giữa nhà nước, doanh nghiệp và cơ sở nghiên cứu để hình thành các chuỗi giá trị nông nghiệp bền vững.
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.
Tính tối ƣu của đề tài
2.1 Giới thiệu về Mạch Arduino UNO R3
Mạch Arduino Uno là dòng mạch Arduino phổ biến dành cho người mới bắt đầu làm quen và lập trình với Arduino Khi bắt đầu học Arduino, người dùng thường nhắc tới Arduino Uno như nền tảng cơ bản để học tập và thử nghiệm Hiện mạch Uno đã phát triển tới thế hệ thứ 3.
Arduino Uno R3 là dòng mạch Arduino cơ bản và linh hoạt, thường được sử dụng cho người mới bắt đầu học lập trình và điện tử Bạn có thể khám phá các dòng Arduino khác như Arduino Mega, Arduino Nano hoặc Arduino Micro, nhưng với các ứng dụng ở mức cơ bản thì mạch Arduino Uno sẽ là lựa chọn phù hợp nhất Uno dễ tiếp cận, có cộng đồng hỗ trợ rộng và khả năng mở rộng cho nhiều dự án phổ biến, giúp người học nhanh chóng làm quen và hiện thực hóa ý tưởng của mình.
THIẾT BỊ VÀ CÁC GIẢI PHÁP CÔNG NGHỆ
Giới thiệu về Mạch Arduino UNO R3
Arduino Uno là dòng mạch Arduino phổ biến, đặc biệt dành cho người mới bắt đầu làm quen với lập trình và điện tử nhờ sự đơn giản và dễ tiếp cận Đây là nền tảng lý tưởng để học các khái niệm nhúng, từ kết nối cảm biến đến điều khiển động cơ và thư viện hỗ trợ phong phú Hiện Arduino Uno đã phát triển tới thế hệ thứ 3 (Uno R3), với những cải tiến về ổn định kết nối USB, tương thích tốt hơn với nhiều shield và bổ sung các chân I2C (SDA/SCL), giúp người dùng mở rộng dự án một cách linh hoạt và hiệu quả hơn.
Arduino Uno R3 là dòng cơ bản và linh hoạt, thường được lựa chọn cho người mới bắt đầu học lập trình và điện tử Arduino Ngoài Uno, người dùng có thể xem xét các dòng Arduino khác như Arduino Mega, Arduino Nano hay Arduino Micro, nhưng với các ứng dụng ở mức căn bản thì mạch Arduino Uno là lựa chọn phù hợp nhất để bắt đầu và làm quen với các dự án thực 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
Trong lĩnh vực điện tử nhúng, các ứng dụng tiêu biểu gồm LED nhấp nháy để làm tín hiệu thị giác, xử lý tín hiệu cho xe điều khiển từ xa, điều khiển động cơ bước và điều khiển động cơ servo cho các hệ thống robot và máy gia công nhỏ, cùng với việc làm một trạm đo nhiệt độ – độ ẩm và hiển thị dữ liệu lên màn hình LCD, bên cạnh nhiều ứng dụng khác liên quan đến tự động hóa, giám sát môi trường và điều khiển thiết bị từ xa.
Arduino UNO R3 là mạch có thiết kế tiêu chuẩn sử dụng vi điều khiển ATmega328; 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 tương đương với chức năng giống nhau nhưng rẻ hơn, chẳng hạn như ATmega8 với bộ nhớ flash 8KB hoặc các phiên bản khác như ATmega48/ATmega168 để vẫn đảm bảo khả năng lập trình và tương thích với IDE Arduino.
ATmega168 (bộ nhớ flash 16KB)
Arduino UNO R3 có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7–12V DC và điện áp giới hạn từ 6–20V Khi không có nguồn từ cổng USB, cấp nguồn bằng pin vuông 9V là lựa chọn hợp lý Tuy nhiên, cấp nguồn vượt quá ngưỡng giới hạn có thể làm hỏng Arduino UNO.
GND (Ground) là cực âm của nguồn cấp cho Arduino UNO Khi làm việc với các thiết bị sử dụng nguồn điện riêng biệt, các chân GND của chúng phải được nối với nhau để tạo một điểm tham chiếu đất chung cho toàn mạch Việc nối GND đúng cách giúp ổn định điện áp, giảm nhiễu và đảm bảo Arduino UNO cùng các module hoạt động nhất quán 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 để cho biết điện áp hoạt động của vi điều khiển và có thể đo tại chân này; trên UNO nó luôn là 5V Tuy nhiên, IOREF không phải là nguồn cấp điện, vì vậy bạn không nên lấy nguồn 5V từ chân IOREF để cấp cho các mô-đun hay thiết bị, bởi chức năng của IOREF là cung cấp tham chiếu điện áp cho shield chứ không phải cấp nguồn.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET đƣợc nối với GND qua 1 điện trở 10KΩ
Arduino UNO không có bảo vệ ngược nguồn, nên phải hết sức cẩn thận và kiểm tra kỹ các cực âm và dương của nguồn trước khi cấp nguồn cho Arduino UNO Việc cắm nhầm nguồn có thể gây chập mạch và biến Arduino UNO thành một miếng nhựa chặn giấy; nếu xảy ra, bo mạch có thể bị hỏng Vì vậy, nên dùng nguồn từ cổng USB nếu có thể để giảm thiểu rủi ro cho dự án và bảo vệ Arduino UNO.
Chân 3.3V và 5V trên Arduino là các chân cấp nguồn ra cho các thiết bị ngoài, không phải là nguồn cấp vào cho board Cấp nguồn sai vị trí có thể làm hỏng board và các linh kiện liên quan Điều này được nhà sản xuất không khuyến khích vì rủi ro cao khi sử dụng các chân này làm nguồn cấp Để an toàn cho dự án Arduino, hãy chỉ cấp nguồn từ đúng nguồn và tuân thủ hướng dẫn, chỉ dùng chân 3.3V và 5V cho tải ngoài khi thiết kế và điện áp phù hợp.
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 mọi chân Digital hoặc Analog không được vượt quá 40 mA, vì vượt quá ngưỡng này có thể làm hỏng vi điều khiển Vì vậy, khi chân không được dùng để truyền nhận dữ liệu, bạn nên mắc một điện trở hạn dòng để bảo vệ vi điều khiển và cả mạch.
Khi làm việc với mạch Arduino, đặc biệt với người mới bắt đầu, việc cấp nguồn cần thận trọng để tránh hỏng mạch và nguy cơ điện Bạn nên ưu tiên nguồn 5V chuẩn qua USB để cấp nguồn cho Arduino, hoặc dùng nguồn 9V cấp cho cổng Vin (cổng đầu vào nguồn) của mạch để đảm bảo vận hành ổn định Tránh sử dụng nguồn không ổn định hoặc quá áp có thể gây hỏng các thành phần.
Arduino Trách trường hợp hỏng mạch Arduino
Vi điều khiển Atmega328 tiêu chuẩn sử dụng trên Arduino uno r3 có:
32KB bộ nhớ Flash của vi điều khiển là nơi lưu trữ các đoạn mã lệnh bạn phát triển Thông thường, một phần nhỏ của bộ nhớ này (khoảng vài KB) được dành cho bootloader, nhưng bạn hiếm khi cần vượt quá 20KB cho bootloader, để vẫn còn đủ không gian cho mã ứng dụng và dữ liệu, đồng thời tối ưu hóa kích thước firmware và khả năng mở rộng cho dự án.
2KB cho SRAM (bộ nhớ tĩnh truy cập ngẫu nhiên) là nơi lưu trữ 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 Tuy nhiên, theo thực tế, RAM hiếm khi là điều bạn phải lo lắng quá nhiều trong dự án phát triển Dữ liệu trên SRAM là volatile và sẽ bị mất khi nguồn điện bị ngắt.
EEPROM (Electrically Erasable Programmable Read-Only Memory) là loại bộ nhớ phi biến đổi cho phép đọc và ghi dữ liệu, và dữ liệu được lưu giữ ngay cả khi nguồn điện bị ngắt, do đó nó thường được ví như một ổ cứng mini cho dữ liệu nhúng Với khả năng lưu trữ lâu dài và an toàn, EEPROM là lựa chọn phổ biến cho các hệ thống nhúng khi cần khôi phục dữ liệu sau mất nguồn mà không phải lo mất thông tin.
Các cổng vào/ra trên Arduino Board
Hình 2.3: Các cổng ra/vào
Mạch Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu
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
Module này sử dụng giao diện TTL, cho phép kết nối trực tiếp với MCU hoặc ARM mà không cần thiết bị chuyển đổi, và không dùng các liên kết máy tính như cổng USB, RS232, RS485 hay các giao tiếp nối tiếp khác; nếu kết nối sai, module sẽ bị cháy.
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
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
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp vỏ và chỉ đƣa các chân giao tiếp cần thiết
Bảng 2.1 : Chức năng các chân của LCD
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển
2 VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với
VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0”
(GND) hoặc logic “1” (VCC) để chọn thanh ghi
Trong chế độ Logic 0, các đường bus DB0-DB7 được nối với thanh ghi lệnh IR của LCD ở chế độ ghi (write) hoặc với bộ đếm địa chỉ của LCD ở chế độ đọc (read).
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
5 R/W Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic
“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu đƣợc đặt lên bus
DB0-DB7, các lệnh chỉ đƣợc chấp nhận khi có 1 xung cho phép của chân E
Ở chế độ ghi, dữ liệu trên bus được LCD nhận và chuyển vào thanh ghi bên trong ngay khi phát hiện xung chuyển từ cao xuống thấp của tín hiệu chân E Quá trình này được đồng bộ với cạnh xuống (high-to-low transition) của tín hiệu E, đảm bảo dữ liệu trên bus được ghi đúng vào thanh ghi nội bộ và sẵn sàng cho các bước xử lý tiếp theo.
Trong chế độ đọc, dữ liệu từ LCD được xuất ra trên DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E, và LCD sẽ giữ dữ liệu trên bus cho đến khi chân E xuống mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU
Có 2 chế độ sử dụng 8 đường bus này :
* 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
Sơ đồ khối của HD44780 cho thấy cách các chân của chíp hoạt động và tương tác với nhau để điều khiển màn hình LCD Để hiểu rõ chức năng từng chân, ta xem xét HD44780 qua các khối cơ bản của nó—từ khối xử lý lệnh và dữ liệu đến khối điều khiển hiển thị và giao tiếp với vi điều khiển—nhờ đó nắm được cơ chế hoạt động và cách tín hiệu được xử lý để hiển thị ký tự và hình ảnh trên 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
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 đóng vai trò nhận lệnh điều khiển LCD thông qua tám đường bus DB0-DB7 Mỗi lệnh được nạp vào thanh ghi IR và từ đó chíp HD44780 sẽ tra cứu bảng mã lệnh tại địa chỉ do IR cung cấp trước khi thực thi 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 RAM DDRAM hoặc CGRAM
Trong chế độ ghi hoặc để chứa dữ liệu từ hai vùng RAM này gửi cho MPU ở chế độ đọc, nghĩa là khi MPU ghi thông tin vào DR, mạch nội bộ của chip sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM Ngược lại, khi thông tin về địa chỉ được ghi vào IR, dữ liệu tại địa chỉ đó trong RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho MPU.
Việc điều khiển chân RS và chân R/W cho phép ta chuyển đổi giữa hai trạng thái và giữ hai thanh ghi này khi giao tiếp với MPU Bảng dưới đây tóm tắt các thiết lập đối với hai chân RS và R/W theo mục đích giao tiếp, giúp xác định cách kích hoạt chế độ đọc/ghi và đồng bộ dữ liệu giữa MPU và các thiết bị liên quan.
Bảng 2.2 : Chức năng chân RS và R/W theo mục đích sử dụng
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Cờ báo bận BF: (Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất Khi đang thực thi các hoạt động bên trong chip nhƣ thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập
RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận” Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0
Bộ đếm địa chỉ AC : (Address Counter)
Trong sơ đồ khối, thanh ghi IR không kết nối trực tiếp với DDRAM và CGRAM mà thông qua bộ đếm địa chỉ AC Bộ đếm này nối với hai vùng RAM theo kiểu rẽ nhánh, cho phép cả hai vùng RAM nhận dữ liệu cùng lúc nhưng việc chọn vùng RAM tương tác lại được chỉ định bởi mã lệnh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được kết nối tới hai vùng RAM, và xác định vùng RAM cần tương tác được quyết định bởi nội dung của mã lệnh.
Khi ghi vào RAM hoặc khi đọ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 qua DB0-DB6 khi RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W).
Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà được cập nhật sau khi cờ BF lên mức cao (not busy); vì vậy khi lập trình hiển thị, bạn phải delay tADD khoảng 4 µs–5 µs ngay sau khi BF=1 trước khi nạp dữ liệu mới Xem hình bên dưới để tham khảo.
Hình 2.12 : Giản đồ xung cập nhật AC
Display Data RAM (DDRAM) là vùng RAM hiển thị dùng để lưu trữ và trình bày các ký tự trên màn hình LCD Mỗi địa chỉ DDRAM tương ứng với một ô ký tự trên màn hình; khi bạn ghi một mã 8 bit vào một địa chỉ DDRAM, LCD sẽ hiển thị ký tự có mã 8 bit đó tại vị trí tương ứng trên màn hình Hình minh họa cho thấy mối liên hệ giữa địa chỉ DDRAM và vị trí ký tự trên màn hình, giúp làm rõ cách dữ liệu hiển thị trên giao diện người dùng.
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ó kích thước 80×8 bit, tức là lưu được 80 ký tự mã 8 bit Các vùng RAM còn lại không phục vụ cho hiển thị có thể được tận dụng như RAM đa mục đích để lưu trữ dữ liệu và hỗ trợ các tác vụ xử lý của hệ thống.
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 này chứa các mẫu kí tự ở hai kích thước 5x8 và 5x10 điểm ảnh, được địa chỉ bằng 8 bit Tổng cộng có 208 mẫu kí tự 5x8 và 32 mẫu kí tự 5x10, tức là 240 mẫu kí tự (không đạt 256 mẫu của 2^8) Người dùng không thể thay đổi vùng ROM này.
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ự
Để ghi ký tự y tại vị trí thứ x trên màn hình, người dùng ghi vào vùng DDRAM tại địa chỉ x một chuỗi mã ký tự 8 bit từ CGROM; điều này cho thấy mối liên hệ giữa DDRAM và vị trí hiển thị Lưu ý trong bảng mã ký tự 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)
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
Trên bus I2C có thể kết nối đồng thời nhiều thiết bị mà không nhầm lẫn nhờ mỗi thiết bị có địa chỉ duy nhất và mối quan hệ master-slave được xác định suốt thời gian kết nối Mỗi thiết bị có thể đóng vai trò nhận dữ liệu, truyền dữ liệu hoặc vừa nhận vừa truyền trên I2C Hoạt động truyền hay nhận dữ liệu phụ thuộc vào vai trò của thiết bị là master hay slave trong hệ thống.
Trên bus I2C, mỗi thiết bị (hoặc IC) khi kết nối không chỉ có một địa chỉ duy nhất để phân biệt mà còn được cấu hình là thiết bị chủ hay thiết bị tớ Sự phân biệt này tồn tại vì quyền điều khiển trên bus I2C thuộc về thiết bị chủ Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, và khi hai thiết bị chủ-tớ giao tiếp với nhau thì thiết bị chủ có nhiệm vụ phát xung đồng hồ cũng như quản lý địa chỉ của thiết bị tớ trong suốt quá trình trao đổi dữ liệu Do đó, thiết bị chủ đóng vai trò chủ động, còn thiết bị tớ đóng vai trò bị động trong quá trình giao tiếp.
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, có một số địa chỉ còn lại được dùng cho mục đích riêng và một bit nữa quyết định thao tác đọc hay ghi dữ liệu (1 = ghi, 0 = đọc) Điểm mạnh của I2C là hiệu suất và sự đơn giản: một vi điều khiển trung tâm có thể điều khiển toàn bộ mạng thiết bị chỉ với hai đường dây điều khiển, giúp kết nối các thiết bị một cách hiệu quả và gọn nhẹ.
Trong I2C, chế độ địa chỉ 10-bit cho phép có tới 1024 địa chỉ, mở rộng so với địa chỉ 7-bit truyền thống Tuy nhiên, trên một bus I2C chỉ có thể kết nối tối đa 1008 thiết bị, vì 16 địa chỉ còn lại được dành cho mục đích riêng.
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 Arduino GSM/SMS-focused sketch declares a set of variables to support hardware control and messaging: a 20-character phone number buffer (number[20]), a status flag (stat), a small value buffer (value_str[5]), and a collection of pin assignments including button1 (pin 4), dong co (motor) at pin 7, loa (speaker) at pin 8, cambien (sensor) at pin 6, and button2 at pin 5, with mode, Up (pin 10), and Dowm (pin 9) inputs at pins 11, 10, and 9 respectively; it also introduces numerous state-tracking integers (modeState, lastmodeState, UpState, DowmState, lastUpState, lastDowmState) along with status and counters (button1Status, button2Status, cambienStatus, x, y, z, dem) to monitor changes and drive logic The inclusion of a setup() function signals the initialization phase for configuring serial communication, the GSM module, and the hardware, enabling the system to respond to user actions, manage operational modes, and send or receive SMS messages through the GSM module while maintaining robust state management.
Đoạn mã Arduino này khởi tạo màn hình LCD bằng lệnh lcd.init() và bật đèn nền lcd.backlight(), đồng thời thiết lập các chân I/O cho các thiết bị liên quan Chân 7 được cấu hình ở OUTPUT để điều khiển thiết bị, trong khi chân button1 và button2 được đặt INPUT để đọc tín hiệu từ nút nhấn Chân A0 có chú thích cài đặt ở trạng thái đọc dữ liệu Chân dongco được cấu hình OUTPUT để điều khiển động cơ, chân cambien (cảm biến) ở INPUT để nhận dữ liệu từ cảm biến, chân loa ở OUTPUT để phát âm thanh, và các chân mode cùng Up được đặt INPUT để nhận chế độ và lệnh từ người dùng Đoạn mã này cho thấy cách tích hợp LCD với động cơ, cảm biến, nút nhấn và loa trong một dự án Arduino, tối ưu cho việc quản lý dữ liệu cảm biến và điều khiển thiết bị ngoại vi thông qua các chân I/O.
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))
{ digitalWrite(loa,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