Code chƣơng trình. int ledPi n = 9; void setup( ) {
86 pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Sau khi gõ code vào chƣơng trình soạn thảotacần click vào để kiểm tra lổi. Tạo File Hex.
Chúng ta cần phải có file Hex để cung cấp cho proteus và khi bấm play chƣơng trình mới hoạt động đƣợc. Cách tạo file Hex trên Arduino IDE nhƣ sau:
Click vào File chọn Preferences.
Hình 5.2: Click Preferences
87
Hình 5.3: Check compilation.
Sau đó tiếp tục bấm
Chƣơng trình sẽ tự động built một file hex đƣợc lƣu ở đƣờng dẫn nhƣ hình dƣới
Hình 5.4: Đường dẫn chứa file hex.
Cáctachép file hex ra một thƣ mục nào đó sau đó mở proteus lên và double click vào Aruino Uno.
88
Hình 5.5: Add file Hex cho Proteus.
Bấm vào vị trí số 1 và chọn nơi lƣu file hex ở trên chọn tiếp Open, OK và Play. Cáctasẽ thấy led nhấp nháy tắt và sáng thời gian delay là 1s.
Giải thích chƣơng trình.
int ledPin = 9;
Khai báo một giá trị biến integer là
ledPin = 9. void setup() {
pinMode(ledPin, OUTPUT); }
Trong Arduino sketch cần phải có hàm setup() và loop() nếu không có thì chƣơng trình báo lỗi. Hàm Setup() chỉ chạy một lần kể từ khi bắt đầu chƣơng trình. Hàm này có chức năng thiết lập chế độ vào, ra cho các chân digital hay tốc độ baud cho giao tiếp Serial...
Cấu trúc của hàm pinMode() là nhƣ sau:
89
pin : là vị trí chân digital
Mode: là chế độ vào ( INPUT), ra (OUTPUT). Lệnh tiếp theo.
pinMode(ledPin, OUTPUT);
Lệnh này thiết lập chân số 9 trên board là chân ngõ ra (OUTPUT). Nếu
không khai báo “ int ledPin = 9; ” thìtacó thể viết cách sau nhƣng ý nghĩa không
thay đổi:
pinMode(9, OUTPUT);
Bắt buộc khai báo một hàm loop() trong Arduino IDE. Hàm này là vòng lặp vô hạn void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Tiếp theo ta sẽ phân tích hàm digitalWrite( ledPin, HIGH); lệnh này có ý
nghĩa là xuất ra chân digital có tên là ledPin ( chân 9) mức cao ( HIGH), mức cao tƣớng ứng là 5 volt.
delay(1000);
Lệnh này tạo một khoảng trễ với thời gian là 1 giây. Trong hàm delay() của IDE thì 1000 tƣơng ứng với 1 giây.
digitalWrite(ledPin, LOW);
Cũng giống nhƣ digitalWrite( ledPin, HIGH); lệnh này xuất ra chân ledPin mức thấp (LOW) tức là 0 volt.
Và tiếp tục là một hàm delay().
Nhƣ vậy chúng ta có thể thấy chƣơng trình sẽ thực hiện tắt sáng led liên tục không ngừng trừ khi ta ngắt nguồn
Câu hỏi ôn tập
90
BÀI 6: GIAO TIẾP VỚI NÚT NHẤN.
* Giới thiệu: Nút ấn là một loại công tắc đơn giản điều khiển hoạt động của máy hoặc một số loại quá trình. Hầu hết, các nút nhấn là nhựa hoặc kim loại. Hình dạng của nút ấn có thể phù hợp với ngón tay hoặc bàn tay để sử dụng dễ dàng. Tất cả phụ thuộc vào thiết kế cá nhân.
*Mục tiêu: Sau khi học xong bài học này, ngƣời học có khả năng:
- Trình bày đƣợc cấu tạo và nguyên lý hoạt động của nút nhấn - Vẽ đƣợc sơ đồ nguyên lý mạch giao tiếp nút nhấn với Arduino
- Mô phỏng đƣợc chƣơng trình mạch giao tiếp nút nhấn với Arduino bằng phần mềm mô phỏng
- Kết nối đƣợc phần cứng mạch giao tiếp nút nhấn với Arduino đúng yêu cầu kỹ thuật.
-Viết, nạp và chạy đƣợc chƣơng trình giao tiếp nút nhấn với Arduino
*Nội dung:
1. Cấu tạo nút nhấn
Hình 6.1 . Công tắc nút nhấn và ký hiệu
Nút nhấn gồm hệ thống lò xo, hệ thống các tiếp điểm thƣờng hở, đóng và vỏ bảo vệ
-Phân Loại:
+ Theo chức năng trạng thái hoạt động của nút nhấn: nút nhấn đơn, nút nhấn kép
+ Theo hình dạng: loại hở, bảo vệ, loại bảo vệ chống nƣớc và chống bụi, loại bảo vệ khỏi nổ
+Theo yêu cầu điều khiển: 1 nút, 2 nút, 3 nút + Theo kết cấu bên trong: có và ko có đèn báo
91
Nút nhấn có ba phần: Bộ truyền động, các tiếp điểm cố định và các rãnh. Bộ truyền động sẽ đi qua toàn bộ công tắc và vào một xy lanh mỏng ở phía dƣới. Bên trong là một tiếp điểm động và lò xo. Khi nhấn nút, nó chạm vào các tiếp điểm tĩnh làm thay đổi trạng thái của tiếp điểm. Trong một số trƣờng hợp, ngƣời dùng cần giữ nút hoặc nhấn liên tục để thiết bị hoạt động. Với các nút nhấn khác, chốt sẽ giữ nút bật cho đến khi ngƣời dùng nhấn nút lần nữa.
2. Phần cứng * Chuẩn bị:
- Mạch Arduino (ở đây mình sử dụng Arduino UNO). - Breadboard còn gọi testboard
- Điện trở 10 kΩ.
- Nút nhấn 2 chân hoặc 4 chân (hoặc công tắc tƣơng đƣơng). - 1 trở 220 Ohm hoặc 470 Ohm.
- 1 led đơn
* Lắp mạch:
Hình 6.2: Giao tiếp bo Arduino với nút nhấn
3. Lập trình và giải thích.
int nutnhan = 8; // định nghĩa chân số0 là button int led = 9, t=0; // khai báo led và biến
int status1; // biến lưu các trạng thái nút nhấn // viết hàm chống dội
boolean chong_doi() {
int sta =!digitalRead(nutnhan); // đọc trạng thái nút nhấn }
92 // khởi tạo void setup() { Serial.begin(9600); pinMode(nutnhan,INPUT); pinMode(led,OUTPUT); }
void loop() // vong lap {
int buttonState = digitalRead(nutnhan); Serial.println(buttonState); status1 = chong_doi(); if(status1==true) { { t=!t; // đảo trạng thái } while(status1==true){status1=chong_doi();} } if(t==1) { digitalWrite(led,HIGH); } else { digitalWrite(led,LOW); } }
Câu hỏi ôn tập
Câu 1: trình bày nguyên lý hoạt động của nút nhấn?
Câu 2:Thiết kế phần cứng và lập trình điều khiển theo yêu cầu sau: - Nhấn nút nhấn 1: 8 led đơn chạy từ trái sang phải?
93
BÀI 7: GIAO TIẾP VỚI LED 7 ĐOẠN *Giới thiệu
Bài học này giới thiệu về cách thiết kế , gia công và lập trình điều khiển led 7 đoạn đƣợc ứng dụng rộng rãi trong thực tế
*Mục tiêu: Sau khi học xong bài học này, ngƣời học có khảnăng:
- Trình bày đƣợc cấu tạo và nguyên lý hoạt động của led 7 đoạn - Vẽ đƣợc sơ đồ nguyên lý mạch giao tiếp LED 7 đoạn với Arduino
- Mô phỏng đƣợc chƣơng trình mạch giao tiếp LED 7 đoạn với Arduino
bằng phần mềm mô phỏng
- Kết nối đƣợc phần cứng mạch giao tiếp LED 7 đoạn với Arduino đúng yêu cầu kỹ thuật.
- Viết, nạp và chạy đƣợc chƣơng trình giao tiếp LED 7 đoạn với Arduino
*Nội dung:
1. Cấu tạo led 7 đoạn
Hình 7.1. Hình dáng thực tế led 7 đoạn
Thực ra cấu trúc của LED 7 đoạn gồm 8 LED đơn, nhìn lên hình trên chắc cáctacũng thấy gồm có 7 đoạn và một dấu chấm nhỏ, mỗi đoạn và dấu chấm nhỏ đó là một LED đơn.
Việc sử dụng LED 7 đoạn chúng ta có thể sử dụng để hiển thị các số, các chữ
cái anphabet và nhiều kiểu ký tự khác nhau. Nhƣ trên hình cáctađã thấy, một LED
7 đoạn đơn gồm 10 chân đó là các chân: a, b, c, d, e, f, g, 2 chân chung và chân dấu chấm tròn (DP).
LED 7 đoạn gồm 2 loại đó là dƣơng chung và âm chung. Trong bài học này chúng ta sẽ viết chƣơng trình và tải vào Arduino để hiển thị các số từ 0-9 ( Loại âm chung).
94
Hình 7.2. cấu trúc led 7 đoạn
Để LED hiển thị chúng ta phải làm cho 8 LED đơn nhƣ ở trên hiển thị, ví dụ ở đây 8 LED ở đây là các led mang kí tự a, b, c, d, e, f, g và một dấu chấm ở chân cuối.
Bây giờ chúng ta thử suy nghĩ nếu chúng ta muốn hiển thị số 0 chúng ta phải làm
thế nào? Nhìn vào hình LED hiển thị ở đầu bài chúng ta thấy: Để hiển thị số 0 thì
chúng ta phải làm cho các LED đơn a, b, c, d, e, f phải sáng lên, dấu chấm và g phải tắt đi. Nhƣ vậy để tạo số 0 chúng ta phải thể hiện mã code hệ nhị phân (binary) là B111111100. Tƣơng tự đối với số 1 thì có những cái LED nào sáng? Cáctacó thể viết đƣợc mã làm xuất hiện số 1 đƣợc không? Đó là: B01100000. Tƣơng tự đối với các số 2. 3, 4, 5, 6, 7, 9. Để dễ hiểu hơn tôi xin đƣa ra một bảng sau để cáctadò. Lƣu ý: sáng là 1, tắt là 0.
2. Phần cứng chuẩn bị:
Mạch Arduino (ở đây mình sử dụng Arduino UNO). Breadboard còn gọi testboard.
Dây test board. Điện trở 220 Ω. 1 led 7 đoạn đơn.
95
Lắp mạch:
CHÂN LED 7 ĐOẠN CHÂN ARDUINO
a 2 b 3 c 4 d 5 e 6 f 7 g 8 DP 9
Hình 7.3. Sơ đồ kết nối led 7 đoạn
3. Lập trình và giải thích.
// Khai báo chân
const int G = 8; // G= Arduino chân 8 const int F = 7; // F= Arduino chân 7 const int A = 2; // A = Arduino chân 2
const int B = 3; // B = Arduino chân 3 const int E = 6; // E = Arduino chân 6 const int D = 5; // D = Arduino chân 5 const int C = 4; // C = Arduino chân 4 const int dp = 9; // dp = Arduino chân 9
const int second = 1000; // thiết lập với mili giây, 1000 milliseconds = 1 second const int digit = 10; // Số ký tự hiển thị10 digits (0 - 9)
const int segment = 7; // Số thanh hiển thị trong LED (7) // Định nghĩa những thanh( led đơn) sáng
96 byte digseg[digit][segment] = { { 1,1,1,1,1,1,0 }, // = 0 { 0,1,1,0,0,0,0 }, // = 1 { 1,1,0,1,1,0,1 }, // = 2 { 1,1,1,1,0,0,1 }, // = 3 { 0,1,1,0,0,1,1 }, // = 4 { 1,0,1,1,0,1,1 }, // = 5 { 1,0,1,1,1,1,1 }, // = 6 { 1,1,1,0,0,0,0 }, // = 7 { 1,1,1,1,1,1,1 }, // = 8 { 1,1,1,1,0,1,1 } // = 9 };
void setup() { // Định nghĩa chân xuất tín hiệu OUTPUT writeDigit(digit); delay(second); } delay(4*second); } Câu hỏi ôn tập
97
BÀI 8: GIAO TIẾP VỚI LCD
* Giới thiệu: LCD không chỉ hiển thị các chuỗi ký tự hay số đơn giản mà ta còn
có thể thêm vào các hiệu ứng giúp cho giao diện thêm sinh động và thú vị hơn tùy theo ý muốn.
*Mục tiêu: Sau khi học xong bài học này, ngƣời học có khả năng:
- Trình bày đƣợc cấu tạo và nguyên lý hoạt động của LCD - Vẽ đƣợc sơ đồ nguyên lý mạch giao tiếp LCD với Arduino
- Mô phỏng đƣợc chƣơng trình mạch giao tiếp LCD với Arduino bằng phần mềm mô phỏng
- Kết nối đƣợc phần cứng mạch giao tiếp LCD với Arduino đúng yêu cầu kỹ thuật.
- Viết, nạp và chạy đƣợc chƣơng trình giao tiếp LCD với Arduino.
* Nội dung: 1. Cấu tạo LCD.
Giới thiệu module LCD 16X02:
Trong bài này cáctasẽ tìm cách điều khiển màn hình LCD bằng Arduino mà không sử dụng module I2C LCD. Chỉ cần Arduinotacó thể điều khiển đƣợc LCD nhƣng lại tốn khá nhiều chân của arduino, Ở phần tiếp theo chúng ta sẽ sử dụng module I2C để giải quyết vấn đề đó.
Hình 8.1: Sơ đồ chân LCD 16x2
2. Phần cứng - Chuẩn bị :
Mạch Arduino (ở đây mình sử dụng Arduino UNO). Breadboard còn gọi testboard
98 Dây cắm test board.
1 biến trở 10K.
- Lắp mạch:
Hình 8.2: Sơ đồ phần cứng Arduino với LCD
Hình 8.3: Sơ đồ kết nối chân LCD 16x2 với Arduino
3. Lập trình và giải thích
#include <LiquidCrystal.h> //Khai báo thư viện cho LCD ( Thư viện đã có sẵn) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //noi voi chan LCD LAN LUOT : Rs, E, D4, D5, D6, D7
void setup() {
//Thông báo đây là LCD 1602
lcd.print("DIEN –DIEN TU!"); //In ra màn hình lcd dòng chữ DIEN – DIEN TU }
99
lcd.setCursor(0, 1); // đặt con trỏvào cột 0, dòng 1 lcd.print(" truong cao đang KT"); // In ra dong chu }
Câu hỏi ôn tập
Câu 1: Trình bày chức năng các chân và nguyên lý hoạt động của LCD? Câu 2:Thiết kế phần cứng và lập trình điều khiển theo yêu cầu sau:
- Điều khiển chuỗi ký tự chạy từ trái qua phải ? - Điều khiển chuỗi ký tự chớp tắt ?
100
BÀI 9: ADC-ĐỌC TÍN HIỆU MỘT SỐ LOẠI CẢM BIẾN. *Giới thiệu
Bài học này giới thiệu về cách thiết kế và lập trình cho một loại cảm biến đƣợc ứng dụng nhiều trong thực tế
*Mục tiêu: Sau khi học xong bài học này, ngƣời học có khảnăng:
- Trình bày đƣợc cấu tạo và nguyên lý hoạt động của, cảm biến lm35, bộ ADC trong Arduino.
- Vẽ đƣợc sơ đồ nguyên lý mạch giao tiếp cảm biến với Arduino
- Mô phỏng đƣợc chƣơng trình mạch giao tiếp cảm biến với Arduino bằng phần mềm mô phỏng
- Kết nối đƣợc phần cứng mạch giao tiếp cảm biến với Arduino đúng yêu cầu kỹ thuật.
- Viết, nạp và chạy đƣợc chƣơng trình giao tiếp cảm biến với Arduino.
*Nội dung:
1. Giới thiệu ADC
Bộ chuyển đổi ADC:
ADC (Analog Digital Converter) là bộ chuyển đổi tín hiệu tƣơng tự sang số dùng để chuyển đổi các tín hiệu tƣơng tự từ bên ngoài (nhiệt độ, độ ẩm, …) về dạng số để vi điều khiển có thể xử lý đƣợc. Không phải tất cả các chân của Arduino đều có khả năng ADC. Trên board Arduino, các chân đƣợc ký hiệu Ax (A0 đến A5 trên UNO) để cho biết các chân này có thể đọc đƣợc điện áp tƣơng tự.
Bộ chuyển đổi ADC trên mỗi vi điều khiển là khác nhau. Trên Arduino là 10-bit,
có nghĩa là nó có khả năng phát hiện 1024 (2^10) mức tín hiệu số rời rạc.
Điện áp tham chiếu Vref:
Điện áp tham chiếu là giá trị điện áp lớn nhất mà ADC có thể chuyển đổi đƣợc. Mặc định khi đƣợc cấp nguồn điện áp tham chiếu của Arduino là 5V (có nghĩa là 5V ứng với giá trị ADC max là 1023, với board Arduino 3.3V thì 3.3V ứng với giá trị lớn nhất là 1023). Ngoài ra Arduino còn đƣợc tích hợp các bộ tham chiếu nội, và bộ tham chiếu ngoại tại chân AREF.
Mối quan hệ giữa giá trị ADC và điện áp:
Với giá trị ADC lớn nhất là 2^n - 1 ↔ giá trị điện áp lớn nhất Vref .Với giá trị ADC bất kỳ (Gia_tri_ADC) ↔ giá trị điện áp Vđo bất kỳ → Giá trị điện áp ra Vđo tại một giá trị ADC đo đƣợc là (n là độ phân giải của bộ ADC):
101
Tính toán giá trị điện áp:
Với điện áp tham chiếu mặc định của Arduino là và độ phân giải là 10-bit, ta
có điện áp đo đƣợc tại chân A0 của triết áp là:
2. Phần cứng Chuẩn bị: Arduino UNO R3 Cảm biến nhiệt độ LM35 Lắp mạch : Hình 9.1.sơ đò kết nối UNO với LM35 3. Lập trình và giải thích
Tính toán giá trị nhiệt độ:
Với cảm biến nhiệt độ LM35, chúng ta có cứ 10mV sự thay đổi của điện áp ứng
với 1°C. Với điện áp đọc đƣợc, giá trị của nhiệt độ là: Chƣơng trình:
void setup() {
// Khởi tạo Serial tốc độ 9600bps
102 }
void loop() {
// Đọc giá trị ADC tại chân A0
int adcValue = analogRead(A0);
// Tính toán giá trị nhiệt độ đo đƣợc
float temp = (float)adcValue * 500 / 1023;
// In ra Serial giá trị nhiệt độ với 2 chữ số sau dấu phẩy
Serial.print("Nhiet do: "); Serial.println(temp, 2); // Trễ 500ms delay(500); } Kết quả:
Bật màn hình Serial monitor với tốc độ 9600bps, mỗi khi tác động thay đổi nhiệt độ trên LM35, chúng ta sẽ nhận đƣợc giá trị hiển thị trên màn hình Serial monitor.
- Điều khiển chuỗi ký tự chạy từ trái qua phải ?Câu 1: Viết chƣơng trình điều
khiển đọc giá trị cảm biến hiển thị thông số lên LCD ?
Câu hỏi ôn tập
Câu 1: Thế nào là điện áp tham chiếu?
Câu 1: Trình bày mối quan hệ giữa giá trị ADC và điện áp?
Câu 2: Thiết kế phần cứng và lập trình điều khiển bộ ADC theo yêu cầu sau: Đọc hiệu điện thế của một nguồn điện qua cổng Analog ?
103
BÀI 10: NGẮT NGOÀI .
* Giới thiệu: là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển