i PHIẾU GIAO ĐỀ TÀI KHÓA LUẬN TỐT NGHIỆP 1 Họ và tên sinh viên nhóm sinh viên được giao đề tài Nguyễn Vũ Thanh, MSSV 14022301 2 Tên đề tài XE ĐIỀU KHIỂN TỪ XA QUA INTERNET VỚI INUT CẢM BIẾN KẾT NỐI VỚI WIFI TRONG NHÀ HOẶC USB WIFI 3G 3 Nội dung Lập trình để điều khiển xe từ App Inventer thông qua Wifi để xe hoạt động với các lệnh sau Chạy tới, chạy lùi, rẻ trái, rẻ phải; điều khiển được tốc độ với hai lệnh tăng tốc độ và giảm tốc độ; biết được khoảng cách từ xe đến vật cản, báo về giao diện điề.
Trang 11 Họ và tên sinh viên/ nhóm sinh viên được giao đề tài
Trang 2-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Trang 3PHIẾU GIAO ĐỀ TÀI KHÓA LUẬN TỐT NGHIỆP i
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN ii
MỤC LỤC iii
DANH SÁCH CÁC HÌNH VẼ v
DANG SÁCH CÁC BẢNG vii
LỜI MỞ ĐẦU viii
CHƯƠNG 1: TỔNG QUAN 1
1.1 Giới thiệu chung về Arduino 1
1.2 Giới thiệu về Arduino Uno R3 3
1.2.1 Một vài thông số của Arduino Uno R3 3
1.2.2 Vi điều khiển 4
1.2.3 Nguồn 4
1.2.4 Các chân năng lượng 5
1.2.5 Bộ nhớ 5
1.2.6 Các cổng vào/ra 5
1.2.7 Lập trình cho Arduino 7
1.3 Module L298 8
1.4 Cảm biến siêu âm SRF05 9
1.5 iNut – Cảm biến 10
1.6 Động cơ DC giảm tốc V1 1:48 11
1.7 Pin sạc 18650 Panasonic 3.7V 1100mAh 2A 12
1.8 Bánh xe động cơ giảm tốc V1 65mm 13
1.9 Sơ đồ kết nối 13
1.10 Truyền và nhận dữ liệu 15
CHƯƠNG 2: PHẦN MỀM 18
2.1 Giao tiếp với Arduino Uno R3 thông qua Arduino IDE 1.8.5 18
2.2 Giao tiếp Arduino Uno với Smartphone (Android) 26
2.2.1 Tạo App 26
Trang 4CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 48
3.1 Kết quả đạt được 48
3.2 Hạn chế 51
3.3 Hướng phát triển 52
3.4 Ứng dụng 53
TÀI LIỆU THAM KHẢO 55
LỜI CẢM ƠN 56
Trang 5
Hình 1.1 Các dòng Arduino qua các năm 2
Hình 1.2 Board Arduino Uno R3 3
Hình 1.3 Vi điều khiển Atmega328P-PU 4
Hình 1.4 Các cổng vào/ra của Arduino Uno R3 6
Hình 1.5 Phần mềm Arduino IDE 8
Hình 1.6 Mạch điều khiển động cơ DC L298 9
Hình 1.7 Cảm biến siêu âm SRF05 10
Hình 1.8 iNut - Cảm biến 11
Hình 1.9 Động cơ DC giảm tốc 1:48 12
Hình 1.10 Pin sạc 18650 Panasonic 3.7V 1100mAh 2A 12
Hình 1.11 Bánh xe động cơ giảm tốc V1 65mm 13
Hình 1.12 Sơ đồ kết nối 15
Hình 2.1 Phần mềm Arduino IDE 18
Hình 2.2 Tạo một project 28
Hình 2.3 Giao diện sau khi tạo một New project 28
Hình 2.4 Giao diện trong User Interface 29
Hình 2.5 Giao diện trong Layout 30
Hình 2.6 Giao diện trong Connectivity 30
Hình 2.7 Màn hình hiển thị các icon 31
Hình 2.8 Giao diện bên Properties 31
Hình 2.9 Screen bên Viewer sau khi đổi tên 32
Hình 2.10 Vị trí Button1 khi được thêm vào 32
Hình 2.11 Thay đổi tên, kích thước của Button1 cho thích hợp 33
Hình 2.12 Thêm TableArrangement 33
Hình 2.13 Chỉnh kích thước của TableArrangement 34
Hình 2.14 TableArrangement sau khi chỉnh 34
Hình 2.15 Thao tác thêm ảnh 35
Hình 2.16 Hình ảnh sau khi được thêm và chỉnh sửa 35
Hình 2.17 Cấu trúc thiết kế bên Components 36
Trang 6Hình 2.19 Màn hình làm việc khi click sang Blocks 38
Hình 2.20 Các câu lệnh ở dạng Blocks 38
Hình 2.21 Cửa sổ thao tác câu lệnh 39
Hình 2.22 Chọn Block When Forward TouchDown từ Forward 39
Hình 2.23 Kéo thả call prepare_web1 được lấy từ Procedures vào When Forward TouchDown 40
Hình 2.24 Kéo thả call Web1.PostText được lấy từ Web1 vào When Forward TouchDown 41
Hình 2.25 Kéo thả (“ “) được lấy từ Text vào When Forward TouchDown 42
Hình 2.26 Điều khiển động cơ 43
Hình 2.27 Đồngg bộ dữ liệu với xe 44
Hình 2.28 Khỏi tạo các biến global 44
Hình 2.29 Khối lệnh Web và khối lệnh dừng 44
Hình 2.30 Khối lệnh đồng bộ dữ liệu 45
Hình 2.31 Khối lệnh lấy dữ liệu 45
Hình 2.32 Giải nén ra trường dữ liệu khi nhận được kết quả 46
Hình 2.33 Quét code lấy mã iNut-Cảm biến 47
Trang 7Bảng 1.1 Thông số cơ bản của Arduino Uno R3 4 Bảng 1.2 Kết nối các chân thiết bị 14
Trang 8
Ngày nay khoa học công nghệ ngày càng phát triển, vi điều khiển AVR và vi điều khiển PIC ngày càng thông dụng và hoàn thiện hơn , nhưng có thể nói sự xuất hiện của Arduino vào năm 2005 tại Italia đã mở ra một hướng đi mới cho vi điều khiển Sự xuất hiện của Arduino đã hỗ trợ cho con người rất nhiều trong lập trình và thiết kế, nhất là đối với những người bắt đầu tìm tòi về vi điều khiển mà không có quá nhiều kiến thức, hiểu biết sâu sắc về vật lý và điện tử Phần cứng của thiết bị đã được tích hợp nhiều chức năng
cơ bản và là mã nguồn mở Ngôn ngữ lập trình trên nền Java lại vô cùng dễ sử dụng tương thích với ngôn ngữ C và hệ thư viện rất phong phú và được chia sẻ miễn phí Chính vì những lý do như vậy nên Arduino hiện đang dần phổ biến và được phát triển ngày càng mạnh mẽ trên toàn thế giới
Thế mạnh của arduino so với các nền tảng vi điều khiển khác :
- Chạy trên đa nền tảng: việc lập trình trên các hệ điều hành khác nhau như Window, Mac Os, Linux trên destop, android trên di động
- Ngôn ngữ lập trình đơn giản ,dễ hiểu
- Nền tảng mở: Arduino được thiết kế và sử dụng theo dạng module nên việc mở rộng phần cứng khá dễ dàng
- Đơn giản và nhanh: dễ dàng lắp ráp và sử dụng thiết bị
- Dễ dàng chia sẽ: mọi người dễ đàng chia sẽ mã nguồn với nhau mà không lo lắng về ngôn ngữ hay hệ điều hành mình đang sử dụng
Một hệ thống Arduino có thể cung cấp cho bạn rất nhiều sự tương tác với môi trường xung quanh với:
Hệ thống cảm biến đa dạng về chủng loại (đo nhiệt độ ,độ ẩm ,gia tốc , vận tốc, cường độ ánh sáng, màu sắc vật thể, lưu lượng nước, phát hiện chuyển động, phát hiện kim loại,…)
Các thiêt bị hiển thị (màn hình LCD, đèn LED, …)
Trang 9các kết nối không dây thông dụng (3G, GPRS, Bluetooth, 315/433Mhz, 2.4Ghz,…) Định vị GPS, nhắn tin SMS và nhiều thứ thú vị khác
Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản đến phức tạp Trong
số đó có một vài ứng dụng thực sự chứng tỏ khả năng vượt trội của Arduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức tạp Sau đây một ứng dụng của Arduino là xe điều khiển bằng Internet Bản báo cáo này trình bày kết quả nghiên cứu công nghệ Internet của các thiết bị điện tử chạy trên nền hệ điều hành Android và ứng dụng vào thiết kế mô
hình xe điều khiển từ các thiết bị Android qua kết nối Internet với mục đích để tìm hiểu
thêm về Arduino, làm quen với các thiết bị điện tử, cách lập trình giao tiếp với máy tính và nâng cao hiểu biết cho bản thân Do kiến thức còn hạn hẹp nên chắc chắn không tránh khỏi những thiếu sót ,hạn chế vì thế em rất mong có được sự góp ý và nhắc nhỡ từ giảng viên để
có thể hoàn thiện đề tài của mình
Em xin chân thành cảm ơn giảng viên hướng dẫn Nguyễn Ngọc Anh Tuấn đã giúp đỡ em rất nhiều trong quá trình tìm hiểu, thiết kế và hoàn thành đề tài đồ án cơ sở này
Trang 10CHƯƠNG 1: TỔNG QUAN
1.1 Giới thiệu chung về Arduino
Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ thứ 9 là King Arduin Arduino chính thức được đưa ra giới thiệu vào năm 2005 như
là một công cụ khiêm tốn dành cho các sinh viên của giáo sư Massimo Banzi, là một trong những người phát triển Arduino, tại trường Interaction Design Instistute Ivrea (IDII) Mặc
dù hầu như không được tiếp thị gì cả, tin tức về Arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹp của những người dùng đầu tiên Hiện nay Arduino nổi tiếng tới nỗi có người tìm đến thị trấn Ivrea chỉ để tham quan nơi đã sản sinh ra Arduino
Arduino thật ra là một bo mạch vi xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với một ngôn ngữ lập trình
có thể học một cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình
Và điều làm nên hiện tượng Arduino chính là mức giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mềm
Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY ( là những người
tự sáng chế ra sản phẩm của mình) trên toàn thế giới trong vài năm gần đây, gần giống với những gì mà Apple đã làm được trên thị trường thiết bị di động Số lượng người dùng cực
kì lớn và đa dạng với trình độ trải rộng từ bậc phổ thông đến bậc đại học đã làm cho ngay
cả những người sáng tạo ra cũng phải ngạc nhiên về mức độ phổ biến
Trang 11Hình 1.1 Các dòng Arduino qua các năm
Trang 12Mỗi dòng lại có những điểm mạnh và điểm yếu riêng, tuy nhiên, đều là sự sáng tạo của những con người sáng tạo nên mạch Arduino Nhờ những sáng tạo này, họ đã tạo nên một hệ sinh thái vô cùng lớn với Arduino Chỉ cần một mạch Arduino, bạn đã có thể tự xây dựng cho mình những cổ máy sáng tạo như máy in 3d, máy khắc laser,…Hay là những dự
án mạng cảm biến hoặc là những dự án mini robot, bạn có thể tự làm cho mình một cái ngay tại nhà
Cùng với thời gian, sự sáng tạo của Arduino càng ngày càng lan rộng và những nhà sản xuất IC hàng đầu thế giới đã xây dựng nên những máy tính thật sự và bạn có thể dùng Arduino để lập trình chúng, như là Intel Edison hay Intel Galileo Và cũng từ đó, đã có sự phân hóa nhánh mạnh mẽ thực sự của Arduino IDE Một nhánh thì phát triển phục vụ nhánh
cũ (nhánh vi điều khiển), còn một bên lại port (viết lại) các câu lệnh, thư viện của Arduino cho hệ máy 32bit như Intel Edison, Intel Galileo,
1.2 Giới thiệu về Arduino Uno R3
Hình 1.2 Board Arduino Uno R3
1.2.1 Một vài thông số của Arduino Uno R3
Trang 13Bảng 1.1 Thông số cơ bản của Arduino Uno R3
Điện áp hoạt động 5V DC (chỉ được cấp qua cổng USB)
Số chân Digital I/O 14 (6 chân hardware PWM)
Số chân Analog 6 (độ phân giải 10bit)
ẩm và hiển thị lên màn hình LCD,…
1.2.3 Nguồn
Arduino UNO 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à giới hạn là 6-20V Thường thì cấp nguồn bằng
Trang 14pin vuông 9V là hợp lí nhất nếu bạn không có sẵn nguồn từ cổng USB Nếu cấp nguồn vượt quá ngưỡng giới hạn trên, sẽ làm hỏng Arduino UNO
1.2.4 Các chân năng lượng
các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau
của nguồn với chân này và cực âm của nguồn với chân GND
ở chân này Và dĩ nhiên nó luôn là 5V Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn
việc chân RESET được nối với GND qua 1 điện trở 10KΩ
1.2.5 Bộ nhớ
32KB bộ nhớ Flash: những đoạn lệnh chúng ta lập trình sẽ được lưu trữ trong
bộ nhớ Flash của vi điều khiển Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho bootloader nhưng đừng lo, hiếm khi nào cần quá 20KB bộ nhớ này đâu
lập trình sẽ lưu ở đây Khai báo càng nhiều biến thì càng cần nhiều bộ nhớ RAM Tuy vậy, thực sự thì cũng hiếm khi nào bộ nhớ RAM lại trở thành thứ mà chúng
ta phải bận tâm Khi mất điện, dữ liệu trên SRAM sẽ bị mất
đây giống như một chiếc ổ cứng mini – nơi có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM
1.2.6 Các cổng vào/ra
Trang 15Hình 1.4 Các cổng vào/ra của Arduino Uno R3 Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA Ở mỗi chân đều
có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối)
Một số chân digital có các chức năng đặc biệt như sau:
2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive
– RX) dữ liệu TTL Serial Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây Nếu không cần giao tiếp Serial, không nên sử dụng 2 chân này nếu không cần thiết
Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép xuất ra xung PWM với độ phân
Nói một cách đơn giản, có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác
Trang 16 Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài các
chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác
LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút
Reset, sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng, LED sẽ sáng
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0
→ 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V Với chân AREF trên board, có thể
để đưa vào điện áp tham chiếu khi sử dụng các chân analog Tức là nếu cấp điện áp 2.5V vào chân này thì có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác
1.2.7 Lập trình cho Arduino
Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung Và Wiring lại là một biến thể của C/C++ Một số người gọi nó là Wiring, một số khác thì gọi là C hay C/C++ Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu
Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch Arduino, chúng ta sử dụng phần mềm lập trình Arduino được gọi là Arduino IDE (Intergrate Development Environment) như hình dưới đây:
Trang 17Hình 1.5 Phần mềm Arduino IDE
1.3 Module L298
Mạch điều khiển động cơ DC L298 có khả năng điều khiển 2 động cơ DC, dòng tối
đa 2A mỗi động cơ, mạch tích hợp diod bảo vệ và IC nguồn 7805 giúp cấp nguồn 5VDC cho các module khác (chỉ sử dụng 5V này nếu nguồn cấp <12VDC)
Mạch điều khiển động cơ DC L298 dễ sử dụng, chi phí thấp, dễ lắp đặt, là sự lựa chọn tối ưu trong tầm giá
Trang 18Hình 1.6 Mạch điều khiển động cơ DC L298
Thông số kỹ thuật:
IC chính: L298 - Dual Full Bridge Driver
Điện áp đầu vào: 5~30VDC
Công suất tối đa: 25W 1 cầu (lưu ý công suất = dòng điện x điện áp nên áp cấp vào càng cao, dòng càng nhỏ, công suất có định 25W)
Dòng tối đa cho mỗi cầu H là: 2A
Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss
Kích thước: 43x43x27mm
1.4 Cảm biến siêu âm SRF05
Cảm biến SRF05 là phiên bản nâng cấp của SRF04, cảm biến dùng để nhận biết khoảng cách đến vật cản nhờ sóng siêu âm phát ra từ cảm biến và nhận về (Quãng đường
= vận tốc x thời gian / 2), theo thông tin từ nhà sản xuất và test thực tế thì SRF05 gần như
là giống với SRF04 về cách sử dụng, SRF05 có thêm 1 chân Out, theo nhà sản xuất thì có
Trang 19thể chỉ dùng chân này mà không cần đến chân trigger và echo, nó sẽ tự nhận và phản hồi lại xung luôn nhưng test thực tế thì không có gì xảy ra
Lưu ý cảm biến siêu âm càng xa thì càng bắt không chính xác, vì góc quét của cảm biến sẽ mở rộng dần theo hình nón, ngoài ra bề mặt xiên hay xù xì cũng làm giảm độ chính xác của cảm biến, thông số kỹ thuật ghi ở dưới đây là của nhà sản suất test trong điều khiện
lý tưởng, còn thực tế thì tùy theo môi trường
Hình 1.7 Cảm biến siêu âm SRF05
Thông tin cơ bản:
Trang 20của module ESP-12 Hỗ trợ giao tiếp với Wifi vì thế dễ dàng thu thập và truyển tải dữ liệu qua internet
Hình 1.8 iNut - Cảm biến
Thông tin chi tiết:
Vi điều khiển: ESP8266EX
Wifi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điện áp hoạt động: 3.3V
Điện áp vào: 5V thông qua cổng USB
Giao tiếp: Cable Micro USB
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Nhiệt độ hoạt động : -40 ℃ ~ + 125 ℃
Chuẩn giao tiếp với thiết bị lập trình đệm: I2C 100Mhz
Số lượng cảm biến: Tùy chọn 1-8 cảm biến
1.6 Động cơ DC giảm tốc V1 1:48
Trang 211.7 Pin sạc 18650 Panasonic 3.7V 1100mAh 2A
Hình 1.10 Pin sạc 18650 Panasonic 3.7V 1100mAh 2A
Trang 22Thông số kỹ thuật:
Kiểu pin: 18650
Điện áp trung bình 3.7VDC, sạc đầy 4.2VDC
Dung lượng: 1100mAh
Trang 23Bảng 1.2 Kết nối các chân thiết bị
Arduino
Uno R3
Module L298
Trang 24Hình 1.12 Sơ đồ kết nối
1.10 Truyền và nhận dữ liệu
Truyền dữ liệu (lập trình viên => Arduino):
key đó thông qua phần mềm iNut trên điện thoại của người lập trình Người lập trình có thể thu hồi key này bất cứ lúc nào
tạp ít hay nhiều Ví dụ người lập trình gửi lệnh UP => chạy tới
Trang 25Sơ đồ truyền dữ liệu:
Nhận dữ liệu (Arduino => lập trình viên):
tối đa 8 biến để người lập trình gán giá trị như trong đoạn code ở trên
chỉnh trong app iNut)
App inventor gửi một request HTTPS lên Server iNut Platform để lấy thông tin hiện tại của iNut
Gồm:
o Hướng di chuyển hiện tại
o Khoảng cách cảm biến siêu âm
o Tốc độ
Dịch vụ iNut Platform (Internet)
Kiểm tra đúng key
Trả về kết quả là gửi được hay không ?
Gửi qua giao tiếp I2C
Gửi lệnh
và key
Trang 26Sơ đồ nhận dữ liệu:
Dịch vụ iNut Platform (Internet)
Arduino
Gửi dữ liệu Internet
Gửi về cho lập trình viên đã có key và đăng
ký lắng nghe dữ liệu
Gửi qua giao tiếp I2C
Trang 27CHƯƠNG 2: PHẦN MỀM
2.1 Giao tiếp với Arduino Uno R3 thông qua Arduino IDE 1.8.5
Hình 2.1 Phần mềm Arduino IDE
Trang 28Lưu đồ cho Arduino: Cấp điện
cho arduino
Khai báo thư viện; cài đặt module L298, module siêu
âm và iNut cảm biến
Sau mỗi 1s đồng
bộ các biến dữ liệu với iNut cảm biến
Lấy độ xa cảm biến siêu âm
Điều khiển module động cơ L298
So sánh khoảng dừng xe
Nhận lệnh
xử lý từ iNut cảm biến
Trang 29Kết nối:
Bước 1: Click vào Tools→ Board→Arduino/Genuino Uno
Bước 2: Click vào Tools→Port→COM (tùy vào Board Arduino được kết nối với cổng USB nào thì chọn cổng COM đó)
Code :
#include <Wire.h>
#define N_SENSOR 3
float sensors[N_SENSOR];
const int trig = 9; // chân trig của HC-SR04
const int echo = 8; // chân echo của HC-SR04
#define HOW_FAR_SHOULD_WE_STOP 10 //Khoảng cách từ cảm biến đến vật cản bao nhiêu thì xe tự dừng? - 10cm
//l298 - module điều khiển động cơ
#define TIMEOUT_TO_CHECK_SENSOR 10UL
int direction; //Biến lưu trữ hướng đi của Robot hiện tại
//Cài đặt chương trình
void setup()
{
Trang 30pinMode(trig, OUTPUT); // chân trig sẽ phát tín hiệu
pinMode(echo, INPUT); // chân echo sẽ nhận tín hiệu
}
//Các biến lưu trữ lệnh khi nhận được lệnh từ iNut - Cảm biến
volatile char buffer[33];
volatile boolean receiveFlag = false;
//Khi nhận được lệnh từ iNut cảm biến thì lắng nghe
void receiveEvent(int howMany)
{
Wire.readBytes((byte*)buffer, howMany);
Trang 31//Buộc phải có nếu bạn muốn gửi dữ liệu
char* data = (byte*)&sensors;
if (receiveFlag) { //khi có tín hiệu là đã nhận được lệnh
String command = buffer; //chép lệnh vào biến String cho dễ xử lý
Serial.print(command); // in ra lệnh
Serial.print(' ');
Serial.println(millis()); //in ra thời gian theo millis tính từ lúc arduino chạy để debug
Trang 32//Cho xe chạy 500ms thôi để lỡ có chạm mạch thì còn xử lý được :))
static unsigned long timer = 0;
if (millis() - timer > 1500UL) {