1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Tài liệu lý thuyết và thực hành ardunio

121 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • BÀI 1. TỔNG QUAN (3)
    • 1. Giới thiệu chung (3)
    • 2. Phần cứng của Arduino UNO R3 (4)
  • BÀI 2. Cấu trúc chương trình và một số lệnh thường dùng (8)
    • 1. Cấu trúc chương trình (8)
    • 2. Một số lệnh thường dùng (10)
  • BÀI 3. Giao tiếp arduino với một số linh kiện, module nâng cao (20)
    • 1. Giao tiếp với module relay (20)
    • 2. Giao tiếp cảm biến nhiệt lm35 (24)
    • 3. Giao tiếp cảm biến độ ẩm DHT11 (25)
    • 4. Giao tiếp điều khiển động cơ bằng PWM (26)
    • 5. Giao tiếp module điều khiển động cơ bước dùng A4988 (32)
    • 6. Giao tiếp module đo cường độ ánh sáng dùng BH1750 (37)
    • 8. Giao tiếp mạch cầu H L298 (50)
    • 9. Giao tiếp IC thời gian thực DS1307 (54)
    • 10. Giao tiếp module SIM 900A (61)
  • Tài liệu tham khảo (67)

Nội dung

TỔNG QUAN

Giới thiệu chung

Arduino là một bo mạch vi điều khiển do một nhóm giáo sư và sinh viên Ý thiết kế và đưa ra đầu tiên vào năm 2005 Mạch Arduino được sử dụng để cảm nhận và điều khiển nhiều đối tượng khác nhau Nó có thể thực hiện nhiều nhiệm vụ từ lấy tín hiệu từ cảm biến đến điều khiển đèn ,động cơ, và nhiều đối tượng khác Ngoài ra mạch còn có khả năng liên kết với nhiều module khác nhau như module đọc thẻ từ, ethernet shield, sim900A, ….để tăng khả ứng dụng của mạch Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM, Atmel 32-bit,… Hiện phần cứng của Arduino có tất cả 6 phiên bản, Tuy nhiên phiên bản thường được sử dụng nhiều nhất là Arduino Uno và Arduino Mega Arduino Uno được sử dụng rất rộng rãi trên thế giới, rất nhiều ví dụ trên youtube hoặc các trang hướng dẫn về Arduino sử dụng mạch này Vì vậy đối với các bạn mới học Arduino, việc chọn Arduino Uno sẽ giúp các bạn có thể tự học dễ dàng

Phần mềm để lập trình cho mạch Arduino là phần mềm IDE Đây là phần mềm mã nguồn mở, và có thể được download từ trang web của Arduino: arduino.cc Việc hướng dẫn download và sử dụng phần mềm này sẽ được đề cập đến trong những phần sau.

1.2 Học arduino như thế nào cho hiệu quả

Hiện trên thế giới có rất nhiều kênh youtube và rất nhiều trang web, các nhân chuyên hướng dẫn và chia sẽ miễn phí các dự án về Arduino Vì vậy nếu các bạn có vốn tiếng Anh khá thì có thể tự học từ trên internet, từ các trang web nước ngoài Ở Việt Nam hiện cũng có nhiều trang web và kênh youtube hướng dẫn tự học Arduino

Hiện tại ở Việt Nam và trên thế giới cũng có nhiều bo mạch vi điều khiển khác nhau Tuy nhiên Arduino có một số ưu điểm mà khiến nó trở nên nổi tiếng và hiện đang được sử dụng rộng rãi trên thế giới Những ưu điểm đó là: rẻ, tương thích được với nhiều hệ điều hành, chương trình lập trình đơn giản, rõ ràng, dễ sử dụng, sử dụng mã nguồn mở và có thể kết hợp với nhiều module khác nhau.

Phần cứng của Arduino UNO R3

Phần này nói về phần cứng của Arduino Uno R3, một bo mạch thông dụng hiện nay Do đây là tài liệu hướng dẫn học nhanh nên tác giả chỉ đưa ra những kiến thức cơ bản cần thiết cho việc sử dụng board mạch này Nếu người học cần những kiến thức chuyên sâu hơn thì có thể tham khảo tại website chính thức của Arduino: arduino.cc.

2.1 Cáp USB Đây là dây cáp thường được bán kèm theo bo, dây cáp dùng để cắm vào máy tính để nạp chương trình cho bo và dây đồng thời cũng lấy nguồn từ nguồn usb của máy tính để cho bo hoạt động.

Ngoài ra cáp USB còn được dùng để truyền dữ liệu từ bo Arduino lên máy tính Dây cáp có 2 đầu, đầu 1a được dùng để cắm vào cổng USB trên bo Arduino, đầu 1b dùng để cắm vào cổng USB trên máy tính.

4 IC này được lập trình như một bộ chuyển đổi USB –to-Serial dùng để giao tiếp với máy tính thông qua giao thức Serial (dùng cổng COM)

Cổng nguồn ngoài nhằm sử dụng nguồn điện bên ngoài như pin, bình acquy hay các adapter cho bo Arduino hoạt động Nguồn điện cấp vào cổng này là nguồn DC có hiệu điện thế từ 6V đến 20V, tuy nhiên hiệu điện thế tốt nhất mà nhà sản xuất khuyên dùng là từ 7 đến 12V

Cổng USB trên bo Arduino dùng để kết nối với cáp USB

Nút reset được sử dụng để reset lại chương trình đang chạy Đôi khi chương trình chạy gặp lỗi, người dùng có thể reset lại chương trình.

ICSP là chữ viết tắt của In-Circuit Serial Programming Đây là các chân giao tiếp SPI của chip Atmega 16U2 Các chân này thường ít được sử trong các dự án về Arduino.

2.7 Các chân xuất tín hiệu ra

Có tất cả 14 chân xuất tín hiệu ra trong Arduino Uno, những chân có dấu ~ là những chân có thể băm xung (PWM), tức có thể điều khiển tốc độ động cơ hoặc độ sáng của đèn Hình 2 thể hiện rất rõ những chân để băm xung này

IC Atmega 328 là linh hồn của bo mạch Arduino Uno, IC này được sử dụng trong việc thu thập dữ liệu từ cảm biến, xử lý dữ liệu, xuất tín hiệu ra,…

Các chân ICSP của ATmega 328 được sử dụng cho các giao tiếp SPI (Serial Peripheral Interface), một số ứng dụng của Arduino có sử dụng chân này, ví dụ như sử dụng module RFID RC522 với Arduino hay Ethernet Shield với Arduino.

Các chân này lấy tín hiệu Analog (tín hiệu tương tự) từ cảm biến để IC Atmega 328 xử lý Có tất cả 6 chân lấy tín hiệu Analog, từ A0 đến A5

2.11 Chân cấp nguồn cho cảm biến

5 Các chân này dùng để cấp nguồn cho các thiết bị bên ngoài như role, cảm biến, RC servo,…trên khu vực này có sẵn các chân GND (chân nối đất, chân âm), chân 5V, chân 3.3V như được thể hiện ở hình 2 Nhờ những chân này mà người sử dụng không cần thiết bị biến đổi điện khi cấp nguồn cho cảm biến, role, rc servo,…Ngoài ra trên khu vực này còn có chân Vin và chân reset, chân IOREF Tuy nhiên các chân này thường ít được sử dụng nên trong tài liệu này xin không đi sâu về nó.

2.12 Các linh kiện khác trên board

Ngoài các linh kiện đã liệt kê bên trên, Arduino Uno còn 1 số linh kiện đáng chú ý khác Trên bo có tất cả 4 đèn led, bao gồm 1 led nguồn (led ON nhằm cho biết board đã được cấp nguồn), 2 led Tx và Rx, 1 led L Các led Tx và Rx sẽ nhấp nháy khi có dữ liệu truyền từ board lên máy tính hoặc ngược lại thông qua cổng USB Led L được được kết nối với chân số 13 Led này được gọi là led on board (tức led trên bo), led này giúp người dùng có thể thực hành các bài đơn giản mà không cần dùng thêm led ngoài

Trong 14 chân ra của bo còn có 2 chân 0 và 1 có thể truyền nhận dữ liệu nối tiếp TTL Có một số ứng dụng cần dùng đến tính năng này, ví dụ như ứng dụng điều khiển mạch Arduino Uno qua điện thoại sử dụng bluetooth HC05

Thêm vào đó, chân 2 và chân 3 cũng được sử dụng cho lập trình ngắt (interrupt), đồng thời còn 1 vài chân khác có thể được sử dụng cho các chức năng khác

Vi điều khiển ATmega328 (họ 8bit) Điện áp hoạt động 5V – DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16 MHz

Dòng tiêu thụ 30mA Điện áp vào khuyên dùng 7-12V – DC Điện áp vào giới hạn 6-20V – DC Số chân Digital I/O 14 (6 chân PWM) Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA

Dòng ra tối đa (5V) 500 mA Dòng ra tối đa (3.3V) 50 mA Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng cho bootloader

Hình 1.2 Chức năng các chân trên arduino Uno R3

Cấu trúc chương trình và một số lệnh thường dùng

Cấu trúc chương trình

Phần này sẽ đưa ra cấu trúc của một chương trình trong IDE, đồng thời giải thích một số lệnh thường được sử dụng để thuận tiện cho người dùng

Xét 1 ví dụ đơn giản, ví dụ làm cho led nhấp nháy:

#define led = 13 // khai báo chân led là chân 13 void setup() { pinMode(led, OUTPUT); //Thiết lập chân led (chân 13) là chân ra (OUTPUT) } void loop() { digitalWrite(led, HIGH); // Ra lệnh mở led delay(1000); // Mở trong 1s (1000ms), có thể thay đổi giá trị này digitalWrite(led, LOW); // ra lệnh tắt led delay(1000); // Tắt trong 1s (1000ms), có thể thay đổi giá trị này

} Sau đây chúng ta sẽ cùng tìm hiểu cấu trúc của một chương trình trong Arduino qua ví dụ này

1.1 Khai báo biến Đây là phần khai báo kiểu biến, tên các biến, định nghĩa các chân trên board một số kiểu khai báo biến thông dụng:

Nghĩa của từ define là định nghĩa, hàm #define có tác dụng định nghĩa, hay còn gọi là gán, tức là gán một chân, một ngõ ra nào đó với 1 cái tên

Chú ý: sau #define thì không có dấu “,” (dấy phẩy)

*Khai báo các kiểu biến khác như: int (kiểu số nguyên), float,…

Các bạn có thể tham khảo thêm các kiểu biến cũng như công dụng tại arduino.cc 1.2 Thiết lập

Phần này dùng để thiết lập cho chương trình, cần nhớ rõ cấu trúc của nó void setup()

} Cấu trúc của nó có dấu ngoặc nhọn ở đầu và ở cuối, nếu thiếu phần này khi kiểm tra chương trình thì chương trình sẽ báo lỗi

Phần này dùng để thiết lập các tốc độ truyền dữ liệu, kiểu chân là chân ra hay chân vào Trong đó:

1.3 Vòng lặp Dùng để viết các lệnh trong chương trình để mạch Arduino thực hiện các nhiệm vụ mà chúng ta mong muốn, thường bắt đầu bằng: void loop()

Một số lệnh thường dùng

2.1 Hàm pinMode() Cấu hình 1 pin quy định hoạt động như là một đầu vào (INPUT) hoặc đầu ra (OUTPUT)

Cú pháp pinMode(pin, mode)

Thông số pin: Số của chân digital mà bạn muốn thiết đặt mode: INPUT, INPUT_PULLUP hoặc OUTPUT Trả về: không

Ví dụ int ledPin = 13; // đèn LED được kết nối với chân digital 13 void setup()

{ pinMode(ledPin, OUTPUT); // thiết đặt chân ledPin là OUTPUT } void loop() { digitalWrite(ledPin, HIGH); // bật đèn led delay(1000); // dừng trong 1 giây digitalWrite(ledPin, LOW); // tắt đèn led delay(1000); // dừng trong 1 giây }

2.2 Hàm DigitalWirte() Xuất tín hiệu ra các chân digital, có 2 giá trị là HIGH hoặc là LOW

Nếu một pin được thiết đặt là OUTPUT bởi pinMode() Và bạn dùng digitalWrite để xuất tín hiệu thì điện thế tại chân này sẽ là 5V (hoặc là 3,3 V trên mạch 3,3 V) nếu được xuất tín hiệu là HIGH, và 0V nếu được xuất tín hiệu là LOW

Nếu một pin được thiết đặt là INPUT bởi pinMode() Lúc này digitalWrite sẽ bật (HIGH) hoặc tắt (LOW) hệ thống điện trở pullup nội bộ Chúng tôi khuyên bạn nên dùng INPUT_PULLUP nếu muốn bật hệ thống điện trở pullup nội bộ

Cú pháp digitalWrite(pin,value)

Thông số pin: Số của chân digital mà bạn muốn thiết đặt value: HIGH hoặc LOW

Trả về: không Ví dụ: xem lại ví dụ phần 2.1

2.3 Hàm delay() Delay có nhiệm vụ dừng chương trình trong thời gian mili giây

Thông số ms: thời gian ở mức mili giây ms có kiểu dữ liệu là unsigned long

2.4 Hàm DigitalRead() Đọc tín hiệu điện từ một chân digital (được thiết đặt là INPUT) Trả về 2 giá trị HIGH hoặc LOW

Thông số pin: giá trị của digital muốn đọc

HIGH hoặc LOW Ví dụ

Ví dụ này sẽ làm cho đèn led tại pin 13 nhận giá trị như giá trị tại pin 2 int ledPin = 13; // chân led 13 int inPin = 2; // button tại chân 2 int val = 0; // biến "val" dùng để lưu tín hiệu từ digitalRead void setup() { pinMode(ledPin, OUTPUT); // đặt pin digital 13 là output pinMode(inPin, INPUT); // đặt pin digital 2 là input

} void loop() { val = digitalRead(inPin); // đọc tín hiệu từ digital 2 digitalWrite(ledPin, val); // thay đổi giá trị của đèn LED là giá trị của digital 2

Cú pháp: if ([biểu thức 1] [toán tử so sánh] [biểu thức 2]) { //biểu thức điều kiện [câu lệnh 1]

} Nếu biểu thức điều kiện trả về giá trị TRUE, [câu lệnh 1] sẽ được thực hiện, ngược lại, [câu lệnh 2] sẽ được thực hiện

} // a = 10 Lệnh if không bắt buộc phải có nhóm lệnh nằm sau từ khóa else int a = 0; if (a == 0) { a = 10;

} 2.6 Lệnh for Hàm for có chức năng làm một vòng lặp Vậy vòng lặp là gì? Hãy hiểu một cách đơn giản, nó làm đi làm lại một công việc có một tính chất chung nào đó Chẳng hạn, bạn bật tắt một con LED thì dùng digitalWrite xuất HIGH delay rồi lại LOW rồi lại delay Nhưng nếu bạn muốn làm nhiều hơn 1 con LED thì mọi đoạn code của bạn sẽ dài ra (không đẹp và khi chỉnh sửa thì chẳng lẻ ngồi sửa lại từng dòng?

Với 1 con led, bạn lập trình như thế này digitalWrite(led1,HIGH); delay(1000); digitalWrite(led1,LOW); delay(1000);

Với 10 con led, nếu bạn không dùng for, đoạn code nó sẽ dài như thế này digitalWrite(led1,HIGH);

13 delay(1000); digitalWrite(led1,LOW); delay(1000); digitalWrite(led2,HIGH); delay(1000); digitalWrite(led2,LOW); delay(1000);

digitalWrite(led10,HIGH); delay(1000); digitalWrite(led10,LOW); delay(1000);

Nếu như vậy thì bạn có còn muốn lập trình và suy nghĩ về một led ma trận có còn nữa không ? Chắc chắn là không rồi, vì vậy hàm for ra đời để giúp bạn nhìn cuộc sống một cách tươi đẹp hơn !

Bây giờ hãy lấy một ví dụ đơn giản như sau:

Tôi muốn xuất 10 chữ số (từ 1 - 10) ra Serial Hãy giúp tôi lập trình trên Arduino để làm được việc ấy!

Nếu bạn chưa đọc bài này và cũng chưa biết kiến thức về for, bạn sẽ lập trình như sau: void setup() { Serial.begin(9600);

} void loop() { // không làm gì cả;

} Đoạn code khá dài và lặp đi lặp lại câu lệnh Serial.println Nhưng sau khi biết về hàm for bạn chỉ cần một đoạn code cực kì ngắn như sau: void setup(){

Serial.begin(9600); int i; for (i = 1;i

Ngày đăng: 01/09/2024, 08:18

w