1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo thực hành vi điều khiển bài thực hành số 1 mô phỏng và nạp chương trình

26 3 0

Đ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

Thông tin cơ bản

Tiêu đề Báo cáo Thực hành Vi điều khiển Bài 01
Tác giả Lương Thành Huy
Trường học Trường Đại Học Kỹ Thuật - Công Nghệ Cần Thơ
Chuyên ngành Điện - Điện Tử
Thể loại Báo cáo thực hành
Năm xuất bản 2022 - 2023
Thành phố Cần Thơ
Định dạng
Số trang 26
Dung lượng 312,31 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài 01 CHỈNH LƯU MỘT PHA TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ CẦN THƠ KHOA ĐIỆN ĐIỆN TỬ VIỄN THÔNG  BÁO CÁO THỰC HÀNH VI ĐIỀU KHIỂN SINH VIÊN THỰC HIỆN Họ và tên LƯƠNG THÀNH HUY MSSV 2000982 Lớp DIE[.]

Trang 1

- -BÁO CÁO THỰC HÀNH

VI ĐIỀU KHIỂN

SINH VIÊN THỰC HIỆN:

Họ và tên: LƯƠNG THÀNH HUY.

MSSV: 2000982 Lớp: DIEN0120.

Nhóm: 02

Học kỳ 2 Năm học: 2022 - 2023

Trang 2

Bài thực hành số 1:

MÔ PHỎNG VÀ NẠP CHƯƠNG TRÌNH

NỘI DUNG BÁO CÁO

 Nội dung 1: Lập trình và nạp chương trình cho Arduino Uno

Yêu cầu 1: Viết chương trình chớp tắt led với thời gian delay 500 ms.

- Nhận xét về kết quả nhận được sau khi nạp chương trình mẫu như sau:

int ledPin = 13; // Pin kết nối với LED

- Chương trình thay đổi thời gian đáp ứng đóng 1 giây, ngắt 2 giây của led:

int ledPin = 13; // chân kết nối led

void setup() {

pinMode(ledPin, OUTPUT);

}

void loop() {

digitalWrite(ledPin, HIGH); // bật led

delay(1000); // mở led trong 1 giây

digitalWrite(ledPin, LOW); // tắt led

delay(2000); // tắt led trong 2 giây

Xin cam kết số liệu báo cáo, các câu trả lời là do tự cá nhân làm và số liệu ghi nhận được từ thí nghiệm, không có sao chép của bất kỳ ai Nếu có sự sao chép bất kì nội dung nào sẽ nhận điểm 0 (không)

Người cam kết ký và ghi rõ họ tên:

Trang 3

- Sinh viên nhập chương trình mẫu thứ 2 vào Arduino IDE kiểm tra hoạt động

và cho nhận xét với code đã nhập ở tiểu mục 2.

Bài 1: chương trình lập trình điều khiển 8 led sáng tắt luân phiên theo kiểu led sao

băng như sau:

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Khai báo mảng các chân LED

void setup() {

for (int i=0; i<8; i++) {

pinMode(ledPins[i], OUTPUT); // Thiết lập chân LED là OUTPUT

Trang 4

}

void loop() {

for (int i=0; i<8; i++) {

digitalWrite(ledPins[i], HIGH); // Bật LED

delay(100); // Chờ 100ms

digitalWrite(ledPins[i], LOW); // Tắt LED

}

for (int i=6; i>=1; i ) {

digitalWrite(ledPins[i], HIGH); // Bật LED

delay(100); // Chờ 100ms

digitalWrite(ledPins[i], LOW); // Tắt LED

}

}

Bài 2: Chương trình lập trình điều khiển 8 led sáng tắt theo kiểu ngẫu nhiên như sau:

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Khai báo mảng chứa các chân của các LED

int delayTime = 1000; // Thời gian chờ giữa các lần bật tắt LED

void setup() {

for (int i = 0; i < 8; i++) {

pinMode(ledPins[i], OUTPUT); // Cấu hình chân của LED là OUTPUT

}

}

void loop() {

int randomLed = random(8); // Chọn ngẫu nhiên một LED để bật tắt

digitalWrite(ledPins[randomLed], HIGH); // Bật LED đã chọn

delay(delayTime); // Chờ một khoảng thời gian

digitalWrite(ledPins[randomLed], LOW); // Tắt LED đã chọn

delay(delayTime); // Chờ một khoảng thời gian

}

Bài 3: Chương trình điều khiển độ sáng của led sáng lên dần và tắt dần theo thời gian.

int brightness = 0; // độ sáng ban đầu của LED

int fadeAmount = 5; // tỉ lệ giảm độ sáng của LED

Trang 6

Bài thực hành số 2:

LẬP TRÌNH PHƯƠNG THỨC GIAO TIẾP UART, I2C, SPI

NỘI DUNG BÁO CÁO

 Nội dung 1: Lập trình giao tiếp UART với máy tính

Yêu cầu 1: Viết chương trình gởi dữ liệu từ Arduino lên máy tính và hiển thị kết quả gởi

thông qua cửa sổ Arduino IDE.

- Nhận xét về kết quả hoạt động của chương trình mẫu:

Trang 7

int number = 1234; // Khởi tạo số nguyên

void setup() {

Serial.begin(9600); // Khởi tạo kết nối Serial với tốc độ truyền 9600 bps

}

void loop() {

Serial.println("Text: " + String(number)); // In giá trị dưới dạng text

Serial.print("Decimal: "); // In giá trị dưới dạng số thập phân

- Ghi nhận lại kết quả sau 2 vòng chương trình chính như sau:

Yêu cầu 3: Viết chương trình đọc số gởi từ máy tính xuống Arduino và điều chỉnh thời gian nhấp nháy tương ứng với số vừa nhập.

float millivolts = (value / 1024.0) * 5000;

float celsius = millivolts / 10 ;

Serial.print(celsius);

Serial.print(" degrees Celsius, ");

Trang 8

int ledPin = 13; //khởi tạo đầu ra được kết nối với LED

int incomingByte = 0; //khởi tạo biến để nhận dữ liệu từ máy tính

void setup() {

pinMode(ledPin, OUTPUT); //khởi tạo chế độ đầu ra cho đầu ra LED

Serial.begin(9600); //khởi tạo kết nối Serial với tốc độ baud là 9600

}

void loop() {

if (Serial.available() > 0) { //kiểm tra nếu dữ liệu có sẵn để đọc

incomingByte = Serial.read(); //đọc dữ liệu vào biến incomingByte

if (incomingByte == '0') { //nếu nhập số 0

digitalWrite(ledPin, LOW); //tắt đèn LED

}

else { //nếu nhập số khác 0

digitalWrite(ledPin, HIGH); //bật đèn LED

delay(incomingByte * 100); //nhấp nháy đèn LED tương ứng với số liệu được nhập vàodigitalWrite(ledPin, LOW); //tắt đèn LED

delay(incomingByte * 100); //chờ một khoảng thời gian trước khi quay lại vòng lặp

}

}

Trang 9

 Nội dung 2: Lập trình giao tiếp qua I2C

Yêu cầu 4: Viết chương trình hiển thị LCD 16x2 qua giao tiếp I2C.

- Ghi nhận kết quả thu được từ chương trình mẫu:

- Lập trình chương trình hiển thị thông tin sinh viên gồm Họ và tên trên dòng trên,

mã số sinh viên và lớp luân phiên thay đổi ở dòng dưới

lcd.setCursor(0,0); // Đặt vị trí con trỏ tại hàng thứ nhất, cột đầu tiên

lcd.print(''Luong Thanh Huy ");

lcd.setCursor(0,1);

lcd.print(''2000982");

Trang 10

delay(1000); // Đợi 1 giây

lcd.clear(); // Xóa màn hình

delay(1000); // Đợi 1 giây

}

Trang 11

Bài thực hành số 3:

LẬP TRÌNH ĐỌC TÍN HIỆU SỐ, TÍN HIỆU TƯƠNG TỰ

VÀ TÍN HIỆU TỪ CÁC CẢM BIẾN

NỘI DUNG BÁO CÁO

 Nội dung 1: Đọc tín hiệu số từ nút nhấn

Yêu cầu 1: Viết chương trình đọc nút nhấn, hiển thị kết quả nhấn nút qua led và qua Serial Monitor.

Trang 12

- Nhấn nút và giữ, ghi nhận kết quả hiển thị trên led và trên Serial Monitor như sau:Hiển thị nút đã được nhấn.

- Chương trình lập trình đọc nút nhấn, mỗi lần nhấn thì đổi trạng thái, khi nhất giữtrạng thái không thai đổi (chọn tác động xung cạnh lên hoặc xung cạnh xuống của nút nhấn)như sau:

const int BUTTON_PIN = 2; // Chân kết nối nút nhấn

const int DEBOUNCE_DELAY = 50; // Thời gian chờ giữa các lần đọc trạng thái nút nhấnint buttonState = HIGH; // Trạng thái nút nhấn hiện tại

int lastButtonState = HIGH; // Trạng thái nút nhấn trước đó

unsigned long lastDebounceTime = 0; // Thời điểm nhấn cuối cùng

int reading = digitalRead(BUTTON_PIN);

// Kiểm tra xem trạng thái hiện tại có khác với trạng thái trước đó không

if (reading != lastButtonState) {

// Lưu thời điểm nhấn cuối cùng

lastDebounceTime = millis();

}

// Kiểm tra xem đã đủ thời gian chờ giữa các lần đọc trạng thái chưa

if ((millis() - lastDebounceTime) > DEBOUNCE_DELAY) {

// Nếu trạng thái hiện tại khác với trạng thái trước đó

Màn hình lcd hiển thị các kí tự trên ma trận vừa nhấn

- Hãy viết chương trình đọc password từ bàn phím Nhận password là 13579 Nếuđúng password thì nhấn phím = trên bàn phím để tắt và mở đèn led tại chân 13 Nếu sai thìđèn nhấp nháy liên tục Nhấn phím C để nhập lại password

Trang 13

int password = 13579; // đặt password cần nhập vào

int ledPin = 13; // đặt chân led

 Nội dung 2: Đọc tín hiệu tương tự.

Yêu cầu 3: Lập trình điều khiển thời gian nhấp nháy led theo tín hiệu tương tự đọc được từ

biến trở.

Trang 14

- Ghi nhận kết quả thu được và cho nhận xét kết quả thu được khi điểu chỉnh biếntrở:

Khi thay đổi điều chỉnh biến trở thời gian led hiển thị lâu hơn

- Mắc nối tiếp biến trở vởi điện trở, hãy xác định phạm vi điện áp được hiển thị khiđiều chỉnh biến trở là:

- Nếu muốn hiển thị từ 0 - 5V thì phải thay đổì trong chương trình lập trình:

- Chương trình điều khiển độ sáng đèn led bằng biến trở và hiển thị điện áp đọcđược từ biến trở lên LCD như sau:

 Nội dung 3: Lập trình đọc cảm biến

Yêu cầu 4: Lập trình cảm biến phát hiện đối tượng chuyển động, nghiêng hoặc lắc và hiển

thị qua đèn led.

- Nhận xét kết quả khi nạp chương trình cho vi điều khiển và rung lăc hoặc nghiêng như sau:

Khi duy chuyển tay cảm biến đọc được và hiển thị ra led

Yêu cầu 5: Lập trình đọc giá trị cảm biến LM35 và hiển thị độ C và độ F lên Serial Monitor của Arduino IDE Khi nhiệt độ quá 400C thì sáng đèn led.

- Ghi nhận giá trị đạt được sau khi nạp chương trình cho vi điều khiển như sau:

Giá trị đo được bằng giá trị nhiệt độ phòng

- Phương pháp chuyển đồi kết quả điện áp đọc được sang nhiệt độ sử dụng LM35

float temperature = (5.0*analogRead(A0)*100.0/1024.0);

Yêu cầu 6: Lập trình sử dụng cảm biến thu hồng ngoại IR 1838 để nhận tín hiệu từ remote.

- Ghi nhận giá trị đạt được sau khi nạp chương trình cho vi điều khiển và bấm các phímtrên remote như sau:

Giá trị thu được là các giá trị đã được bấm trên remote

- Chương trình đọc password remote Nhận password là 13579 Nếu đúng password thìnhấn phím CH trên bàn phím để tắt và mở đèn led tại chân 13 Nếu sai thì đèn nhấp nháyliên tục Nhấn phím EQ để nhập lại password Chương trình như sau:

#include<RECV.h>

int ledPin = 13; // chân kết nối led

int RECV_PIN = 11; // chân kết nối IR receiver

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup(){

Serial.begin(9600);

Trang 15

irrecv.enableIRIn(); // khởi tạo IR receiver

pinMode(ledPin, OUTPUT); // chân kết nối led được cấu hình là output

}

void loop(){

if (irrecv.decode(&results)){ // nếu nhận được tín hiệu IR

Serial.println(results.value); // in giá trị tín hiệu IR nhận được

irrecv.resume(); // khởi động lại IR receiver

if (results.value == 13579){ // nếu password đúng

digitalWrite(ledPin, HIGH); // bật led

delay(500); // đợi 0.5s

digitalWrite(ledPin, LOW); // tắt led

Keyboard.press(KEY_LEFT_GUI); // nhấn phím CH (Windows key)

Keyboard.press('h');

Keyboard.releaseAll(); // thả phím

}

else{ // nếu password sai

digitalWrite(ledPin, HIGH); // bật led

digitalWrite(ledPin, LOW); // tắt led

Keyboard.press(KEY_LEFT_GUI); // nhấn phím EQ (Windows key)

Trang 16

Bài 1: Viết chương trình lập trình đọc cảm biến phát hiện lửa.

int flamePin = 2; // pin của cảm biến phát hiện lửa

void setup() {

pinMode(flamePin, INPUT); // Thiết lập chân của cảm biến phát hiện lửa là input

Serial.begin(9600); // Khởi tạo kết nối serial để gửi giá trị đọc được từ cảm biến

}

void loop() {

int flameValue = digitalRead(flamePin); // Đọc giá trị từ cảm biến

Serial.println(flameValue); // In giá trị đọc được từ cảm biến ra serial monitor

delay(100); // Chờ 100ms trước khi đọc giá trị tiếp theo

MFRC522 mfrc522(SS_PIN, RST_PIN); // Khởi tạo đối tượng MFRC522

int ledPin = 13; // Chân điều khiển đèn sáng/tắt

void setup() {

Serial.begin(9600); // Khởi tạo kết nối seri

SPI.begin(); // Khởi tạo giao tiếp SPI

mfrc522.PCD_Init(); // Khởi tạo đối tượng MFRC522

pinMode(ledPin, OUTPUT); // Khởi tạo chân điều khiển đèn là đầu ra

}

void loop() {

// Kiểm tra xem có thẻ RFID được đặt gần mô-đun đọc hay không

if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {

Trang 17

// Kiểm tra thẻ RFID có khớp với thẻ được định sẵn hay không

if (mfrc522.uid.uidByte[0] == 0x12 && mfrc522.uid.uidByte[1] == 0x34 &&mfrc522.uid.uidByte[2] == 0x56 && mfrc522.uid.uidByte[3] == 0x78) {

Trang 18

Bài thực hành số 4:

LẬP TRÌNH XUẤT TÍN HIỆU ÂM THANH

VÀ HIỂN THỊ TRÊN CÁC LOẠI LED

 Nội dung 1: Phát âm thanh ra loa buzz thụ động

Yêu cầu 1: Viết chương trình xuất được một số âm thanh khác nhau ra loa buzz thụ

động theo tần số.

Kết quả nhận được khi nạp chương trình vào mạch vừa mắc ra sao?

Âm thanh phát ra thay đổi khi tần số thay đổi

Thay đổi các thông số tần số vào thời gian phát có ảnh hưởng ra sao đến âm thanhnhận được trên loa buzz?

Nếu tần số được tăng lên, âm thanh sẽ trở nên lớn hơn

Yêu cầu 2: Viết chương trình hiển thị số đếm ra led 7 đoạn đơn.

- Nạp chương trình cho vi điều khiển, ghi nhận kết quả hiển thị như sau:

Led 7 đoạn hiện thị các số điếm và tăng dần

- Chương trình hiển thị số lần lượt 0,2,4,6,8,1,3,5,7,9, sau đó tắt tất cả, nhấp nháy dấuchấm 2 lần và đếm ngược lại các số vừa hiển thị như sau:

Trang 19

Yêu cầu 3: Viết chương trình hiển thị số đếm ra led 7 đoạn 4 led.

- Ghi nhận lại kết quả sau khi chạy chương trình như sau:

Trang 20

- Viết chương trình hiển thị phút trên 2 led và giây trên 2 led với dấu chấm ở giữa 2

nhóm làm phần ngăn cách (Gợi ý: lệnh hiển thị số thực: sevseg.setNumberF(số thực,

bool resistorsOnSegments = false;

bool updateWithDelays = false;

byte hardwareConfig = COMMON_CATHODE;

sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,resistorsOnSegments, updateWithDelays);

// Thiết lập độ sáng cho led 7 đoạn

Trang 21

uint32_t currentTime = millis();

// Hiển thị phút và giây trên các led 7 đoạn

uint8_t digits[] = {minute / 10, minute % 10, second / 10, second % 10};

sevseg.setNumberF(digits[0] * 10 + digits[1] + digits[2] * 0.1 + digits[3] * 0.01, 2);// Tạm dừng 1 giây

delay(1000);

}

Yêu cầu 4: Viết chương trình sử dụng IC 74HC595.

- Kiểm tra kết quả lập trình bằng mạch thực tế và ghi nhận lại kết quả như sau:

shiftOut(SHIFT_DATA, SHIFT_CLOCK, MSBFIRST, 0);

// Loop through each LED

for (int i = 0; i < 8; i++) {

// Set the bit at the current LED index to HIGH

shiftOut(SHIFT_DATA, SHIFT_CLOCK, MSBFIRST, 1 << i);

// Latch the data

Trang 22

- Kiểm tra kết quả lập trình bằng mạch thực tế và ghi nhận lại kết quả.

#define DIN 8 //Data pin

for(int col=0; col<8; col++) {

shiftOut(DIN, CLK, MSBFIRST, ledMatrix[row][col]);

Trang 23

Bài thực hành số 5:

LẬP TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ

NỘI DUNG BÁO CÁO

 Nội dung 1: Điều khiển nguồn thiết bị thông qua điều khiển relay

Yêu cầu 1: Viết chương trình điều khiển đóng ngắt nguồn điện cho led thông qua điều

khiển relay.

- Nạp chương trình cho mạch và ghi nhận lại kết quả thu được

Sau khi nạp chương trình vào board Arduino, LED sẽ được điều khiển đóng ngắttheo chu kỳ 15 giây

- Sinh viên viết chương trình đọc cảm biến mưa để điều khiển đóng ngắt relay như trên Khi có mưa, relay đóng trong thời gian 20 giây sau đó giữa trạng thái tắt Khi không có mưa (hết mưa), relay đóng trong 10 giây sau đó giữa trạng thái tắt

const int rainSensorPin = A0;

// Khai báo chân kết nối với relay

const int relayPin = 8;

// Ngưỡng cảm biến mưa

const int rainThreshold = 500;

// Đọc giá trị từ cảm biến mưa

int rainValue = analogRead(rainSensorPin);

// Nếu giá trị lớn hơn ngưỡng, đóng relay trong 20 giây

Trang 24

digitalWrite(relayPin, LOW);

}

 Nội dung 2: Điều khiển động cơ Servo

Yêu cầu 2: Lập trình điều khiển động cơ Servo SG90

- Ghi nhận kết quả thu được và cho nhận xét kết quả thu được

Kết quả thu được là động cơ Servo SG90 sẽ quay từ góc 0 đến góc 180 độ, mỗi lần quaymột góc nhất định và có khoảng thời gian chờ giữa các lần quay

- Lập trình chương trình hiển thị góc quay lên LCD

 Nội dung 3: Điều khiển động cơ bước

Yêu cầu 4: Lập trình điều khiển động cơ bước 28BYJ-48.

- Kiểm tra kết quả lập trình bằng mạch thực tế

const int stepsPerRevolution = 2048;

int pin1 = 8;

int pin2 = 9;

int pin3 = 10;

Trang 25

int pin4 = 11;

// Khởi tạo động cơ

Stepper myStepper(stepsPerRevolution, pin1, pin2, pin3, pin4);

// Lấy giá trị của cảm biến xoay

int sensorValue = analogRead(A0);

// Tính toán chiều quay dựa trên giá trị của cảm biến

Ngày đăng: 11/05/2023, 06:39

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w