Skip to main content

Arduino Uno R4 Minima

 

NOTE: Nối chân boot và chân GND lúc đầu để nhận port trước khi cắm USB. Sau khi xử lí hiện port ảo như bo mini thì không cần nối nữa.

1.     Thiết lập i trường

Tải arduino IDE

B1: Mở Arduino IDE. o Tools > Board > Boards Manager...

B2: m kiếm Uno R4. i đặt i "Arduino UNO R4 Boards" (phiêphiên bản mới nhất).

B3: Kết nối board o y nh bằng p USB-C.

B4: o Tools > Board > chọn đúúng bản bạn đang (Arduino UNO R4 Minima hoặc WiFi).

B5: o Tools > Port > Chọn cổng COM n board đi m.

Lưu ýý: Nhớ kiểm tra deviece manager để kiểm tra chíchính c port của thiết bị

Bạn tiến hình cài đặt và set up flash firmware theo link bài hướng dẫn Hướng dẫn Flash Firmware Bootloader Arduino cho chip trước khi nạp code qua Arduino IDE.

Sau khi hoàn tất quá trình flash firmware giao diện arduino IDE sẽ hiện như vầy.

Bạn tiến hành nạp lần đầu với chương trình hello world đơn giản với code mẫu.

void setup() {
  // Initialize serial communication at 115200 baud rate
  Serial.begin(115200);
  
  // Wait for serial port to connect (needed for some Arduino boards)
  while (!Serial) {
    ; // Wait for serial port to connect
  }
}

void loop() {
  // Print "Hello, World!" to the Serial Monitor
  Serial.println("Hello, World!");
  
  // Wait for 1 second (1000 milliseconds)
  delay(1000);
}

Sau khi nạp lần đầu port của mạch sẽ xuất hiện đây là kết quả hiển thị trên Arduino IDE.

image.png

Chương trình đã chạy thành công và COM của board đã hiển thị trên màn hình những lần sau bạn chỉ cần chọn đúng com và nạp code.

2.     Kiểm tra c chức ngoại vi

a.     Digital I/O

-        c linh kiện cần chuẩn bị 1 con led 1 con trở.

Code:

void setup() {
//cấu nh c châchân từ 0 đến 13 n mức 1
  for (int i = 0; i <= 13; i++) {
    pinMode(i, OUTPUT);
    digitalWrite(i, HIGH);
  }
}
void loop() {
}

èè Nhấn upload để nạp code trêtrên o arduino

Chấn n lại nối lần lượt o c châchân D0 D13 àà led ng ok

b.    Analog input

Kịch bản để test;

Mục tiêtiêu: Kiểm tra khả năng đọc n hiệu Analog c nhận độ phâphân giải 14-bit.

Thiết bị: 1 biến trở (Potentiometer) 10kΩ10kΩ, y Jumper.

Kết nối:

+ ChâChân trátrái biến trở -> GND.

+ ChâChân phải biến trở -> 5V.

+ ChâChân giữa biến trở -> A1 (hoặc bất kỳ châchân A o từ A0-A5)

Code:

void setup() {
  Serial.begin(9600);
  // config adc 14bit
  analogReadResolution(14);
  Serial.println("--- Kiem tra ADC 14-bit ---");
  Serial.println("Xoay bien tro de xem gia tri tu 0 den 16383");
}
void loop() {
  int sensorValue = analogRead(A1); // test từng châchân thay ở đâây
  // nh toátoán điện ááp thực tế
  float voltage = sensorValue * (5.0 / 16383.0);
  Serial.print("Gia tri ADC: ");
  Serial.print(sensorValue);
  Serial.print(" | Dien ap: ");
  Serial.print(voltage);
  Serial.println(" V");
  delay(200);
}

ðð Sau khi upload code chọn serial monitor để quan t kết hợp với với xoay biến trở để thay đổi giágiá trị đọc ADC.

n hiển thị của serial monitor:

ðð Sau đóó kiểm trả tương tự với c châchân n lại bằng ch thay code tại

int sensorValue = analogRead(A1); //A0  A5

c.     PWM

-        Ta test PWM (D3, D5, D6, D9, D10, D11)

-        Kịch bản test: quan t độ ng àà mờ của led

Nạp code trêtrên: Tất cả c châchân PWM sẽ ng "thở" (ng - tối tuần hoàhoàn).

Test: Cắm y Jumper từ LED o lần lượt c châchân D3, D5, D6, D9, D10, D11.

Quan t: Nếu LED ng mờ dần dần một ch mượt -> PASS. Nếu LED bị chớp tắt đột ngột hoặc chỉ 2 mức ng/tối -> FAIL.

// Danh ch c châchân hỗ trợ PWM trêtrên R4 Minima
const int pwmPins[] = {3, 5, 6, 9, 10, 11};
const int numPins = sizeof(pwmPins) / sizeof(pwmPins[0]);
void setup() {
  for (int i = 0; i < numPins; i++) {
    pinMode(pwmPins[i], OUTPUT);
  }
}
void loop() {
  // ng dần n
  for (int duty = 0; duty <= 255; duty++) {
    for (int i = 0; i < numPins; i++) {
      analogWrite(pwmPins[i], duty);
    }
    delay(5);
  }
  // Mờ dần đi
  for (int duty = 255; duty >= 0; duty--) {
    for (int i = 0; i < numPins; i++) {
      analogWrite(pwmPins[i], duty);
    }
    delay(5);
  }
}

d.    DAC

Test bằng buzzer TMB12A05 i bắt đầu u từ tiếng nhỏ đến tiếng t to khi điện ááp đạt ngưỡng.

Kết nối:

  • ChâChân i (+): Cắm o A0.
  • ChâChân ngắn (-): Cắm o GND.

Code:

void setup() {
  analogWriteResolution(12); // 12-bit (0-4095)
}
void loop() {
  // Tăng dần điện ááp từ 0V n ~3.3V
  for (int i = 0; i <= 4095; i += 10) {
    analogWrite(A0, i);
    delay(5);
  }
  delay(1000); // Giữ ở mức cao nhất 1 giâgiây
  analogWrite(A0, 0); // Tắt
  delay(1000);
}

e.     UART

ch m: ng một sợi y Jumper nối trực tiếp châchân D0 o D1.

NguyêNguyên : Board sẽ gửi một tự qua châchân TX, sợi y dẫn quay lại châchân RX. Nếu nhận đúúng tự đóó thìthì UART sống.

Code:

void setup() {
  Serial.begin(9600);  // USB Serial để xem kết quả trêtrên y nh
  Serial1.begin(9600); // UART trêtrên châchân D0, D1
}
void loop() {
  Serial1.print("TDLODY"); // Gửi qua TX
  delay(100);
  if (Serial1.available()) {
    String rcv = Serial1.readString();
    Serial.print("UART Test: ");
    Serial.println(rcv); // Nếu hiện "TDLOGY" trêtrên Serial Monitor  Pass
  }
  delay(1000);
}

Kết quả:

f.      I2C

Test hiển thị trêtrên LCD:

Kết nối:

     + 5V VCC

     + GND GND

     + A5 SCL

     + A4 SDA

Code địa chỉ thiết bị:

#include <Wire.h>
void setup() {
  Wire.begin();
  Serial.begin(9600);
    byte error, address;
  int nDevices;
  Serial.println("Dang quet...");
  nDevices = 0;
  for (address = 1; address < 127; address++) {
    // Wire.endTransmission tra ve:
    // 0: Thanh cong (Tim thay thiet bi)
    // 4: Loi khac
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("Tim thay thiet bi I2C tai dia chi: 0x");
      if (address < 16) Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    } else if (error == 4) {
      Serial.print("Loi chua xac dinh tai dia chi 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("Khong tim thay thiet bi I2C nao.\n");
  else
    Serial.println("Hoan thanh.\n");
}
void loop() {
}

Code test hiển thị LCD:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Thay đổi địa chỉ 0x21 thàthành địa chỉ code quéquét trước
LiquidCrystal_I2C lcd(0x21, 16, 2);
void setup() {
  lcd.init();                      // Khởi tạo LCD
  lcd.backlight();                 // Bật đèèn nền
  // ng 1
  lcd.setCursor(0, 0);
  lcd.print("UNO R4 MINIMA");
  // ng 2
  lcd.setCursor(0, 1);
  lcd.print("TEST I2C: OK!");
  delay(2000);
}
void loop() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Tester: TDLOGY");
  lcd.setCursor(0, 1);
  lcd.print("Status: PASSING");
  delay(1000);
  lcd.setCursor(14, 1);
  lcd.print("..");
  delay(500);

}

Kết quả:

g.     SPI

Kết nối:

+ D11 (COPI/MOSI) nối o D12 (CIPO/MISO).

+ NguyêNguyên : Dữ liệu xuất ra từ châchân COPI sẽ quay ngược về châchân CIPO. Nếu board nhận đúúng những vừa gửi, nghĩa khối SPI hoạt động

Code:

//Mode: SPI Mode 0 (Mặc định).

//Clock Speed: 4MHz

//Bit Order: MSB First.

#include <SPI.h>
void setup() {
  Serial.begin(9600);
  while (!Serial);
  SPI.begin(); // Khởi tạo SPI (D11, D12, D13)
  Serial.println("--- Kiem tra SPI Loopback ---");
  Serial.println("Hay dam bao da noi Jumper giua D11 va D12");
}
void loop() {
  static byte testData = 0;
  // Gửi dữ liệu qua SPI  nhận lại ngay lập tức
  byte receivedData = SPI.transfer(testData);
  Serial.print("Gui: 0x");
  Serial.print(testData, HEX);
  Serial.print(" | Nhan: 0x");
  Serial.print(receivedData, HEX);
  if (receivedData == testData) {
    Serial.println(" -> [PASS]");
  } else {
    Serial.println(" -> [FAIL]");
  }
  testData++; // Tăng dữ liệu test
  delay(1000);

}

Kết quả: