Arduino, ứng dụng vi điều khiển arduino trong lập trình điều khiển tự động, đây là tài liệu thm khảo hữu ích đối với những người mới bắt đầu học tập nghiên cứu và làm các dự án nhỏ.Arduino là một nền tảng nguyên mẫu (mã nguồn mở) dựa trên nền phần mềm và phần cứng dễ sử dụng. Nó bao gồm một bo mạch thứ mà có thể được lập trình và một phần mềm hỗ trợ gọi là Arduino IDE (Môi trường phát triển tích hợp cho Arduino), được sử dụng để viết và nạp từ mã máy tính sang bo mạch vật lý. Robot tự động là lĩnh vực đang rất phát triển và được ứng dụng trong đời sống ngày càng nhiều như robot vận chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật. Robot phục vụ sinh hoạt gia đình… Điểm hạn chế của các robot tự hành hiện tại là tính thiếu linh hoạt và khả năng thích ứng khi làm việc ở những vị trí khác nhau. Các ứng dụng của robot đang dần thay thế sức lao động của con người. Và sự tiên tiến của Robot ngày càng gia tăng nhờ vào sự phát triển của khoa học và kỹ thuật.
1 MỞ ĐẦU Cuộc cách mạng khoa học công nghệ diễn ta cách sơi động tồn giới thúc đẩy lồi người nhanh chóng bước sang kỷ nguyên Đó kỷ nguyên văn minh dựa sở cơng nghiệp trí tuệ Cùng với phát triển nhanh chóng cơng cụ xử lý tín hiệu, lập trình vi điều khiển Đặc biệt “Cấu trúc lập trình hệ đo lường điều khiển” ngày ứng dụng rộng rãi công nghiệp ứng dụng thực tế đời sống Hiện nay, ứng dụng Arduino thực hữu ích sử dụng nhiều hệ thống vi điều khiển: Từ điều khiển robot, điều khiển kho quân thông minh, chế tạo xe chuyển hàng quân tự động, điều khiển hệ thống đèn giao thơng… Với vấn đề nêu trên, nhóm thực chuyên đề “Xây dựng hệ thống điều khiển cụm đèn tín hiệu giao thơng ứng dụng vi điều khiển arduino” Nhằm nâng cao khả nghiên cứu khoa học ứng dụng Arduino lập trình hệ đo lường điều khiển Ngồi ra, ứng dụng nhiều sản phẩm thực tế mang lại nhiều lợi ích hiệu làm sở cho trình học tập nghiên cứu đơn vị TỔNG QUAN VỀ BO MẠCH ARDUINO 1.1 Giới thiệu chung bo mạch arduino Tổng quan Arduino Arduino sử dụng rộng rãi giới, ngày chứng tỏ sức mạnh chúng thông qua vô số ứng dụng độc đáo người dùng cộng đồng nguồn mở (open-source) Tuy nhiên Việt Nam Arduino chưa biết đến nhiều Nội dung phân nhằm giới thiệu số thông tin Arduino với hy vọng cung cấp cho người dùng DIY thêm lựa chọn đầy tiềm để thực dự án Hình Hình ảnh mơ tả kích thước nhỏ gọn bo mạch Arduino Từ xuất cộng đồng mã nguồn mở lập trình phần cứng, Arduino thực gây sóng gió thị trường người dùng DIY (là người tự chế sản phẩm mình) toàn giới vài năm gần đây, gần giống với Apple làm thị trường thiết bị di động Số lượng người dùng cực lớn đa dạng với trình độ trải rộng từ bậc phổ thông lên đến đại học làm cho người tạo chúng phải ngạc nhiên mức độ phổ biến Vậy, Arduino mà khiến sinh viên nhà nghiên cứu trường đại học danh tiếng MIT, Stanford, Carnegie Mellon phải sử dụng; Google muốn hỗ trợ cho đời kit Arduino Mega ADK dùng để phát triển ứng dụng Android tương tác với cảm biến thiết bị khác? Thật vậy, Arduino bo mạch vi xử lý dùng để lập trình tương tác với thiết bị phần cứng cảm biến, động cơ, đèn thiết bị khác Đặc điểm bật Arduino môi trường phát triển ứng dụng dễ sử dụng, với ngôn ngữ lập trình học cách nhanh chóng với người am hiểu điện tử lập trình Và điều làm nên tượng Arduino mức giá thấp tính chất nguồn mở từ phần cứng tới phần mềm Chỉ với khoảng $30, người dùng sở hữu bo Arduino có 20 ngõ I/O tương tác điều khiển chừng thiết bị Arduino đời thị trấn Ivrea thuộc nước Ý đặt theo tên vị vua vào kỷ thứ King Arduin Arduino thức đưa giới thiệu vào năm 2005 công cụ khiêm tốn dành cho sinh viên giáo sư Massimo Banzi, người phát triển Arduino, trường Interaction Design Instistute Ivrea (IDII) Mặc dù không tiếp thị cả, tin tức Arduino lan truyền với tốc độ chóng mặt nhờ lời truyền miệng tốt đẹp người dùng Hiện có nhiều người tìm đến thị trấn Ivrea để tham quan nơi sản sinh Arduino Một số ứng dụng bật bo mạch Arduino chọn làm não xử lý nhiều thiết bị từ đơn giản đến phức tạp Trong số có vài ứng dụng thực chứng tỏ khả vượt trội Arduino chúng có khả thực nhiều nhiệm vụ phức tạp Sau danh sách số ứng dụng bật Arduino, đem lại tiện lợi hiệu nhiều lĩnh vực đời sống công nghiệp Máy in 3D: Một cách mạng khác âm thầm định hình nhờ vào Arduino, phát triển máy in 3D nguồn mở Reprap Máy in 3D công cụ giúp tạo vật thể thực trực tiếp từ file CAD 3D Công nghệ hứa hẹn nhiều ứng dụng thú vị có cách mạng hóa việc sản xuất cá nhân Robot: Do kích thước nhỏ gọn khả xử lý mạnh mẽ, Arduino chọn làm xử lý trung tâm nhiều loại robot, đặc biệt robot di động đa Thêm vào đó, khả kết nối với cảm biến module mở rộng giúp robot thực nhiều nhiệm vụ đa dạng Thiết bị bay không người lái UAV: UAV ứng dụng đặc biệt thíchhợp với Arduino chúng có khả xử lý nhiều loại cảm biến Gyro, accelerometer, GPS… điều khiển động servo khả truyền tín hiệu từ xa Game tương tác: Việc đọc cảm biến tương tác với PC nhiệm vụ đơn giản Arduino Do nhiều ứng dụng game tương tác có sử dụng Arduino Điều khiển ánh sáng: Các tác vụ điều khiển đơn giản đóng ngắt đèn LED hay phức tạp điều khiển ánh sáng theo nhạc tương tác với ánh sáng laser thực với Arduino, mở rộng phạm vi ứng dụng lĩnh vực sáng tạo giải trí Kích hoạt chụp ảnh tốc độ cao: Đây ứng dụng đơn giản đặc biệt hữu ích với đam mê chụp ảnh Ứng dụng giúp tạo ảnh độc đáo ghi lại khoảnh khắc xảy cực nhanh mà khơng có dụng cụ hỗ trợ khó lịng ghi lại Trên vài ví dụ minh họa cho khả ứng dụng Arduino Khi tìm kiếm Google, bạn tìm thấy vơ số ứng dụng có sử dụng Arduino Ngồi tham khảo trang web để tìm hiểu thêm nhiều ứng dụng độc đáo Khả bo mạch arduino Bo mạch Arduino thường sử dụng dòng vi xử lý 8-bit megaAVR Atmel với hai chip phổ biến ATmega328 ATmega2560 Các dịng vi xử lý cho phép lập trình ứng dụng điều khiển phức tạp trang bị cấu hình mạnh với loại nhớ ROM, RAM Flash, ngõ vào digital I/O có nhiều ngõ có khả xuất tín hiệu PWM, ngõ đọc tín hiệu analog chuẩn giao tiếp đa dạng UART, SPI, TWI (I2C) Sức mạnh xử lý: Xung nhịp: 16MHz EEPROM: 1KB (ATmega328) 4KB (ATmega2560) SRAM: 2KB (Atmega328) 8KB (Atmega2560) Flash: 32KB (Atmega328) 256KB (Atmega2560) Đọc tín hiệu cảm biến ngõ vào: Digital: Các bo mạch Arduino có cổng digital cấu hình làm ngõ vào ngõ phần mềm Do người dùng linh hoạt định số lượng ngõ vào ngõ Tổng số lượng cổng digital mạch dùng Atmega328 14, Atmega2560 54 Analog: Các bo mạch Arduino có trang bị ngõ vào analog với độ phân giải 10-bit (1024 phân mức, ví dụ với điện áp chuẩn 5V độ phân giải khoảng 0.5mV) Số lượng cổng vào analog Atmega328, 16 Atmega2560 Xuất tín hiệu điều khiển ngõ ra: Digital output: Tương tự cổng vào digital, người dùng cấu hình phần mềm để định dùng ngõ digital ngõ Tổng số lượng cổng digital mạch dùng Atmega328 14 Atmega2560 54 PWM output: Trong số cổng digital, người dùng chọn số cổng dùng để xuất tín hiệu điều chế xung PWM Độ phân giải tín hiệu PWM 8-bit Số lượng cổng PWM bo dùng Atmega328 6, bo dùng Atmega2560 14 PWM có nhiều ứng dụng viễn thông, xử lý âm điều khiển động mà phổ biến động servos máy bay mơ hình Chuẩn Giao tiếp: Serial: Đây chuẩn giao tiếp nối tiếp dùng phổ biến bo mạch Arduino Mỗi bo có trang bị số cổng Serial cứng (việc giao tiếp phần cứng chip thực hiện) Bên cạnh đó, tất cổng digital cịn lại thực giao tiếp nối tiếp phần mềm (có thư viện chuẩn, người dùng khơng cần 10 phải viết code) Mức tín hiệu cổng TTL 5V Lưu ý cổng nối tiếp RS-232 thiết bị PC có mức tín hiệu UART 12V Để giao tiếp hai mức tín hiệu, cần phải có chuyển mức, ví dụ chip MAX232 Số lượng cổng Serial cứng Atmega328 Atmega2560 Với tính giao tiếp nối tiếp, bo Arduino giao tiếp với nhiều thiết bị USB: Các bo Arduino tiêu chuẩn có trang bị cổng USB để thực kết nối với máy tính dùng cho việc tải chương trình Tuy nhiên chip AVR khơng có cổng USB, bo Ardunino phải trang bị thêm phần chuyển đổi từ USB thành tín hiệu UART Do máy tính nhận diện cổng USB cổng COM cổng USB tiêu chuẩn SPI: Đây chuẩn giao tiếp nối tiếp đồng có bus gồm có dây Với tính bo Arduino kết nối với thiết bị LCD, điều khiển video game, điều khiển cảm biến loại, đọc thẻ nhớ SD MMC… TWI (I2C): Đây chuẩn giao tiếp đồng khác bus có hai dây Với tính này, bo Arduino giao tiếp với số loại cảm biến thermostat CPU, tốc độ quạt, số hình OLED/LCD, đọc real-time clock, chỉnh âm lượng cho số loại loa… Mơi trường lập trình bo mạch Arduino Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính thơng dụng mang lại nhiều lợi cho Arduino, nhiên sức mạnh thực nằm phần mềm Môi trường lập trình đơn giản dễ sử dụng, ngơn ngữ lập trình Wiring dễ hiểu dựa tảng C/C++ quen thuộc với người làm kỹ thuật Và quan trọng số lượng thư viện code viết sẵn chia sẻ cộng đồng nguồn mở lớn Mơi trường lập trình Arduino IDE chạy ba tảng phổ biến Windows, Macintosh OSX Linux Do có tính chất nguồn mở nên mơi trường lập trình hồn tồn miễn phí mở rộng thêm người dùng có kinh nghiệm Ngơn ngữ lập trình mở rộng thông qua thư viện C++ Và ngơn ngữ lập trình dựa tảng ngơn ngữ C AVR nên người dùng hồn tồn nhúng thêm code viết AVR C vào chương trình muốn Các loại bo mạch Arduino Về mặt chức năng, bo mạch Arduino chia thành hai loại: loại bo mạch có chip Atmega loại mở rộng thêm chức cho bo mạch (thường gọi shield) Các bo mạch giống chức năng, nhiên mặt cấu số lượng I/O, dung lượng nhớ, hay kích thước có khác Một số bo có trang bị thêm tính kết nối Ethernet Bluetooth Các bo mở rộng chủ yếu mở rộng thêm số tính tính kết nối Ethernet, Wireless, điều khiển động v.v… 1.2 Tổng quan bo mạch arduino uno Tổng quan Arduino Uno Arduino Uno bo mạch vi xử lý hoạt động dựa ATmega328 Bo mạch có 14 chân input/output digital, đầu vào analog, tần số giao động thạch anh 16MHz, kết nối USB, jack cắm nguồn, chân tiêu đề ICSP, nút reset Bo mạch chứa tất tính cần thiết để hỗ trợ kết nối với vi điều khiển khác Nguồn sử dụng cho bo mạch qua USB, sử dụng pin nguồn thông qua chuyển đổi AC–DC Hình Hình ảnh mơ tả kích thước nhỏ gọn bo mạch Arduino Uno Arduino Uno khác với tất bo mạch khác chỗ khơng sử dụng chip điều khiển nối tiếp FTDI USB Thay vào tính ATmega16U2 lập trình để chuyển đổi USB nối tiếp Ở phiên thứ hai: bo mạch Uno có điện trở nối đường 8U2 HWB với đất, ta dễ dàng việc thiết lập chế độ DFU Ở phiên sửa đổi thứ bo mạch có tính đây: Sơ đồ chân 1.0: Thêm chân SDA SCL gần với chân AREF chân đặt gần chân RESET, IOREF cho phép Shield nhận nguồn cấp từ bo mạch Trong tương lai, Shield tương thích với bo mạch có sử dụng AVR, có điện áp hoạt động 5V Arduino Due hoạt động 3.3V Nhiều chân bo mạch dự trữ để sử dụng ứng dụng tương lai, tạo linh hoạt việc mở rộng chức Arduino Mạch Reset mạnh mẽ ATmega 16U2 thay cho 8U2 "Uno" từ tiếng Ý đặt tên để đánh dấu việc phát hành phiên Arduino 1.0 Uno phiên 1.0 phiên tham khảo Arduino, ln có cải tiến Uno bo mạch loạt bo mạch USB Arduino, mơ hình tham chiếu tảng Arduino, để so sánh với phiên trước đó, xem thơng số kỹ thuật bo mạch Arduino Uno Tóm tắt thơng số Bảng Tóm tắt thơng số bo mạch Arduino Uno Chíp xử lý Điện áp hoạt động ATmega328 5V Điện áp vào (khuyến nghị) 7-12V Điện áp vào (giới hạn) 6-20V Số chân I/O Digital 14 (6 chân đầu PWM) Số chân đầu vào Analog Dòng DC chân I/O 40 mA Dòng DC chân I/O 50 mA Flash Memory 32 KB (0.5 KB sử dụng cho bootloader) SRAM 32 KB (0.5 KB sử dụng cho bootloader) EEPROM Tốc độ xung KB (ATmega328) 16 MHz Nguồn cấp Arduino Uno cấp nguồn thông qua kết nối USB với nguồn cung cấp điện bên Nguồn điện chọn cách tự động Nguồn cấp bên ngồi (khơng phải USB) lấy từ chuyển đổi AC-DC nguồn pin Các chuyển đổi kết nối cách cắm chân cắm đường kính 2.1mm vào lỗ cắm điện bo mạch Nếu nguồn lấy từ pin lắp vào đầu GND Vin chân tiêu đề kết nối POWER Bo 10 mạch hoạt động với nguồn cấp ngồi từ đến 20 volt Nếu nguồn thường 7V, nhiên chân 5V cấp nguồn bé 5V mạch hoạt động không ổn định Nếu sử dụng 12V, ổn áp bị nóng hỏng mạch, khuyến nghị nên sử dụng khoảng - 12 V Nguồn cấp chân sau: Vin: Điện áp đầu vào bo mạch Arduino sử dụng nguồn cấp ngồi Ta cấp nguồn qua chân Vin cấp nguồn thông qua jack cắm kết nối với chân 5V: Chân đầu quy đinh 5V Bo mạch có thể cấp nguồn điện từ jack (7-12V), kết nối USB (5V), chân Vin bo mạch (7- 12V) Cung cấp điện áp thông qua chân 5V 3.3V bỏ qua khuyến cáo gây hỏng mạch Khơng nên sử dụng 3.3V: Nguồn cấp 3.3V quy định bo mạch Arduino Dòng cấp tối đa 50mA GND Chân nối đất IOREF: Chân cấp điện áp tham chiếu cho vi điểu khiển hoạt động Bộ hỗ trợ cấu hình chuẩn đọc điện áp chân OIREF lựa chọn nguồn cấp thích hợp kích hoạt dịch điện áp đầu để làm việc với nguồn 5V 3.3V Đầu vào, đầu Trên bo mạch có 14 chân digital sử dụng cho mạch đích vào ra, sử dụng hàm pinMode(), digitalWrite(), digitalRead() Chúng hoạt động mức điện áp 5V chân cung cấp nhận dòng cực đại 40mA nối với điện trở mặc định từ 20-50 K Ngồi cịn có số chân có chức đặc biệt: Chân nối tiếp: (RX) (TX) Sử dụng để nhận truyền liệu TTL Chân nối với chân tương ứng ATmega82U 16 #define v1_sang() digitalWrite(v1, { HIGH); digitalWrite(x1, digitalWrite(d1, LOW); LOW); } while(0) #define d1_sang() digitalWrite(v1, { LOW); digitalWrite(x1, digitalWrite(d1, LOW); HIGH); } while(0) #define x2_sang() { digitalWrite(x2, HIGH); digitalWrite(v2, LOW); digitalWrite(d2, LOW); } while(0) #define v2_sang() digitalWrite(v2, HIGH); { digitalWrite(x2, digitalWrite(d2, LOW); LOW); } while(0) #define d2_sang() digitalWrite(v2, LOW); { digitalWrite(x2, digitalWrite(d2, LOW); HIGH); } while(0) #define Truc1_tat() { digitalWrite(x1, LOW); digitalWrite(v1, LOW); digitalWrite(d1, LOW); } while(0) #define Truc2_tat() { digitalWrite(x2, LOW); digitalWrite(v2, LOW); digitalWrite(d2, LOW); } while(0) unsigned char Ma7doan[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; int time_x1 = 10, time_v1 = 3; int time_x2 = 10, time_v2 = 3; int time_truc1, time_truc2; int t = 0; unsigned long time_delay = 0; int Mode = 0; Thuật toán code điều khiển Void setup(): void setup() { pinMode(x1, OUTPUT); pinMode(v1, OUTPUT); pinMode(d1, OUTPUT); 17 pinMode(x2, OUTPUT); pinMode(v2, OUTPUT); pinMode(d2, OUTPUT); pinMode(SCLK, OUTPUT); pinMode(RCLK, OUTPUT); pinMode(DIO, OUTPUT); Hình Sơ đồ thuật toán điều khiển pinMode(BT_ON, INPUT_PULLUP); pinMode(BT_OFF, INPUT_PULLUP); pinMode(BT_Flashing, INPUT_PULLUP); pinMode(BT_UuTien_1, INPUT_PULLUP); pinMode(BT_UuTien_2, INPUT_PULLUP); time_delay = millis();} Chế độ loop: Thực với chế độ On, off flashing tương ứng với mode 0, mode mode void loop() { 18 if (digitalRead(BT_OFF) == 0) Mode = 0; if (digitalRead(BT_ON) == 0) { Mode = 1; t = 0; } if (digitalRead(BT_Flashing) == 0) { Mode = 2; } switch (Mode) { case 0: Func_Mode_OFF(); break; case 1: Func_Mode_Auto(); break; case 2: Func_Mode_Flashing(); break; default: Mode = 0; }} 19 Hình Sơ đồ thuật tốn điều khiển Thuật toán code điều khiển mode_OFF: void Func_Mode_OFF() { Truc1_tat(); Truc2_tat(); Tat_led7doan();} 20 Hình Sơ đồ thuật toán điều khiển void Tat_led7doan() { shiftOut(DIO, SCLK, MSBFIRST, 0xFF); shiftOut(DIO, SCLK, MSBFIRST, 0xFF); shiftOut(DIO, SCLK, MSBFIRST, 0xFF); shiftOut(DIO, SCLK, MSBFIRST, 0xFF); digitalWrite(RCLK, LOW); digitalWrite(RCLK, HIGH);} Thuật toán code chế độ auto: void Func_Mode_Auto() { if ((unsigned long)(millis() - time_delay) >= 1000) { t++; time_truc1 ; time_truc2 ; time_delay = millis(); } if (t >= time_x1 + time_v1 + time_x2 + time_v2) { t = 0; } DK_Den_Mode_Auto(); DK_Time_Mode_Auto();