Mới bắt đầu với Arduino - Đây là 4 chương trình đầu tiên cho bạn
Arduino là một board mạch dùng để lập trình, có mã nguồn mở từ phần cứng cho đến phần mềm. Với Arduino bạn có thể làm được rất nhiều ứng dụng thực tế từ đơn giản cho đến phức tạp. Tiếp cận Arduino từ những điều cơ bản nhất sẽ giúp ích rất nhiều cho bạn trong những dự án lớn trong tương lại. Dưới đây là 4 chương trình cơ bản nhất mà bạn không nên bỏ qua nếu mới bắt đầu với Arduino:
- Bạn cần có những gì ?
+ 01 board Arduino Uno R3 (có thể dùng board Arduino khác nhưng mới bắt đầu thì nên dùng Uno R3)
+ 01 Led màu sắc tùy ý
+ Test board
+ Dây cắm test board
+ Điện trở 220 Ohm
- Sơ đồ:
Kết nối chân dương (anode) của led với 1 chân của điện trở sau đó nối với chân digital số 7. Chân còn lại của led là chân âm (cathode) bạn nối đến chân GND của Arduino. Ở đây mình mắc theo kiểu dòng điện đi từ chân digital số 7 ra điện trở và qua led. Bạn có thể mắc với bất kỳ chân digital nào khác nếu thích, không nhất thiết phải là chân số 7.
- Đây là code:
+ void setup(): đây là hàm mà Arduino sẽ chạy mỗi khi được bắt đầu và chỉ chạy một lần. Ở đây bạn sẽ cấu hình cho các chân nhất định của Arduino là vào hay ra (INPUT hay OUTPUT). Tùy vào dự án, void setup() cũng là nơi để bạn khai báo tốc độ truyền tải dữ liệu (baudrate) hoặc khai báo các biến,...
Hàm pinMode có nhiệm vụ nói cho Arduino biết một chân nào đó sẽ được cấu hình là đầu vào hay ra (INPUT hay OUTPUT). Cụ thể trong chương trình này là pinMode(7,OUTPUT) tức chân số 7 sẽ được cấu hình là đầu ra OUTPUT.
+ void loop(): giống như void main trong ngôn ngữ C, nhưng nó có thêm nhiệm vụ lặp đi lặp lại những gì được viết trong nó {}, như là một vòng lặp vô hạn, nó chỉ dừng lại khi Arduino bị tắt hay ngắt nguồn (dĩ nhiên rồi!).
+ digitalWrite(): hàm này sẽ xuất ra tín hiệu số (digital) lên một chân mà bạn đặt vào, với giá trị là HIGH (cao) hoặc LOW (thấp). Ở đây digitalWrite(7,HIGH) sẽ xuất ra chân số 7 tín hiệu ở mức cao (HIGH) do đó chân số 7 sẽ có điện áp 5V nên đèn led sẽ sáng. Còn ở lệnh digitalWrite(7,LOW) sẽ xuất ra chân số 7 tín hiệu mức thấp (LOW) tức điện áp 0V nên led tắt.
+ hàm delay(): hàm này làm cho chương trình dừng lại một khoảng thời gian theo tùy theo giá trị bạn đặt vào () với đơn vị mili giây rồi tiếp tục chạy câu lệnh tiếp theo. Trong đoạn code trên delay(1000) có nghĩa là dừng chương trình lại 1000 mili giây (=1 giây) rồi tiếp tục chạy lệnh tiếp theo.
Sau cùng, bạn sẽ được một chương trình có chức năng làm led sáng 1 giây rồi tắt 1 giây, cứ như thế lặp đi lặp lại cho đến khi tắt Arduino.
Gợi ý: Bạn có thể thử thay đổi giá trị trong hàm delay() và xem kết quả sẽ như thế nào nhé
Để lập trình Arduino thì không thể thiếu IDE, bạn có thể xem thêm hướng dẫn cài đặt Arduino IDE này nhé
1. LED đơn chóp tắt (Blink)
Đây có thể được xem như chương trình vỡ lòng mà những ai mới tìm hiểu Arduino đều đã thực hiện qua. Chương trình này sẽ làm led sáng rồi tắt theo thời gian mà bạn lập trình.- Bạn cần có những gì ?
+ 01 board Arduino Uno R3 (có thể dùng board Arduino khác nhưng mới bắt đầu thì nên dùng Uno R3)
Kết nối chân dương (anode) của led với 1 chân của điện trở sau đó nối với chân digital số 7. Chân còn lại của led là chân âm (cathode) bạn nối đến chân GND của Arduino. Ở đây mình mắc theo kiểu dòng điện đi từ chân digital số 7 ra điện trở và qua led. Bạn có thể mắc với bất kỳ chân digital nào khác nếu thích, không nhất thiết phải là chân số 7.
- Đây là code:
Trong lập trình Arduino, 2 hàm void setup và void loop là hàm mà bạn sẽ rất quen thuộc khi bạn tiếp xúc nhiều với lập trình Arduino.
- void setup() {
- pinMode(7,OUTPUT); //thiết đặt chân số 7 sẽ xuất tín hiệu ra
- }
- void loop() {
- digitalWrite(7,HIGH); //đặt chân số 7 ở mức HIGH, led sáng
- delay(1000); //tạo trễ 1000ms = 1 giây
- digitalWrite(7,LOW); //đặt chân số 7 ở mức LOW, led tắt
- delay(1000);
- }
+ void setup(): đây là hàm mà Arduino sẽ chạy mỗi khi được bắt đầu và chỉ chạy một lần. Ở đây bạn sẽ cấu hình cho các chân nhất định của Arduino là vào hay ra (INPUT hay OUTPUT). Tùy vào dự án, void setup() cũng là nơi để bạn khai báo tốc độ truyền tải dữ liệu (baudrate) hoặc khai báo các biến,...
Hàm pinMode có nhiệm vụ nói cho Arduino biết một chân nào đó sẽ được cấu hình là đầu vào hay ra (INPUT hay OUTPUT). Cụ thể trong chương trình này là pinMode(7,OUTPUT) tức chân số 7 sẽ được cấu hình là đầu ra OUTPUT.
+ void loop(): giống như void main trong ngôn ngữ C, nhưng nó có thêm nhiệm vụ lặp đi lặp lại những gì được viết trong nó {}, như là một vòng lặp vô hạn, nó chỉ dừng lại khi Arduino bị tắt hay ngắt nguồn (dĩ nhiên rồi!).
+ digitalWrite(): hàm này sẽ xuất ra tín hiệu số (digital) lên một chân mà bạn đặt vào, với giá trị là HIGH (cao) hoặc LOW (thấp). Ở đây digitalWrite(7,HIGH) sẽ xuất ra chân số 7 tín hiệu ở mức cao (HIGH) do đó chân số 7 sẽ có điện áp 5V nên đèn led sẽ sáng. Còn ở lệnh digitalWrite(7,LOW) sẽ xuất ra chân số 7 tín hiệu mức thấp (LOW) tức điện áp 0V nên led tắt.
+ hàm delay(): hàm này làm cho chương trình dừng lại một khoảng thời gian theo tùy theo giá trị bạn đặt vào () với đơn vị mili giây rồi tiếp tục chạy câu lệnh tiếp theo. Trong đoạn code trên delay(1000) có nghĩa là dừng chương trình lại 1000 mili giây (=1 giây) rồi tiếp tục chạy lệnh tiếp theo.
Sau cùng, bạn sẽ được một chương trình có chức năng làm led sáng 1 giây rồi tắt 1 giây, cứ như thế lặp đi lặp lại cho đến khi tắt Arduino.
Gợi ý: Bạn có thể thử thay đổi giá trị trong hàm delay() và xem kết quả sẽ như thế nào nhé
2. Nút nhấn bật tắt LED
Giữ lại sơ đồ mạch bên trên và dùng thêm 1 nút nhấn, 1 điện trở 1k Ohm, bạn sẽ có thêm một chương trình ứng dụng với Arduino. Chương trình này cũng cơ bản chỉ phức tạp hơn LED Blink một chút.
Hãy nối một chân của nút nhấn lên nguồn +5V của Arduino, chân còn lại nối chung với điện trở 1k Ohm rồi gắn vào chân digital bất kỳ của Arduino, ví dụ chân số 5. Một chân còn lại của điện trở nối với GND.
Bạn sẽ có sơ đồ như hình:
Bạn sẽ hỏi tại sao phải có điện trở từ nút nhấn xuống GND ? Vì nó giúp bảo vệ Arduino của bạn, nếu không có điện trở ở đây thì Arduino của bạn có thể sẽ chết khi bắt đầu chạy. Hãy lưu ý điều này !
Đây là code chương trình:
Mình khai báo thêm một biến khác là state để lưu trạng thái của nút nhấn và đặt cho nó trạng thái ban đầu là 0 (hoặc LOW). Vì sao phải đặt mức LOW thì bạn hãy đọc tiếp phần dưới sẽ hiểu nhé.
Trong phần void setup(), mình vẫn dùng chân số 7 để xuất tín hiệu ra nên vẫn thiết đặt là OUTPUT. Còn chân số 5 để đọc trạng thái từ nút nhấn nên sẽ thiết đặt là INPUT.
Lệnh state = digitalRead(button): lệnh này sẽ thưc hiện việc đọc trạng thái ở button (tức chân số 5) và gán cho biến state.
Câu lệnh điều kiện if(button == HIGH): sẽ kiểm tra nút nhấn có được nhấn hay không,Vì khi nhấn nút chân số 5 sẽ được nối lên nguồn +5V nên sẽ ở mức HIGH thì câu lệnh digitalWrite(led,HIGH) trong dấu ngoặc {} sẽ được thực hiện, LED sẽ sáng.
Ngược lại, nút nhấn không được nhấn, tức chân số 5 nối với điện trở xuống GND nên ở mức LOW, thì câu lệnh digitalWrite(led,LOW) trong lệnh else sẽ thực hiện và LED sẽ tắt. Đến đây bạn sẽ hiểu vì sao phải khai báo biến state ở mức LOW trước, nếu không bắt đầu chay chương trình LED sẽ tự sáng mặc dủ bạn chưa nhấn nút.
Hãy nối một chân của nút nhấn lên nguồn +5V của Arduino, chân còn lại nối chung với điện trở 1k Ohm rồi gắn vào chân digital bất kỳ của Arduino, ví dụ chân số 5. Một chân còn lại của điện trở nối với GND.
Bạn sẽ có sơ đồ như hình:
Bạn sẽ hỏi tại sao phải có điện trở từ nút nhấn xuống GND ? Vì nó giúp bảo vệ Arduino của bạn, nếu không có điện trở ở đây thì Arduino của bạn có thể sẽ chết khi bắt đầu chạy. Hãy lưu ý điều này !
Đây là code chương trình:
Đầu tiên, khai báo các biến led và button thay cho các chân 7 và 5 bằng 2 lệnh int led = 7 và int button = 5. Từ đây bạn có thể dùng các tên led và button thay vì dùng số chân như 7 và 5 cho dễ nhớ khi lập trình.
- int led = 7; //khai bao bien led thay chan so 7
- int button = 5; //khai bao bien button thay chan so 5
- int state = LOW; //bien luu trang thai có gia tri ban dau la LOW
- void setup() {
- pinMode(led,OUTPUT); //cau hinh OUTPUT
- pinMode(button,INPUT); //cau hinh INPUT
- }
- void loop() {
- state = digitalRead(button); //gan gia tri chan so 5 cho bien state
- if(button == HIGH) //neu button o muc cao
- {
- digitalWrite(led,HIGH); //led sang
- }
- else //nguoc lai
- {
- digitalWrite(led,LOW); //led tat
- }
- }
Mình khai báo thêm một biến khác là state để lưu trạng thái của nút nhấn và đặt cho nó trạng thái ban đầu là 0 (hoặc LOW). Vì sao phải đặt mức LOW thì bạn hãy đọc tiếp phần dưới sẽ hiểu nhé.
Trong phần void setup(), mình vẫn dùng chân số 7 để xuất tín hiệu ra nên vẫn thiết đặt là OUTPUT. Còn chân số 5 để đọc trạng thái từ nút nhấn nên sẽ thiết đặt là INPUT.
Lệnh state = digitalRead(button): lệnh này sẽ thưc hiện việc đọc trạng thái ở button (tức chân số 5) và gán cho biến state.
Câu lệnh điều kiện if(button == HIGH): sẽ kiểm tra nút nhấn có được nhấn hay không,Vì khi nhấn nút chân số 5 sẽ được nối lên nguồn +5V nên sẽ ở mức HIGH thì câu lệnh digitalWrite(led,HIGH) trong dấu ngoặc {} sẽ được thực hiện, LED sẽ sáng.
Ngược lại, nút nhấn không được nhấn, tức chân số 5 nối với điện trở xuống GND nên ở mức LOW, thì câu lệnh digitalWrite(led,LOW) trong lệnh else sẽ thực hiện và LED sẽ tắt. Đến đây bạn sẽ hiểu vì sao phải khai báo biến state ở mức LOW trước, nếu không bắt đầu chay chương trình LED sẽ tự sáng mặc dủ bạn chưa nhấn nút.
3. Điều chỉnh độ sáng LED
Bạn thấy trên một số chân của Arduino có dấu "~", điều này thể hiện chân đó có thể điều chỉnh độ rộng xung (PWM). Trong chương trình này ta sẽ ứng dụng chức năng này của Arduino với hàm analogWrite().
Kết nối chân dương của LED với điện trở rồi gắn vào chân Arduino có dấu "~", mình sẽ nối với chân số 6. Chân âm của LED nối với GND của Arduino.
Sơ đồ mạch:
Đây là code chương trình:
- int led = 6; //khai bao led
- int i;
- void setup() {
- pinMode(led,OUTPUT);//cau hinh OUTPUT
- }
- void loop() {
- for(i=0;i<256;i++) //vong lap co dieu kien, lam i tang len
- {
- analogWrite(led,i); //led sang tang dan tuy theo gia tri i
- delay(50); //tao tre de co the thay led sang dan
- }
- for(i=255;i>=0;i--) //vong lap i giam dan
- {
- analogWrite(led,i); //led sang yeu dau theo i
- delay(50); //tao tre
- }
- }
Trước tiên là khai báo biến led cho chân số 6 bằng lệnh int led = 6 và một biến chạy cho vòng lặp for int i.
Trong hàm void setup sẽ thiết lập chân 6 xuất tín hiệu ra bằng lệnh pinMode(led,OUTPUT) hoặc có thể ghi pinMode(6,OUTPUT), vì bạn đã khai báo led = 6 nên bạn ghi cách nào thì Arduino cũng hiểu.
Vòng lặp có điều kiện for: lệnh này sẽ thực hiện đầu tiên là cho i = 0 rồi kiểm tra nếu i < 256 thì thực hiện lệnh trong {}, rồi tiếp túc tăng i lên 1 đơn vị rồi kiểm tra, đến khi i không thỏa điều kiện i <256 thì thoát vòng lặp for.
Cũng tương tự như digitalWrite, lệnh analogWrite cũng đặt vào một chân Arduino một giá trị, nhưng digitalWrite chỉ có hai giá trị là HIGH(1) và LOW(0) còn analogWrite thì giá trị trong khoảng từ 0 đến 255. Các giá trị từ 0 đến 255 sẽ làm thay đổi độ rộng xung dẫn đến thay đổi điện áp ra ở các chân này. Khi gía trị điện áp thay đổi thì độ sáng của led cũng sẽ thay đổi theo làm led sáng mạnh hay sáng yếu dần. Vòng for thứ hai cũng tương tự nhưng giá trị i giảm dần làm led sáng yếu dần đi.
Lệnh delay(50) để cho bạn có thể thấy led sáng dần.
Bạn có hỏi tại sao ở đây giới hạn i<256 ? Đó là vì giá trị của lệnh anologWrite trong khoảng từ 0 đến 255 thôi.
Gợi ý: Bạn có thể ứng dụng hàm analogWrite để điều khiển tốc độ động cơ một chiều như khi bạn điều chỉnh độ sáng của led xem.
Vòng lặp có điều kiện for: lệnh này sẽ thực hiện đầu tiên là cho i = 0 rồi kiểm tra nếu i < 256 thì thực hiện lệnh trong {}, rồi tiếp túc tăng i lên 1 đơn vị rồi kiểm tra, đến khi i không thỏa điều kiện i <256 thì thoát vòng lặp for.
Cũng tương tự như digitalWrite, lệnh analogWrite cũng đặt vào một chân Arduino một giá trị, nhưng digitalWrite chỉ có hai giá trị là HIGH(1) và LOW(0) còn analogWrite thì giá trị trong khoảng từ 0 đến 255. Các giá trị từ 0 đến 255 sẽ làm thay đổi độ rộng xung dẫn đến thay đổi điện áp ra ở các chân này. Khi gía trị điện áp thay đổi thì độ sáng của led cũng sẽ thay đổi theo làm led sáng mạnh hay sáng yếu dần. Vòng for thứ hai cũng tương tự nhưng giá trị i giảm dần làm led sáng yếu dần đi.
Lệnh delay(50) để cho bạn có thể thấy led sáng dần.
Bạn có hỏi tại sao ở đây giới hạn i<256 ? Đó là vì giá trị của lệnh anologWrite trong khoảng từ 0 đến 255 thôi.
Gợi ý: Bạn có thể ứng dụng hàm analogWrite để điều khiển tốc độ động cơ một chiều như khi bạn điều chỉnh độ sáng của led xem.
4. Bật tắt đèn LED tự động bằng cảm biến ánh sáng
Với chương trình này, bạn sẽ cần thêm 1 cảm biến ánh sáng để thực hiện. Arduino sẽ đọc dữ liệu từ cảm biến ánh sáng gửi về rồi so sánh với điều khiện bạn lập trình để điều khiển bật tắt led. Nghe có vẻ phức tạp nhưng thực chất nó cũng rất đơn giản. Đây là sơ đồ kết nối:
Kết nối một chân điện trở với một chân cảm biến và nối vào chân A0 để Arduino đọc dữ liệu qua chân này. Chân còn lại của cảm biến nối đến nguồn +5V, chân của điện trở thì nối đến GND.
Và đây là code:
- Chân A0 mặc định đã được thiết lập là OUTPUT nên bạn không cần đặt lại, chỉ cần thiết lập cho chân led. Lệnh Serial.begin(9600) dùng để thiết lập tốc độ baud truyền tải dữ liệu giữa Arduino và máy tính với tốc độ là 9600 bit mỗi giây.
- Lệnh analogRead(A0) đọc dữ liệu từ chân A0 và gán kết quả đó cho biến state. Giá trị của analogRead trong khoảng từ 0 đến 1023 tương ứng với giá trị điện áp từ 0 đến 5V rơi trên cảm biến. Khi ánh sáng chiếu vào cảm biến càng mạnh thì giá trị biến state càng lớn.
- Hai lệnh Serial.print và Serial.println để in giá trị của biến state sau khi được gán lên cửa sổ Serial Monitor. Sau khi nạp code lên Arduino bạn hãy mở Serial Monitor bằng cách chọn Tools => Serial Monitor hoăc nhấn Ctrl + Shift + M để xem giá trị đọc được từ cảm biến.
- Lệnh if sẽ kiểm tra nếu giá trị đọc được nhỏ hơn 200 sẽ làm led sáng, ngược lại thì led tắt. Bạn có thể thay đổi gia trị này để thay đổi độ nhạy bật tắt led.
Lời kết:
Trên đây là 4 chương trình mà mình thấy là cơ bản nhất đối với nhũng bạn mới học lập trình Arduino. Chúng không quá khỏ nếu bạn đọc và suy nghĩ với những giải thích mà mình chia sẻ. Bạn có thấy các chương trình nảy khó hiểu ở chỗ nào không ? Hay bạn cảm thấy bài viết có sai sót thì hãy để lại bình luận bên dưới để mọi người cùng thào luận nhé !
Chúc bạn thành công và đùng quên ghé thăm blog thường xuyên bạn nhé.
Kết nối một chân điện trở với một chân cảm biến và nối vào chân A0 để Arduino đọc dữ liệu qua chân này. Chân còn lại của cảm biến nối đến nguồn +5V, chân của điện trở thì nối đến GND.
Và đây là code:
Những lệnh cơ bản như những chương trình phía trên nên mình không nhắc lại. Có một số điều bạn cần lưu ý:
- int led = 9;
- int state;
- void setup() {
- pinMode(led,OUTPUT);
- Serial.begin(9600);
- }
- void loop() {
- state = analogRead(A0);
- Serial.print("Gia tri cam bien: ");
- Serial.println(state);
- if(state <200)
- {
- digitalWrite(led,HIGH);
- }
- else
- {
- digitalWrite(led,LOW);
- }
- }
- Chân A0 mặc định đã được thiết lập là OUTPUT nên bạn không cần đặt lại, chỉ cần thiết lập cho chân led. Lệnh Serial.begin(9600) dùng để thiết lập tốc độ baud truyền tải dữ liệu giữa Arduino và máy tính với tốc độ là 9600 bit mỗi giây.
- Lệnh analogRead(A0) đọc dữ liệu từ chân A0 và gán kết quả đó cho biến state. Giá trị của analogRead trong khoảng từ 0 đến 1023 tương ứng với giá trị điện áp từ 0 đến 5V rơi trên cảm biến. Khi ánh sáng chiếu vào cảm biến càng mạnh thì giá trị biến state càng lớn.
- Hai lệnh Serial.print và Serial.println để in giá trị của biến state sau khi được gán lên cửa sổ Serial Monitor. Sau khi nạp code lên Arduino bạn hãy mở Serial Monitor bằng cách chọn Tools => Serial Monitor hoăc nhấn Ctrl + Shift + M để xem giá trị đọc được từ cảm biến.
- Lệnh if sẽ kiểm tra nếu giá trị đọc được nhỏ hơn 200 sẽ làm led sáng, ngược lại thì led tắt. Bạn có thể thay đổi gia trị này để thay đổi độ nhạy bật tắt led.
Lời kết:
Trên đây là 4 chương trình mà mình thấy là cơ bản nhất đối với nhũng bạn mới học lập trình Arduino. Chúng không quá khỏ nếu bạn đọc và suy nghĩ với những giải thích mà mình chia sẻ. Bạn có thấy các chương trình nảy khó hiểu ở chỗ nào không ? Hay bạn cảm thấy bài viết có sai sót thì hãy để lại bình luận bên dưới để mọi người cùng thào luận nhé !
Chúc bạn thành công và đùng quên ghé thăm blog thường xuyên bạn nhé.
Không có nhận xét nào: