BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA ĐIỆN
THIẾT LẬP DỰ ÁN CƠ SỞ
ĐỀ TÀI: CHỐNG ÙN TẮC GIAO THÔNG TẠI CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8
GVHD: Nguyễn Đức Toàn SVTH: Trần Anh Quang Nguyễn Hoàng Minh Thống Võ Linh Trúc Phạm Bá Tường
TP.HỒ CHÍ MINH – NĂM – NĂM 2018
15078131 15076471 15080471 15067871
LỜI CẢM ƠN Sau gần 5 tháng thực hiện thiết lậ p dự án k ỹ thuật “CHỐNG ÙN TẮC GIAO THÔNG TẠI CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8” đã hoàn thành một số phần. Lời đầu tiên em muốn nói là em xin chân thành cảm ơn sự hướ ng ng dẫn tận tình của thầy Ths. Nguyễn Đức Toàn, khoa Điện chuyên ngành Điều khiển Tự động của trườ ng ng Đại học công nghiệ p TP.HCM. Dù r ất bận r ộn vớ i công việc những thầy vẫn dành thờ i gian để giúp đỡ và đỡ và động viên cũng như cung cấ p các kinh nghiệm thực tế, các tài liệu liên quan cho chúng em trong suốt quá trình thực hiện đề tài nghiên cứu khoa học này. Xin gửi lờ i cảm ơn đến các thầy cô trong khoa Điện trường Đại Học Công Nghiệ p TP.HCM đã tận tình giảng dạy trong suốt quá trình học cũng như nhận đượ c các ý kiến góp ý. Chính các thầy cô đã xây dựng cho chúng em những kiến thức nền tảng và những kiến thức chuyên môn để có thể hoàn thiện đồ án này cũng như công việc của mình sau này. Em xin chân thành cảm ơn!
Lờ i mở đầ ở đầu
LỜI CẢM ƠN Sau gần 5 tháng thực hiện thiết lậ p dự án k ỹ thuật “CHỐNG ÙN TẮC GIAO THÔNG TẠI CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8” đã hoàn thành một số phần. Lời đầu tiên em muốn nói là em xin chân thành cảm ơn sự hướ ng ng dẫn tận tình của thầy Ths. Nguyễn Đức Toàn, khoa Điện chuyên ngành Điều khiển Tự động của trườ ng ng Đại học công nghiệ p TP.HCM. Dù r ất bận r ộn vớ i công việc những thầy vẫn dành thờ i gian để giúp đỡ và đỡ và động viên cũng như cung cấ p các kinh nghiệm thực tế, các tài liệu liên quan cho chúng em trong suốt quá trình thực hiện đề tài nghiên cứu khoa học này. Xin gửi lờ i cảm ơn đến các thầy cô trong khoa Điện trường Đại Học Công Nghiệ p TP.HCM đã tận tình giảng dạy trong suốt quá trình học cũng như nhận đượ c các ý kiến góp ý. Chính các thầy cô đã xây dựng cho chúng em những kiến thức nền tảng và những kiến thức chuyên môn để có thể hoàn thiện đồ án này cũng như công việc của mình sau này. Em xin chân thành cảm ơn!
Lờ i mở đầ ở đầu
Lờ i mở đầ ở đầu Ngày nay, cùng vớ i sự phát triển kinh tế, các đô thị hóa cũng gia tăng một cách nhanh chóng dẫn đến lượ ng ng giao thông của các phương tiện trong các đô thị cũng tăng theo. Vì vậy, việc giải quyết đảm bảo giao thông trong các đô thị là vô cùng quan tr ọng. Song ọng để song vớ i sự phát triển đó, ngành kĩ thuật điện tử đang đóng một vai trò r ất quan tr ọng đưa con người bướ c sang k ỷ nguyên mớ i.i. Trong số đó, ta không thể không nói đến k ỹ thuật vi điều khiển. K ỹ thuật vi điều khiển đượ c ứng dụng r ộng ộng rãi trong các lĩnh vực k ỹ thuật, đờ i sống và xã hội. Chúng ta có thể biết đến một số các thiết bị k ỹ thuật như thiết bị tự động, thiết bị trong văn phòng và các thiết bị dùng ở trong trong các hộ gia đình dùng các bộ vi điều khiển. Muốn vận hành các thiết bị một cách tự động này, con người cũng càng hoàn thiện các chuẩn giao tiếp để k ết nối chúng lại vớ i nhau thực hiện việc trao đổi thông tin, điều khiển cơ cấu chấ p hành một cách thuận lợi hơn. Vớ i những kiến thức đã đượ c học và kiến thức cậ p nhật, cùng vớ i sự nghiên cứu, ng d ẫn c ủa th ầy giáo. Đề tài đượ c ch ọn là: CHỐNG ÙN TẮC GIAO THÔNG TẠI hướ ng CÁC VÙNG NGOẠI Ô SỬ DỤNG STM8 .
Mục Lục
Mục Lục 1
DẪN NHẬP ........................................................................................................... 7
1.1 Giới thiệu, các vấn đề bất cập. ........................................................................... 7 1.1.1
Tổng quan về đề tài ................................................................................ 7
1.1.2
Ý tưởng thiết kế hệ thống đèn giao thông. .............................................. 7
1.2 Nguyên lý hoạt động của đèn giao thông tại ngã tư. ...........................................8 1.2.1 2
Nguyên tắc hoạt động của đèn giao thông. ............................................. 8
1.2.2 Phương pháp tính toán, đặt thời gian cho tín hiệu giao thông................. 9 TỔNG QUAN URDUINO R3 ................................................................................. 9 2.1 Thông số cơ bản của Mạch Arduino UNO R3................................................... 10 2.2 Nguồn sử dụng.................................................................................................10 2.3 Các chân năng lượng và cổng vào/ra trên Arduino Board. ............................. 10 2.3.1
Các chân năng lượng. .......................................................................... 10
2.3.2
Các cổng I/O . ....................................................................................... 11
2.4 Bộ nhớ sử dụng. ............................................................................................. 12 3 TỔNG QUAN STM8 ........................................................................................... 12
4
3.1.1
GIỚI THIỆU VỀ STM8 .......................................................................... 12
3.1.2
Core...................................................................................................... 14
3.1.3
Memories.............................................................................................. 14
3.1.4
Interrupt management........................................................................... 14
3.1.5
Timers................................................................................................... 14
3.1.6
Communication interfaces..................................................................... 15
3.1.7
Analog to digital converter (ADC) .......................................................... 15
3.1.8 Ưu điểm/hạn chế/ứng dụng .................................................................. 15 TỔNG QUAN VỀ MODULE LORA SX1278 E32-TTL-100 ................................. 15 4.1 Giới thiệu Module Lora SX1278 E32-TTL-100 .................................................. 15 4.1.1
Các đặc trưng của module.................................................................... 15
4.1.2
Các công dụng cơ bản của module ...................................................... 16
4.1.3
Các thông số điện ................................................................................. 16
4.2 Chức năng ....................................................................................................... 18 4.2.1
Chi tiết các chân trên module................................................................ 18
4.2.2
Kết nối với vi điều khiển ngoài. ............................................................. 19
4.2.3
Reset. ................................................................................................... 19
4.2.4
Chi tiết chức năng chân AUX ................................................................ 19
4.3 Các chế độ hoạt động ...................................................................................... 20
5
TẬP LỆNH .......................................................................................................... 22
5.1 Analog
22
5
TẬP LỆNH .......................................................................................................... 22
5.1 Analog .............................................................................................................. 22 5.1.1
uint8_t analogRead(uint8_t pin); ........................................................... 22
5.2 Eeprom............................................................................................................. 23 5.2.1
uint8_t read(uint16_t address); ............................................................. 23
5.2.2
void write(uint16_t address, uint8_t value); ........................................... 23
5.2.3
void update(uint16_t address, uint8_t value);........................................ 23
5.3 Exti ................................................................................................................... 23 5.3.1
EXTI_Port_TypeDef digitalPinToInterrupt(uint8_t pin);.......................... 23
5.3.2 void attachInterrupt(EXTI_Port_TypeDef port, void (*ISR)(), uint8_t in_mode);............................................................................................................ 24 5.4 Generic............................................................................................................. 24 5.4.1 delay_us(unsigned int x); //co the thay the delay_us thanh delayMicroseconds ............................................................................................. 24 5.4.2
void delay_ms(unsigned int x); //co the thay the delay_ms thanh delay 24
5.5 Gpio ................................................................................................................. 25 5.5.1
void pinMode(uint8_t pin, GPIO_Mode_TypeDef mode); ...................... 25
5.5.2
void digitalWrite(uint8_t pin, bool val);................................................... 25
5.5.3
bool digitalRead(uint8_t pin); ................................................................ 25
5.6 PWM ................................................................................................................ 26 5.6.1
void analogWrite(uint8_t pin, uint8_t val); ............................................. 26
5.7 Serial ................................................................................................................ 26 5.7.1
void begin(unsigned long baud); ........................................................... 26
5.7.2
uint8_t available(); ................................................................................ 26
5.7.3
uint8_t read(); ....................................................................................... 26
5.7.4
void write(char c); ................................................................................. 27
5.8 Spi .................................................................................................................... 27 5.9 Wire.................................................................................................................. 27 6
GIAO TIẾP I2C ................................................................................................... 27 6.1 Khái quát về i2c. ............................................................................................... 27 6.2 Đặc điểm giao tiếp I2C. .................................................................................... 27 6.3 Chế độ hoạt động ( Tốc độ truyền). .................................................................. 29 6.3.1
Chế độ tiêu chuẩn:................................................................................ 29
6.3.2
Chế độ cao tốc (High-Speed):............................................................... 29
6.3.3
Trình tự truyền bit trên đường truyền: ................................................... 30
6.4 Điều kiện START và STOP (START and STOP conditions). ............................ 30 6.5 Một số ví dụ ......................................................................................................31
7
Class .................................................................................................................. 33
8
CÁC PHẦN MỀM SỬ DỤNG. ............................................................................. 34
7
Class .................................................................................................................. 33
8
CÁC PHẦN MỀM SỬ DỤNG. ............................................................................. 34
8.1 Phần mềm arduino IDE. ................................................................................... 34 8.1.1
Cài đặt arduino IDE............................................................................... 34
8.1.2
Cài đặt Driver........................................................................................ 35
8.1.3
Giao diện khi khởi động Arduino IDE. ................................................... 37
8.1.4
Vùng lệnh. ............................................................................................ 37
8.1.5
Vùng viết chương trình ......................................................................... 38
8.1.6
Vùng thông báo (debug) ....................................................................... 39
8.1.7
Một số lưu ý. ......................................................................................... 39
8.2 Phần mềm sử dụng là RF_Setting_v3.45 .........................................................41 8.2.1
Cấu hình các thông số cho Module. ...................................................... 41
8.2.2
Định dạng gói tin ................................................................................... 46
8.2.3
Truyền cố định (Fixed mode) ................................................................ 47
8.2.4
Truyền lan r ộng (Broadcast mode) ........................................................ 47
8.3 Phần mềm IAR Embedded Workbench ............................................................ 48 9
THI CÔNG .......................................................................................................... 57
9.1 Lên ý tưởng làn sóng xanh............................................................................... 57 9.1.1
Cấu tạo. ................................................................................................ 57
9.1.2
Giản đồ thời gian cho từng đèn............................................................. 57
9.1.3
Phương pháp tính toán, đặt thời gian cho tín hiệu giao thông............... 58
9.2 Sơ đồ kết nối .................................................................................................... 58 9.3 Lưu đồ giải thuật .............................................................................................. 58 9.4 Triển khai ý tưởng, lập trình, chạy mô hình ...................................................... 60 9.5 Kết quả .............................................................................................................60 9.6 Đánh giá của giáo viên hướng dẫn...................................................................61 9.7 Tổng kết ........................................................................................................... 62
1 DẪN NHẬP 1.1
Giớ i thiệu, các vấn đề bất cậ
1 DẪN NHẬP 1.1 Giớ i thiệu, các vấn đề bất cậ p. 1.1.1 Tổng quan về đề tài Trong xu thế hội nhậ p nền kinh tế quốc tế, việc phát triển công nghiệ p hóa – hiện đại hóa luôn được Đảng và Nhà nước ta đặt ưu tiên hàng đầu trong lĩnh vực phát triển kinh tế, một trong những phương châm đúng đắn và xuyên suốt trong quá trình xây dựng đất nướ c ta ngày càng phát triển trong lĩnh vực công nghệ và khoa học k ỹ thuật cũng như nhiều ngành lĩnh vực khác là đi tắt đón đầu tiế p thu những thành tựu khoa học hiện đại của thế giới để cải tiến nền k ỹ thuật nước nhà, để nướ c ta không còn lạc hậu về khoa học công nghệ. Nhờ chính sách đúng đắn này mà Việt Nam đang tiến dần, tiế p cận các công nghệ hiện đại của thế giớ i từng bướ c cải thiện và hoàn thiện tình tr ạng sản xuất lạc hậu, thủ công, năng suất kém và nhiều lĩnh vực nguy hiểm có tính chất độc hại đến đờ i sống người lao động, nâng cao dần mức sống cho ngườ i dân. Việc tiế p thu những thành tựu khoa học k ỹ thuật của thế giới cùng đi đôi vớ i việc phát triển tầng lớ p k ế thừa có tri thức về công nghệ hiện đại đồng thời cũng có trách nhiệm phát huy, sáng tạo những k ỹ thuật mớ i góp phần phát triển nền khoa học k ỹ thuật nước nhà cũng là góp phần vào việc thúc đẩy công nghệ hiện đại đang phát trên thế giớ i. Ngày nay trên thế giớ i vớ i sự bùng nổ của các ngành công nghệ thông tin , điện tử .v.v.. . Đã làm cho đờ i sống của con ngườ i ngày càng hoàn thiện. Các thiết bị tự động hóa đã ngày càng xâm lấn vào trong sản xuất và thậm chí là vào cuộc sống sinh hoạt hằng ngày của mỗi con ngườ i. Là sinh viên khoa Điện chuyên ngành Điều khiển Tự động của trường Đại học công nghiệ p TP.HCM, vớ i những kiến thức đã học cùng vớ i mong muốn ứng dụng kiến thức tự động hóa đó để đáp ứng đượ c nhu cầu hằng ngày, chúng em đã chọn đề tài trên. 1.1.2 Ý tưở ng thiết k ế hệ thống đèn giao thông. Trong những năm gần đây cùng vớ i sự phát triển của nền kinh tế là tốc độ gia tăng không ngừng về các loại phương tiện giao thông. Sự phát triển nhanh chóng của các phương tiện giao thông đã dẫn đến tình tr ạng tắc nghẽn giao thông xảy ra r ất thườ ng xuyên.Vấn đề đặt ra ở đây là làm sao để đảm bảo giao thông thông suốt và sử dụng đèn điều khiển giao thông ở những ngã tư, những nơi giao nhau của các làn đườ ng là một giải pháp.
Để viết chương trình điều khiển đèn giao thông ta có thể viết trên nhiều hệ ngôn ngữ khác nhau. Nhưng cùng vớ i sự phát triển mạnh mẽ của ngành công nghiệ p chế tạo linh kiện bán dẫn và vi mạch tổng hợ p, một hướ ng phát triển mớ i của các vi xử lý đó hình thành đó là các vi điều khiển. Vớ i nhiều ưu điểm, vi điều khiển đó đượ c sử dụng r ộng rãi trong nhiều lĩnh vực khác nhau. Bằng cách áp dụng vi điều khiển trong quá trình sản xuất và xử lý, vi điều khiển đã thực sự thể hiện được ưu thế của mình so vớ i
các thiết bị điều khiển thông thườ ng. Vì thế việc sử dụng vi điều khiển mang lại hiệu quả khá cao trong việc điều khiển tín hiệu giao thông.
các thiết bị điều khiển thông thườ ng. Vì thế việc sử dụng vi điều khiển mang lại hiệu quả khá cao trong việc điều khiển tín hiệu giao thông. Mục đích của đề tài này là hiểu biết về vấn đề điều khiển giao thông qua họ vi xử lý STM8S và quan tr ọng nhất là những giải pháp giao thông tại các ngã tư và cụm ngã tư nhằm tiết kiệm thờ i gian và ách tắc giao, giải pháp điều khiển đèn giao thông tại các nút giao thông quan tr ọng.
1.2 Nguyên lý hoạt động của đèn giao thông tại ngã tư. 1.2.1 Nguyên tắc hoạt động của đèn giao thông.
Hình 2.3: Mô tả một nút giao thông. Cơ chế hoạt động của đèn giao thông thậ t ra r ất đơn giản: Khi đèn củ a làn đường 1(đx1) đượ c bật sáng thì cùng lúc đó đèn đỏ của làn đường 2 (đđ2), đèn đỏ cho người đi bộ ở làn đường 1(đđn1), đèn xanh người đi bộ làn đườ ng 2 (đxn2) cũng đượ c bật sáng. Sau một khoảng thờ i gian nhất định đx1 tắt,đèn vàng 1(đv1) đượ c bật lên . Khi đv1 tắt thì đđ2, đđn1, đxn2 mớ i tắt cùng lúc đó đèn xanh 2(đx2), đèn 26 đỏ 1(đđ1), đèn đỏ cho người đi bộ 2(đđn2), đèn xanh cho người đi bộ 1(đxn1) đượ c bật sáng. Lúc đèn vàng 2(đv2) đượ c bật lên cũng là lúc đx2 tắt, đv2 tắt chu kì đượ c lậ p lại với đđ2, đx1. Thườ ng thì mỗi cụm ngã tư sẽ có 2 hướng đường: hướ ng 1 và 2. Việc hoạt động của các đèn sẽ có cách tính toán đối xứng với nhau. Đèn xanh của hướ ng này sẽ đi cùng với đèn đỏ của
hướ ng còn lại. Và đèn đỏ sẽ đi với đèn vàng và đèn xanh của hướ ng còn lại. Cứ như vậ y nút giao thông sẽ đượ c vận hành. Ngoài ra còn hướng đi cho người đi bộ
hướ ng còn lại. Và đèn đỏ sẽ đi với đèn vàng và đèn xanh của hướ ng còn lại. Cứ như vậ y nút giao thông sẽ đượ c vận hành. Ngoài ra còn hướng đi cho người đi bộ sẽ chính là đèn đỏ của hướng đó là chiều người đi bộ đượ c tham gia theo chi ều đó. 1.2.2 Phương pháp tính toán, đặ t thờ i gian cho tín hi ệu giao thông. Gọi thoi_gian là kho ảng thờ i gian bằng thời gian phương tiện đi từ ngã tư này đến ngã tư kia thì ta có : quang_duong = van_toc x thoi_gian Trong đó: thoi_gian: thờ i gian chênh lệch giữa hai nút (s). quang_duong: khoảng cách giữa hai nút (m). van_toc: là vận tốc xe (m/s). Dựa vào khoảng cách giữa các nút giao thông ta có th ể tính thờ i gian trung bình của một phương tiệ n vận chuyển giữa các nút , hay còn g ọi là thoi_gian: thờ i gian chênh l ệch giữa hai nút (s).
2 TỔNG QUAN URDUINO 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 (Mạch Arduino Uno R3).
Arduino Uno R3 là dòng cơ bản, linh hoạt, thường đượ c sử dụng cho ngườ i mớ i bắt đầu. Có thể sử dụng các dòng Arduino khác như: Arduino Mega, Arduino Nano,
Arduino Micro… Nhưng vớ i những ứng dụng cơ bản thì 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
Arduino Micro… Nhưng vớ i những ứng dụng cơ bản thì 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, xử lí tín hiệu cho xe điều khiển từ xa, điều khiển động cơ bước, điều khiển động cơ serve, làm một tr ạm đo nhiệt độ – độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác. Thông số cơ bản của Mạch Arduino UNO R3
2.1
Vi đi u khi n Điện áp hoạt động Điện áp khuyên dùng Điện áp vào giớ hạn Digital I/0 pin PWM Digital I/O Pin Analog Pin Input Cường độ dòng điện tối đa trên mỗi I/O pin Cường độ dòng điện nguồn 3.3V tối đa Flash Memory SRAM EEPROM Tốc độ Chiều dài Chiều r ộng Tr ọng lượ ng
Atnega328P 5V 7 – 12V 6 – 20V 14 6 6 20mA 50mA 32KB (ATMEGA328P) 0.5KB đượ c sử dụng thêm bootloader 2KB (ATMEGA328P) 1KB (ATMEGA328P) 16MHz 68.6 mm 53.4 mm 25g
2.2 Nguồn sử dụng. 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 hoặc điện áp giớ i hạn là 6-20V. Thườ ng thì cấ p nguồn bằng pin vuông 9V là hợ p lí nhất nếu 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.
Các chân năng lượ ng và cổng vào/ra trên Arduino Board.
2.3
2.3.1 Các chân năng lượ ng. GND (Ground): cực âm của nguồn điện cấ p cho Arduino UNO. Khi dù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. 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, 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: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy không đượ c lấy nguồn 5V từ
IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy 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. 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Ω.
2.3.2 Các cổng I/O .
Mạch Arduino U NO 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 giải 8bit (giá tr ị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). 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. 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 Broad 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
2.4
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.
Bộ nhớ sử dụng. 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 thì sẽ có khoảng vài KB trong số này sẽ đượ c dùng cho bootloader. 2KB cho SRAM (Static Random Access Memory): Giá tr ị các biến bạn khai báo khi 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à phải bận tâm. Khi mất điện, dữ liệu trên SRAM sẽ bị mất. 1KB cho EEPROM (Electrically Eraseble Programmable Read Only Memory): đây giống như một chiếc ổ cứng mini – nơi mà 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.
3 TỔNG QUAN STM8 3.1.1 GIỚI THIỆU VỀ STM8 STM8 là một nền tảng lõi vi điều khiển 8 bit mạch mẽ của ST vớ i r ất nhiều ngoại vi phổ biến. Nó đượ c sản xuất trên công nghệ 130 nm, đượ c nhúng sẵn bộ nhớ để lưu dữ liệu khi không cung cấp điện (non-volatile memory). Nền tảng STM8 có 4 dòng chip như sau: - STM8S là dòng vi điều khiển chính, đáp ứng vớ i các nhu cầu thông dụng. - STM8L là dòng vi điều khiển tiết kiệm năng lượ ng, thích hợ p cho các ứng dụng dùng Pin, các ứng dụng IoT,... - STM8AF and STM8AL là dòng vi điều khiển dành cho các ứng dụng trong ngành công nghiệ p ô tô. Mức độ ổn định cao nhất trong các dòng STM8. Dòng vi điều khiển STM8 thông dụng ở Việt Nam là STM8S với các đại diện tiêu biểu là các chip STM8S003F3P6, STM8S103F3P6, STM8S103K3T6,... Sở dĩ có điều đó bở i giá thành của chúng r ất thấ p so vớ i mặt bằng chung, nhưng sức mạnh và ngoại vi không hề thua kém và sự hỗ tr ợ của hãng r ất nhiều. Ví dụ đối vớ i STM8S003F3P6, thông số cấu hình cơ bản như sau: Cấu hình STM8S103F3P6 TỐC ĐỘ CLOCK TỐI ĐA CLOCK FLASH RAM
16MHZ 16MHZ 8KB 1KB
EEPROM TIMER(PWM,CCP,WDT,..)
128B 3x(1x8+2x16)
GHI CHÚ
EEPROM TIMER(PWM,CCP,WDT,..) UART, ADC(10BIT), SPI, I2C, WDT, BEEP,…
128B 3x(1x8+2x16) 1
Access line, 16 MHz STM8S 8-bit MCU, up to 8 Kbytes Flash, data EEPROM,10-bit ADC, 3 timers, UART, SPI, pc Datasheet - production data
Features 3.1.2 Core •
•
16 MHz advanced STM8 core with Harvard architecture and 3-stage pipeline Extended instruction set
3.1.3 Memories Program memory: 8 Kbyte Flash; data retention 20 years at 55 o c after 10 kcycle Data memory: 640 byte true data EEPROM; endurance 300 kcycle RAM: 1 Kbyte
Clock, reset and supply management 2.95 to 5.5 V operating voltage Flexible clock control, 4 master clock sources Low power crystal resonator oscillator External clock input Internal, user-trimmable 16 MHz RC Internal low-power 128 kHz RC Clock security system with clock monitor Power management: Low-power modes (wait, active-halt, halt) Switch-off peripheral clocks individually Permanently active, low-consumption poweron and power-down reset
3.1.4 Interrupt management Nested interrupt controller with 32 interrupts
Up to 27 external interrupts on 6 vectors
3.1.5 Timers •
Advanced control timer: 16-bit, 4 CAPCOM channels, 3 complementary outputs, dead-time insertion and flexible synchronization
February 2017
DoclD15441
This is information on a product in full production.
16-bit general purpose timer, with 3 CAPCOM •
channels (IC, OC or PWM) 8-bit basic timer with 8-bit prescaler
•
Auto wake-up timer
14
•
Window watchdog and independent watchdog timers
3.1.6 Communication interfaces • • •
I-JART with clock output for synchronous operation, SmartCard, IrDA, LIN master mode SPI interface up to 8 Mbit/s 12C interface up to 400 kbit/s
3.1.7 Analog to digital converter (ADC) •
•
•
10-bit, ±1 1-SB ADC with up to 5 multiplexed channels, scan mode and analog watchdog Up to 28 1/Os on a 32-pin package including 21 high sink outputs Highly robust I/O design, immune against current injection
3.1.8 Ưu điểm/hạn chế/ứng dụng
4 TỔNG QUAN VỀ MODULE LORA SX1278 E32-TTL-100 4.1
Giớ i thiệu Module Lora SX1278 E32-TTL-100
4.1.1 Các đặc trưng của module E32-TTL-100 là một loại module truyền nhận dữ liệu không dây vớ i công suất 100mW, sử dụng công ngh ệ Lora spreadspectrum, hoạt động ở dãy tần số từ 410~441MHz (Tần số mặc định là 433MHz). Modu le đượ c thiết k ế dựa trên chip RF (radio frequences) SX1278 c ủa SEMTECH. Kiểu truyền dữ liệu minh bạch (Transparent Transmission) đượ c hỗ tr ợ. Các pin logic c ủa module thuộc loại TTL. Vì sử dụng công ngh ệ Lora spreadspectrum nên module có kho ảng cách truyền xa, năng lượ ng truyền theo kiểu tậ p trung – tránh thất thoát công su ất khi truyền, và chống nhiễu tốt.
Module còn có tính năng mã hóa và nén dữ liệu. Dữ liệu truyền trong không khí là d ữ liệu ngẫu nhiên (dữ liệu sau khi đượ c mã hóa). Và v ớ i sự nghiêm ngặt về việc mã hóa và gi ải mã thì sự tấn công dữ liệu đều tr ở nên vô nghĩa. Còn vớ i chức năng nén dữ liệu thì thờ i gian truyền và sự ảnh hưở ng của nhiễu sẽ bị giảm đi đáng kể, trong khi đó vẫn nâng cao đượ c hiệu suất truyền.
15
4.1.2 Các công d ụng cơ bản của module STT
Công dụng Lora Truyền dữ liệu kiểu minh bạch (Transparent) Truyền dữ liệu cố định (Fixed) Tuyền dữ liệu lan r ộng (Broadcast) WOR (wake on radio)
FEC (Forward Error Correction)
Ngủ WatchDog
Lưu các thông số cài đặt
Mô tả Công nghệ Lora spread- spectrum mang đến hiệu quả trong ứng dụng truyền dữ liệu ở khoảng cách xa và nhi ều nhiễu từ môi trườ ng hay các t ừ các thiết bị khác. Mức đọ bảo mật cao, khả năng xâm nhập đánh cắ p dữ liệu r ất thấ p, hầu như là không. Mặc định: Nếu module A nào đó truyền đi 01 02 03 thì module B nào đó cũng chỉ nhận đượ c 01 02 03. Module có thể truyền nhận dữ liệu vớ i các module khác không cùng kênh. Thu ận tiện cho kiểu ứng dụng truyền theo mạng hay truyền theo kiểu lặ p lại (repeater) Với địa chỉ là 0xFFFF thì module có th ể truyền 1 tin t ớ i tất cả các module các có cùng kênh.
Đánh thức module khi có d ữ liệu radio truyền tớ i. Phù hợ p cho các ứng dụng sử dụng pin (battery) Ở chế độ tiết kiệm năng lượ ng (mode 2) thì th ờ i gian phản hồi tối đa của module là 2000ms, v ớ i dòng trung bình t ối đa tiêu thụ đối đa ở chế độ này là dướ i 30uA Khắc phục lỗi gói tin. FEC tăng hiệu suất mã hóa, độ chính xác cao. N ếu nhưng có sự cố không mong mu ốn bất chợ t ảnh hưở ng tớ i gói tin gây m ất độ chính xác thì FEC ch ỉnh sửa lại gói tin một cách tựu động.Vì vậy mà độ tin cậy khi truyền tin đượ c cải thiện. Nếu FEC bị vo hiệu hóa thì các gói d ữ liệu lỗi sẽ bị bỏ qua. Khi module hoạt động ở chế độ ngủ thì sẽ không thể truyền hay nhận tin đượ c nữa. Dòng tiêu t ốn ở chế độ này là 6.0uA Module có tích hợ p bộ watchdog. Khi module x ảy ra sự cố ngoài ý muốn (bị lỗi chẳng hạn) thì module sẽ tự reset trong 0.107 giây, sau có mosule l ại tiế p tục hoạt động vớ i các thông số được cài đặt trước đó. Sau khi module đã được cài đặ t các thông s ố cần thiết thì các thông số này được lưu lại ngay cả khi mất nguồn. Nên tháo nguồn sau đó cấ p nguồn lại sau khi đã cài đặ t các thông số cho module để đảm bảo module hoạt động đúng.
4.1.3 Các thông số điện STT
Tên thông s ố IC Kích cỡ Khối lượ ng Dãy tần số
Chi tiết thông số SX1278 21*36mm 6.7g 433MHz
Mô tả SEMTECH Không có anten Có anten Tần số: 410~441MHz, Số kênh: 32
16
PCB
4 lớ p
Chân cắm Nguồn cấ p
1*7*2.54mm 2.5~5.5V DC
Phạm vi hoạt động
3000m
Công suất truyền
20dBm
Tốc độ truyền
2.4kbps
Dòng điện ở chế độ ngủ. Dòng điện khi truyền. Dòng điện khi nhận Cách giao tiế p vớ i module
3.0uA 120mA – 20dBm 14mA UART
Cấu hình chân giao tiế p vớ i module
UART
Độ dài dữ kiệu truyền Độ dài dữ kiệu nhận Số lượng địa chỉ
512 byte 512 byte 65536
WOR (wake on radio)
Có hỗ tr ợ
Đo cường độ dữ liệu truyền Độ nhạy
Không đượ c hỗ tr ợ
Kiểu anten Nhiệt độ môi trườ ng giớ i hạn để hoạt động Độ ẩm môi trườ ng giớ i hạn để hoạt động Nhiệt độ moi trườ ng giớ i hạn để bảo quản
-138dBm ở tốc độ truyền 0.3kbps SMA-K -40 ~ +85°C 10% ~ 90% -40 ~ +125°C
Tr ở kháng mạch phù hợ p cho công suất cực đại. Không sử dụng chì. Kiểu đực Khuyên dùng ở 5V. Điện áp lớn hơn 5.5V sẽ gây hỏng mạch. Ở môi trườ ng thông thoáng, 20dBm, độ khuếch đại anten: 5dBi, đặt ở độ cao 2m, t ốc độ truyền 2.4kbps 4 sự lựa chọn: 20dBm, 17dBm, 14dBm, 10dBm 6 sự lựa chọn: 0.3kbps, 1.2kbps, 2.4kbps, 4.8kbps, 9.6kbps, 19.2kbps M1=1, M0=1 (Ch ế độ số 3)
Dòng điện hoạt động tối đa ướ c tính không quá 300mA Khi ở chế độ 0 hoặc 1 8N1, 8E1, 8O1, v ớ i 8 kiểu tốc độ truyền UART thông d ụng từ 1200 đến 115200bps (m ặc định: 9600) Có thể đượ c cấu hình ở các dạng: đẩy kéo (push-pull), tr ở kéo lên (high pull), cực thu để hở (open drain). 58 byte trên m ỗi gói tin 58 byte trên m ỗi gói tin Thuận tiện cho truyền dữ liệu kiểu network, broadcast và transparent Dòng tiêu tốn trung bình nhỏ nhất trong chế độ này là 30uA. Phù h ợ p cho các ứng dụng sử dụng pin (battery).
Tr ở kháng 50(OHM). Phù hợ p cho công nghi ệ p
Môi trườ ng không có s ự ngưng tụ. Phù h ợ p cho công nghi ệ p.
17
4.2 Chức năng 4.2.1 Chi tiết các chân trên module
STT
Tên M0 M1 RX TX AUX VCC GND FIX HOLE FIX HOLE FIX HOLE
Chiều tín hiệu INPUT (tr ở kéo lên không t ốt, nên sử dụng tr ở ngoài) INPUT (tr ở kéo lên không t ốt, nên sử dụng tr ở ngoài) INPUT OUTPUT OUTPUT
Mô tả Chân chọn chế độ Không đượ c thả nổi chân này, nên dùng tr ở ngoài kéo lên ho ặc kéo xu ống. Chân chọn chế độ Không đượ c thả nổi chân này, nên dùng tr ở ngoài kéo lên ho ặc kéo xu ống. Chân ngõ vào UART-TTL Chân ngõ ra UART-TTL Chân hiển thị tr ạng thái của module Chân nguồn dương của module Chân ground Chân giữ cố định module Chân giữ cố định module Chân giữ cố định module
18
4.2.2 K ết nối với vi điều khiển ngoài.
4.2.3 Reset. Khi mớ i cấ p nguồn cho module, chân AUX ngay l ậ p tức xuất ra mức thấ p, thể hiện r ằng module đang khởi độ ng và chuẩn bị vào ho ạt động theo các thông s ố được cài đặt trước đó. Chân AUX gi ữ ở mức thấp cho đến khi module vào ho ạt động (vào chế độ hoạt động nào đó dựa trên các m ức ở chân M0 và M1) thì chân AUX m ớ i tr ở về tr ạng thái cao. Vì v ậy sau khi cấ p nguồn cho module thì ngườ i dùng cần chờ cho đến khi phát hi ện xung cạnh lên trên chân AUX thì mới đượ c thực hiện truyền nhận vớ i module. 4.2.4 Chi tiết chức năng chân AUX Chân AUX có thể đượ c sử dụng để hiển thị quá trình truyền nhận dữ liệu không dây ho ặc quá trình khởi động của module. STT
Mô tả Cho biết sắ p có tín hiệu ra tại chân TX. Có th ể dụng thể báo hiệu cho vi điề u khiển ngoài chuẩn bị nhận dữ liệu từ module.
Biểu hiện đang diễn ra qua trình truyền dữ liệu không dây. Sau khi nh ận đượ c dữ liệu từ vi điều khiển ngoài qua chân RX, module ti ến hành quá trình truyền không dây d ữ liệu đã đượ c nhận từ UART, đồng thời khi đó chân AUX giữ ở mức thấ p, xong khi truyền xong một gói dữ liệu thì chân AUX m ức cao, lúc này vi điều khiển ngoiaf có th ể tiế p tục gửi dữ liệu tới module qua đườ ng UART. 19
*Nếu dữ liệu đượ c gửi qua UART trong khi chân AUX đang ở mức thấ p thì sẽ xảy ra lỗi không mong muốn. *Chú ý: khi chân AUX chuy ển từ mức thấ p lên mức cao không có nghĩa là quá trình truyền nhận không dây đã kế t thúc, có thể lúc đó gói dữ liệu cuối cùng vẫn còn đang đượ c gửi.
Thể hiện quá trình kh ởi động của module Quá trình này ch ỉ xảy ra khi: Cấ p nguồn cho module Thoát khỏi chế độ ngủ
4.3
Các chế độ hoạt động
Chế độ(0-3) Chế độ 0 Bình thườ ng
M1 0
M0 0
Chế độ 1 Đánh thức
0
1
Chế độ 2 Tiết kiệm năng lượ ng
1
0
Chế độ 3 Ngủ
1
1
Mô tả UART và kênh truyền không dây đượ c kích hoạt, mở các chế độ truyền đã được cài đặt trước đó. UART và kênh truyền không dây đượ c kích hoạt. Sự khác bi ệt giữa chế độ 1 vớ i chế độ 0 là nó s ẽ tự động thêm vào gói in truyền đi 1 đoạn thông tin để đánh thức module nh ận đang ở chế độ 2. UART bị vo hiệu hóa, module ho ạt động ở chế độ WOR (wake on radio). Ở chế độ này, module ch ỉ kích hoạt UART sau khi nh ận đượ c dữ liệu không dây và vo hi ệu hóa UART sau khi đã truyền xong hết dữ liệu qua UART Chế độ cài đặt các thông số cho Module
Ghi chú Module có vai trò nhận nên hoạt động ở chế độ 0, 1 Module nhận có thể hoạt động ở chế độ 0, 1, 2
Module gửi hoạt động ở chế độ 1 Khi module hoạt động ở chế độ này thì chức năng truyền không dây bị vô hiệu hóa
20
21
Lora SX1278 E32-TTL-100 VCC GND TX RX
USB-TTL CH340G 5V GND RX TX
5 TẬP LỆ LỆNH 5.1 Analog 5.1.1
uint8_t analogRead(uint8_t pin);
Chứ năng:
Đọc giá tr ị analog trên chân ‘pin’.
Tham số: pin: tên chân cần đọc dữ liệu analog.
Tr ả về: Giá tr ị analog đọc đượ c. c.
22
Ví dụ: value = analogRead(AI a nalogRead(AIN2); N2);
5.2 Eeprom 5.2.1 uint8_t read(uint16_t address); Chứ năng: Đọc giá tr ị tại ô nhớ ‘address’ ớ ‘address’
Tham số: address: địa chỉ ô nhớ c cần đọc
Tr ả về: Giá tr ị đang có tại ô nhớ ‘address’ ớ ‘address’
Ví dụ: value = read(10);
5.2.2 void write(uint16_t address, uint8_t value); Chứ năng: Viết (ghi) giá tr ị ‘value’ vào một ô nhớ ‘address’ ớ ‘address’ của EEPROM
Tham số: cần ghi address: địa chỉ của ô nhớ c value: giá tr ị cần ghi vào
Tr ả về:Không có Ví dụ: write(69, 96);
5.2.3 void update(uint16_t address, uint8_t value); Chứ năng: Cậ p nhật giá tr ị tại ô nhớ ‘address’. ng quá trình viết ghi giá tr ị vào EEPROM mất ớ ‘address’. Thông thườ ng khoảng 3.3ms. Đây là khoả ng thờ i gian khá dài so vớ i tốc độ làm việc của vi điều khiển. Vì vậy vớ i hàm ‘update’ này thì vi điều khiển sẽ kiểm tra giá tr ị hiện tại của ô nhớ ‘address’. ớ ‘address’. Nếu giá tr ị hiện tại khác vớ i giá tr ị cần ghi vào thì vi điều khiển mớ i ghi dữ liệu vào EEPROM. Tham số: cần ghi address: địa chỉ của ô nhớ c value: giá tr ị cần ghi vào
Tr ả về: Không có Ví dụ: update(69, 96);
5.3 Exti 5.3.1 EXTI_Port_TypeDef EXTI_Port_TypeDef digitalPinToInterrupt(uint8_t pin); Chứ năng: Xác định danh tính của ‘pin’ là của port nào.
Tham số: pin: chân cần xác định danh tính.
Tr ả về: Tên port mà pin thuộc về.
23
Ví dụ: which_port = digitalPinToInterrupt(PB5); //Ket qua tra ve la EXTI_PORT_GPIOB EXTI_PORT_GPIOB
5.3.2 void attachInterrupt(EXTI_Port_TypeDef attachInterrupt(EXTI_Port_TypeDef port, void (*ISR)(), uint8_t in_mode); Chứ năng: K ết nối ngắt ngoài vớ i hàm thực hiện dịch vụ ngắt (ISR).
Tham số: port: Port cần bật chức năng ngắt ngoài. *ISR: Con tr ỏ dùng để tr ỏ tớ i hàm cần thực hiện dịch vụ ngắt Chế độ ngắt: o LOW: Đi vào ngắt nếu có mức 0 trên chân ngắt o CHANGE: Đi vào ngắt nếu có sự thay đổi tr ạng thái trên chân ngắt (0 lên 1 hoặc 1 xuống 0) o RISING: Đi vào ngắt nếu có sự thay đổi tr ạng thái trên chân ngắt từ mức 0 lên 1 o FALLI NG: NG: Đi vào ngắt nếu có sự thay đổi tr ạng thái trên chân ngắt từ mức 1 xuống 0
Tr ả về: Không có. Ví dụ: attachInterrupt(digitalPinToInterrupt(PD1), attachInterrupt(digitalPinToInterrupt(PD 1), ISR_D1, ISR_D1, FALLING); FALLING); //Ket noi ngat ngat tren chan PD1 toi ham thuc hien phuc vu ngat ISR_D1 khi co su thay doi trang thai tu muc 1 xuong mũ 0 tren chan PD1.
5.4 Generic 5.4.1 delay_us(unsigned delay_us(unsigned int x); //co the thay the delay_us thanh delayMicroseconds delayMicroseconds Chứ năng: Bắt CPU không đượ c làm gì trong thời gian ‘x’ micro giây. Nói cách khác là làm trễ CPU.
Tham số: ‘x’: số micro giây cần làm tr ễ
Tr ả về: Không có Ví dụ: 1. 2. 3. 4. 5.
//Blink chan PB5 digitalWrite(PB5, digitalWrite(PB5, HIGH); //xuat muc cao ra chan delay_us(1000); delay_us(1000) ; //lam tre 1 micro giay digitalWrite(PB5, digitalWrite(P B5, LOW); //xuat muc thap ra chan delay_us(1000); delay_us(1000) ; //lam tre 1 micro giay
5.4.2 void delay_ms(unsigned delay_ms(unsigned int x); x) ; //co the thay the delay_ms thanh delay Chứ năng: Bắt CPU không đượ c làm gì trong thời gian ‘x’ milli giây. Nói cách khác là làm trễ CPU.
Tham số: ‘x’: số milli giây cần làm tr ễ
Tr ả về: Không có Ví dụ: 1. 2. 3. 4.
//Blink chan PB5 digitalWrite(PB5, digitalWrite(PB5, HIGH); //xuat muc cao ra chan delay_ms(1000); delay_ms(1000) ; //lam tre 1 milli giay digitalWrite(PB5, digitalWrite(P B5, LOW); //xuat muc thap ra chan
24
5. delay_ms(1000);
//lam tre 1 milli giay
5.5 Gpio 5.5.1 void pinMode(uint8_t pin, GPIO_Mode_TypeDef mode); Chứ năng: Cài đặt chân ‘pin’ của vi điều khiển là ngõ ra hay ngõ vào
Tham số: pin: tên chân cần cài đặt mode: chức năng (chế độ hoạt động) của pin o OUTPUT: cài đặt chân là ngõ ra o INPUT: cài đặt chân là ngõ vào thả nổi (không kéo tr ở lên VCC hay xuống GND) o INPUT_PULLUP: cài đặt chân là ngõ ra là ngõ vào kéo lên dùng điện tr ở nội (điện tr ở có sẵn bên trong vi điều khiển).
Tr ả về: Không có. Ví dụ: 1. pinMode(PB5, OUTPUT); //Cai dat chan PB5 la ngo ra 2. pinMode(PC1, INPUT); //Cai dat chan PC1 la ngo vao tha noi (floating input) 3. pinMode(PC2, INPUT_PULLUP); //Cai dat chan PB5 la ngo vao keo len
5.5.2 void digitalWrite(uint8_t pin, bool val); Chứ năng: Xuất mức tín hiệu ra chân ‘pin’
Tham số: pin: chân cần xuất tín hiệu val: mức tín hiệu cần xuất o HIGH: mức cao o LOW: mức thấ p
Tr ả về: Không có. Ví dụ: digitalWrite(PB5, HIGH); digitalWrite(PC1, LOW);
5.5.3 bool digitalRead(uint8_t pin); Chứ năng: Đọc mức tín hiệu đang có trên chân ‘pin’
Tham số: pin: chân cần đọc tín hiệu
Tr ả về: Mức tín hiệu hiện đang có trên chân ‘pin’
Ví dụ: signal = digitalRead(PB5);
25
5.6 PWM 5.6.1 void analogWrite(uint8_t pin, uint8_t val); Chứ năng: Xuất xung ra chân ‘pin’
Tham số: pin: chân cần xuất xung val: giá tr ị xung cần xuất (0->255 tương ứng từ 0->100% duty cycle)
Tr ả về: Không có Ví dụ: analogWrite(PD3, 127); //xuat xung 50% duty cycle ra chan PD3
5.7 Serial Serial là một class nên muốn sử dung hàm của class Serial ta cần thêm “Serial.” trướ c hàm cần sử dụng
5.7.1 void begin(unsigned long baud); Chứ năng: Khở i tạo module Uart vớ i tốc độ baud là ‘baud’
Tham số: baud: tốc độ baud cần xử dụng
Tr ả về: Không có. Ví dụ: Serial.begin(9600);
5.7.2 uint8_t available(); Chứ năng: Cho biết hiện trong kho dữ liệu của Serial đang có sẵn có bao nhiêu byte đượ c nhận về từ bên ngoài.
Tham số: Không có
Tr ả về: Số byte đang có trong kho lưu trữ dữ liệu của Serial
Ví dụ: num_of_byte = Serial.available();
5.7.3 uint8_t read(); Chứ năng: Lấy 1 byte dữ liệu từ trong kho Serial theo cơ chế FIFO (First in first out).
Tham số: Không có Tr ả về: Dữ liệu lấy đượ c
Ví dụ: received_data = Serial.read();
26
5.7.4 void write(char c); Chứ năng: Truyền 1 byte dữ liệu qua đườ ng Uart.
Tham số: c: dữ liệu cần truyền đi
Tr ả về: Không có Ví dụ: Serial.write(69);
5.8 Spi 5.9 Wire
6 GIAO TIẾP I2C Khái quát về i2c. Đầu năm 1980 Phillips đã phát triể n một chuẩn giao tiế p nối tiếp 2 dây đượ c gọi là I2C. I2C là tên vi ết tắt của cụm từ Inter-Intergrated Circuit. Đây là đườ ng Bus giao ti ế p giữa các IC vớ i nhau. I2C mặc dù đượ c phát triển bới Philips, nhưng nó đã đượ c r ất nhiều nhà sản xuất IC trên thế giớ i sử dụng. I2C tr ở thành một chuẩn công nghi ệ p cho các giao ti ếp điều khiển, có thể k ể ra đây một vài tên tuổi ngoài Philips như: Texas Intrument(TI), MaximDallas, analog Device, National Semiconductor ... Bus I2C đượ c sử dụng làm bus giao ti ế p ngoại vi cho r ất nhiều loại IC khác nhau như các loại Vi điề u khiển 8051, PIC, AVR, ARM... chip nh ớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự(DAC), IC điểu khiển LCD, LED... 6.1
Bus I2C và các thi ết bị ngoại vi
Đặc điểm giao tiế p I2C. Một giao tiế p I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đườ ng truyền dữ liệu 2 hướng, còn SCL là đườ ng truyền xung đồ ng hồ để đồng bộ và chỉ theo một hướng. Như ta thấ y trên hình vẽ trên, khi một thiết bị ngoại vi k ết nối vào đườ ng bus I2C thì chân SDA của nó sẽ nối vớ i dây SDA của bus, chân SCL s ẽ nối vớ i dây SCL. 6.2
27
K ết nối thiết bị vào bus I2C ở chế độ chuẩn (Standard mode) và ch ế độ nhanh (Fast mode) Mỗi dây SDA hãy SCL đều đượ c nối với điện áp dương của nguồn cấ p thông qua một điện tr ở kéo lên (pullup resistor). S ự cần thiết của các điện tr ở kéo này là vì chân giao ti ế p I2C của các thiết bị ngoại vi thườ ng là dạng cực máng h ở (opendrain hay opencollector). Giá tr ị của các điện tr ở này khác nhau tùy vào t ừng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1K đến 4.7k. Tr ở lại vớ i hình 1, ta thấy có r ất nhiều thiết bị (ICs) cùng đượ c k ết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thi ết bị, bở i mỗi thiết bị sẽ đượ c nhận ra bởỉ một địa chỉ duy nhất vớ i một quan hệ chủ/tớ tồn tại trong suốt thờ i gian k ết nối. Mỗi thiết bị có thể hoạt động như là thiế t bị nhận hoặc truyền dữ liệu hay có th ể vừa truyền vừa nhận. Hoạt động truyền hay nh ận còn tùy thu ộc vào việc thiết bị đó là chủ (master) hãy t ớ (slave). Một thiết bị hay một IC khi k ết nối vớ i bus I2C, ngoài m ột địa chỉ (duy nh ất) để phân biệt, nó còn đượ c cấu hình là thi ết bị chủ hay tớ .Tại sao lại có sự phân biệt này? Đó là vì trên một bus I2C thì quyền điều khiển 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, khi giữa hai thiết bị chủ-tớ giao tiế p thì thiết bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốt quá trình giao tiế p. Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong việc giao tiế p.
Nhìn hình trên ta thấy xung đồ ng hồ chỉ có một hướ ng từ chủ đến tớ , còn luồng dữ liệu có thể đi theo hai hướ ng, từ chủ đến tớ hay ngượ c lại tớ đến chủ.
28
Chế độ hoạt động ( Tốc độ truyền). Các bus I2C có th ể hoạt động ở ba chế độ, hay nói cách khác các d ữ liệu trên bus I2C có thể đượ c truyền trong ba ch ế độ khác nhau. 6.3
1. Chế độ tiêu chuẩn (Standard mode) 2. Chế độ nhanh (Fast mode) 3. Chế độ cao tốc High-Speed (Hs) mode 6.3.1 Chế độ tiêu chuẩn: 1. Đây là chế độ tiêu chu ẩn ban đầu được phát hành vào đầ u những năm 80 2. Nó có t ốc độ dữ liệu tối đa 100kbps 3. Nó sử dụng 7- bit địa chỉ, và 112 đị a chỉ tớ
Tăng cườ ng hoặc chế độ nhanh: 1. Tốc độ dữ liệu tối đa được tăng lên đế n 400 kbps. 2. Để ngăn chặn gai tiếng ồn, Ngõ vào c ủa thiết bị Fast-mode là Schmitt-triggered. 3. chân SCL và SDA của một thiết bị tớ I ² C ở tr ạng thái tr ở kháng cao khi không c ấ p nguồn. 6.3.2 Chế độ cao tốc (High-Speed): Chế độ này đã đượ c tạo ra chủ yếu để tăng tốc độ dữ liệu lên đến 36 lần nhanh hơn so vớ i chế độ tiêu chuẩn. Nó cung c ấ p 1,7 Mbps (vớ i Cb = 400 pF), và 3.4Mbps (v ớ i C> b = 100pF). Một bus I2C có th ể hoạt động ở nhiều chế độ khác nhau: - Một chủ một tớ (one master - one slave) - Một chủ nhiều tớ (one master - multi slave) - Nhiều chủ nhiều tớ (Multi master - Multi slave) Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan h ệ chủ/tớ . Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình đượ c thực hiện như sau: - Thiết bị A (Chủ) xác định đúng đị a chỉ của thiết bị B (tớ ), cùng vớ i việc xác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thi ết bị tớ - Thiết bị A gửi dữ liệu tớ i thiết bị B - Thiết bị A k ết thúc quá trình truyền dữ liệu. Khi A muốn nhận dữ liệu từ B, quá trình di ễn ra như trên, chỉ khác là A s ẽ nhận dữ liệu từ B. Trong giao ti ế p này, A là chủ còn B v ẫn là tớ . Chi tiết việc thiết lậ p một giao tiế p giữa hai thiết bị sẽ đượ c mô tả chi tiết trong các m ục dưới đây.
29
6.3.3 Trình tự truyền bit trên đườ ng truyền:
Thiết bị chủ tạo một điều kiện start. Điều kiện này thông báo cho t ất cả các thiết bị tớ lắng nghe dữ liệu trên đườ ng truyền. Thiết bị chủ gởi địa chỉ của thiết bị tớ mà thiết bị chủ muốn giao tiế p và cờ đọc/ghi dữ liệụ (nếu cờ thiết lậ p lên 1 byte tiế p theo đượ c truyền từ thiết bị tớ đến thiết bị chủ, nếu cờ thiết lậ p xuống 0 thì byte ti ế p theo truyền từ thiết bị chủ đến thiết bị tớ ). Khi thiết bị tớ trên bus I2C có địa chỉ đúng với địa chỉ mà thiết bị chủ gửi sẻ phản hồi lại bằng một xung ACK. Giao tiế p giữa thiết bị chủ và tớ trên bus dữ liệu bắt đầu. Cả chủ và tớ đều có thể nhận hoặc truyền dữ liệu tùy thuộc vào việc truyền thông là đọ c hay vi ết. Bộ truyền gửi 8 bit dữ liệu tớ i bộ nhận, Bộ nhận tr ả lờ i vớ i một bit ACK.
Để k ết thúc quá trình giao ti ế p, thiết bị chủ tạo ra một điều kiện stop. 6.4
Điều kiện START và STOP (START and STOP conditions).
START và STOP là nh ững điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lậ p giao tiế p vớ i một thiết bị nào đó trên bus I2C. START là điề u kiện khởi đầu,báo hiệu bắt đầu của giao tiế p, còn STOP báo hi ệu k ết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP.
Ban đầu khi chưa thực hiện quá trình giao ti ế p, cả hai đường SDA và SCL đề u ở mức cao (SDA = SCL = HIGH). Lúc này bus I2C đượ c coi là r ỗi (“bus free”), sẵn sàng cho m ột giao tiếp. Hai điều kiện START và STOP là không th ể thiếu trong việc giao tiế p giữa các thi ết bị I2C vớ i nhau.
Điều kiện START: Một sự chuyển đồi tr ạng thái từ cao xuống thấp trên đườ ng SDA trong khi đường SCL đang ở mức cao (cao = 1; th ấ p = 0) báo hiệu một điều kiện START. Đỉều kiện STOP: Một sự chuyển đổi tr ạng thái từ mức thấp lên cao trên đườ ng SDA trong khi đường SCL đang ở mức cao. Cả hai điều kiện START và STOP đều đượ c tạo ra bở i thiết bị chủ. Sau tín hiệu START, bus I2C coi như đang trong t r ạng thái làm vi ệc (busy). Bus I2C sẽ r ỗi, sẳn sàng cho m ột giao tiế p mớ i sau tín hiệu STOP từ phía thiết bị chủ. 30
Sau khi có m ột điều kiện START, trong quá trình giao ti ế p, khi có một tín hiệu START đượ c lặ p lại thay vì một tín hiệu STOP thì bus I2C v ẫn tiế p tục trong tr ạng thái bận. Tín hiệu START và l ặ p lại START (Repeated START) đều có chức năng giống nhau là kh ở i tạo một giao tiế p. Truyền dữ liệu: Mỗi xung clock có m ột bit dữ liệu đượ c truyền. Mức tín hiệu SDA chỉ được thay đổi khi xung clock đang ở mức thấ p, và ổn định khi xung clock ở mức cao. Thiết bị tớ có thể lấy mẫu dữ liệu khi xung clock ở mức cao.
6.5 Một số ví dụ o
Master (tr ạm chủ)
1. #include 2. void setup() { 3. // put your setup code here, to run once: 4. Wire.begin(); 5. Serial.begin(9600); 6. } 7. void loop() { 8. // put your main code here, to run repeatedly: 9. if (Serial.available() > 0) 10. { 11. char data = Serial.read(); 12. if (data == '1') 13. { 14. Wire.beginTransmission(17); 15. Wire.write('7'); 16. Wire.endTransmission(); 17. } 18. else if (data == '2') 19. { 20. Wire.beginTransmission(18); 21. Wire.write('8'); 22. Wire.endTransmission(); 23. } 24. else if (data == '3') 25. { 26. Wire.beginTransmission(19); 31
27. Wire.write('9'); 28. Wire.endTransmission(); 29. } 30. } 31. } Slave.(tr ạm con) Tram 17. 1. #define OWN_ADDRESS 17 2. 3. #include 4. 5. void tram(int) 6. { 7. if (Wire.available() > 0) 8. { char c = Wire.read(); 9. 10. Serial.println(c); 11. } 12. } 13. 14. void setup() { 15. // put your setup code here, to run once: 16. Wire.begin(OWN_ADDRESS); 17. Wire.onReceive(tram); 18. Serial.begin(9600); 19. } 20. 21. void loop() { 22. // put your main code here, to run repeatedly: 23. 24. }
Tr ạm 18. 1. #define OWN_ADDRESS 18 2. 3. #include 4. 5. void tram(int) 6. { 7. if (Wire.available() > 0) 8. { char c = Wire.read(); 9. 10. Serial.println(c); 11. } 12. } 32
13. 14. void setup() { 15. // put your setup code here, to run once: 16. Wire.begin(OWN_ADDRESS); 17. Wire.onReceive(tram); 18. Serial.begin(9600); 19. } 20. 21. void loop() { 22. // put your main code here, to run repeatedly: 23. 24. } Tr ạm 19. 1. #define OWN_ADDRESS 19 2. 3. #include 4. 5. void tram(int) 6. { 7. if (Wire.available() > 0) 8. { char c = Wire.read(); 9. 10. Serial.println(c); 11. } 12. } 13. 14. void setup() { 15. // put your setup code here, to run once: 16. Wire.begin(OWN_ADDRESS); 17. Wire.onReceive(tram); 18. Serial.begin(9600); 19. } 20. 21. void loop() { 22. // put your main code here, to run repeatedly: 23. 24. }
7 Class Class là một lớ p,mục đích của lớp này để chúng ta tóm gọn lại cách l ậ p trình,quản lí trương trình tốt hơn,dễ nâng cấ p sửa chữa,nâng cao tư duy và phát hiệ n ra lỗi của trương trình một cách dễ dàng. Class bao gồm 2 thành ph ần cơ bản thườ ng sử dụng: o o
Thuộc tính: là các bi ến của class. Phương thức:là các hàm c ủa class. 33
8 CÁC PHẦN MỀM SỬ DỤNG. 8.1 Phần mềm arduino IDE. 8.1.1 Cài đặt arduino IDE.
Bướ c 1:Truy cập địa chỉ http://arduino.cc/en/Main/Software/... . Đây là nơi lưu trữ cũng như cậ p nhật các bản IDE của Arduino. Bấm vào mục Windows Zip file for non admin install như hình minh họa.
Bướ c 2:Tiế p tục bấm JUST DOWNLOAD để bắt đầu tải.
Bướ c 3: Sau khi download xong, bấm chuột phải vào file vừa download arduino1.8.5-windows.zip và chọn “Extract here” để giải nén.
34
Bướ c 4: Chạy file
để khởi động Arduino IDE.
8.1.2 Cài đặt Driver.
Đầu tiên, chạy file arduino-1.8.5\drivers\dpinst-x86.exe (Windows x86) hoặc arduino-1.6.4\drivers\dpinst-amd64.exe(Windows x64). Cửa sổ “Device Driver Installation Wizard” hiện ra, chọn Next để tiế p tục.
chọn “Install”
35
Đợ i khoảng 10 giây trong lúc quá trình cài đặ t diễn ra…
Quá trình cài đặt đã hoàn tấ t. Bấm “Finish” để thoát.
36
8.1.3 Giao diện khi khởi động Arduino IDE.
8.1.4 Vùng lệnh. Bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help). Phía dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:
37
8.1.5 Vùng viết chương trình
Các chương trình mẫ u có sẵn trong giao diện vào File chọn Examples chọn chương trình mẫu.
38
8.1.6 Vùng thông báo (debug)
Những thông báo từ IDE sẽ đượ c hiển thị tại đây. Để ý r ằng góc dướ i cùng bên phải hiển thị loại board Arduino và cổng COM đượ c sử dụng. Luôn chú ý tớ i mục này bở i nếu chọn sai loại board hoặc cổng COM, sẽ không thể upload đượ c code. 8.1.7 Một số lưu ý. Khi lậ p trình, cần chọn port (cổng k ết nối khi gắn board vào) và board (tên board đượ c sử dụng).
39
40
8.2 Phần mềm sử dụng là RF_Setting_v3.45 8.2.1 Cấu hình các thông số cho Module. Link down: http://www.cdebyte.com/en/pdf-down.aspx?id=199 Khi mớ i mở lên thì phần mềm hiển thị giao diện tiếng Trung Quốc, ta chọn Tab English để chuyển sang tiếng anh.
Sau đó ta dùng module chuyển đổ i giao tiế p USB-TTL bất k ỳ (ở đây sử dụng module CH340G) r ồi nối dây vớ i module Lora SX1278 E32-TTL-100 như dưới đây: 41
Lora SX1278 E32-TTL-100 VCC GND TX RX
USB-TTL CH340G 5V GND RX TX
Tiế p theo ta cắm USB-TTL vào máy tính Vào Start Windows mở Device Manager để xem cổng COM của module USB-TTL
42
43
Quay lại phàn mềm cấu hình Lora, ta chọn COM như trong Device Manager, sau đó click vào “Open Port”
Chọn “GetParam” để lấy các thông số hiện tại của module
44
Dưới đây là các thông số mặc định của nhà sản xuất.
Để đơn giản thì ta chỉ cần thay đồi các thông số “Address”, “Channel” và “Fixed mode” là đã có thể sử dụng. Ví dụ:
45
Sau đó chọn “SetParam” thì phần mềm sẽ nạ p các thông số này vào module
Vậy là đã xong việc cấu hình cho Module. 8.2.2 Định dạng gói tin Module có các ch ế độ truyền dữ liệu không dây ứng với các định dạng gói dữ liệu như sau:
46
8.2.3 Truyền cố định (Fixed mode)
Chức năng: Gửi dữ liệu tớ i 1 nút (module lora khác) nh ất định. Để thực hiện được điều này ta cần truyền vào module gửi 1 gói tin với định dạng như sau:
2 byte địa chỉ
1 byte kênh
Dữ liệu cần truyền (tối đa 58 byte cho 1 gói tin truyền liên tục)
Như ví dụ trên hình là gửi AA BB CC tới nút có địa chỉ 00 03 tại kênh 04 8.2.4 Truyền lan r ộng (Broadcast mode)
K ết cấu gói tin như trên nhưng địa chỉ đượ c thay bằng FF FF. Chức năng: Truyền một gói tin đến tất cả các nút có kênh gi ồng nhau.
47
Như ví dụ ở hình trên: Module gửi có kênh 02 sẽ gửi AA BB CC tớ i tất cả các nút có kênh 04. 8.3 Phần mềm IAR Embedded Workbench Truy cậ p link: http://netstorage.iar.com/SuppDB/Protected/PRODUPD/012818/EWSTM8-3104Autorun.exe Chọn
sau khi chạy xong sẽ hiện lên.
Chọn Install IAR Embedded Workbench For STMicroelectronics STM8, đợ i vài giây sao đó chọ n Next như hình.
48
49
50
Sau đó chọn Install , chờ chương trình chạy xong sau đó chọ n Yes.
51
Tiế p tục chọn Next, chọn Install .
52
Chọn Finish, chọn như hình bên dướ i.
53
54
55
Như vậy việc cài đặt chương trình IAR Embedded Workbench đã hoàn thành.
56
9 THI CÔNG 9.1 Lên ý tưở ng làn sóng xanh quang_duong = van_toc*thoi_gian 9.1.1 Cấu tạo. Hệ thống đèn giao thông hay là đèn điề u khiển giao thông gồm hai cột đèn chính đượ c lắ p đặt tại hai đầu của hai làn đườ ng khác nhau ở ngã tư. Mỗi một cột đèn gồm 6 đèn đó là 3 đèn chính gồm: đèn xanh, đèn đỏ và đèn đỏ; 2 đèn phụ là 2 đèn trên (hình 2.3) dùng điề u khiển làn đường dành cho người đi bộ: đèn xanh người đi bộ và đèn đỏ người đi bộ. 9.1.2 Giản đồ thờ i gian cho từng đèn. Vớ i một chu k ỳ đèn bất k ỳ ta có gi ản đồ thờ i gian hoạt động của từng đèn như sau: Đầu tiên xe là đèn xanh hướng 1 và đèn đỏ hướ ng 2, tiếp đó là đèn đỏ cho người đi bộ ở làn đường 1(đđn1), đèn xanh người đi bộ làn đường 2 (đxn2) cũng đượ c bật sáng. Sau m ột khoảng thờ i gian nhất định đx1 tắt,đèn vàng 1(đv1) đượ c bật lên . Khi đv1 tắt thì đđ2, đđn1, đxn2 mớ i tắt cùng lúc đó đèn xanh 2(đx2), đèn đỏ 1(đđ1), đèn đỏ cho người đi bộ 2(đđn2), đèn xanh cho người đi bộ 1(đxn1) đượ c bật sáng. Lúc đèn vàng 2(đv2) đượ c bật lên cũng là lúc đx2 tắt, đv2 tắt chu kì đượ c lậ p lại với đđ2, đx1… Thườ ng thì mỗi cụm ngã tư sẽ có 2 hướng đường: hướ ng 1 và 2. Vi ệc hoạt động của các đèn sẽ có cách tính toán đố i xứng vớ i nhau. Đèn xanh của hướ ng này sẽ đi cùng với đèn đỏ của hướ ng còn l ại. Và đèn đỏ sẽ đi vớ i đèn vàng và đèn xanh của hướ ng còn lại. Cứ như vậy nút giao thông s ẽ đượ c vận hành: Ngoài ra còn hướng đi cho người đi bộ sẽ chính là đèn đỏ của hướng đó là chiều người đi bộ đượ c tham gia theo chiều đó. 57
9.1.3 Phương pháp tính toán, đặ t thờ i gian cho tín hi ệu giao thông. Gọi thoi_gian là kho ảng thờ i gian bằng thời gian phương tiện đi từ ngã tư này đến ngã tư kia thì ta có : quang_duong = van_toc x thoi_gian
Trong đó: thoi_gian: thờ i gian chênh l ệch giữa hai nút (s). quang_duong: kho ảng cách gi ữa hai nút (m). van_toc: là vận tốc xe (m/s). Dựa vào kho ảng cách gi ữa các nút giao thông ta có th ể tính thờ i gian trung bình c ủa một phương tiện vận chuyển giữa các nút , hay còn g ọi là thoi_gian: thờ i gian chênh l ệch giữa hai nút (s).
9.2 Sơ đồ k ết nối 9.3 Lưu đồ giải thuật
58
BEGIN
SET BUTTION PIN AS INPUT
SET BUZZER PIN AS OUPUT
INIT SERIAL BAUD 9600
SERIAL BUFFER NOT EMPTY
TURN ON BUZZER
DELAY 300MS
TURN OFF BUZZER
FLUSH SERIAL BEGIN
IS BUTTON BE PRESSED
DELAY 300MS
SEND ADDRESS LORA VIA SERIAL
SEND CHANNEl LORA VIA
SEND ANY DATA LORA VIA SERUAL
59
9.4 Triển khai ý tưở ng, lậ p trình, chạy mô hình 9.5
K ết quả
60
9.6
Đánh giá của giáo viên hướ ng dẫn
61