Tự học Arduino với mạch đo điện sử dụng Arduino Uno

Trong bài này, Dân Điện Tử sẽ hướng dẫn các bạn cách xây dựng một bo mạch đo điện áp dùng Arduino để xử lý thông tin và xuất ra ngoài Led 7 đoạn.Mạch đơn giản chỉ cần kết nối các chân của LED 7 đoạn với bo Arduino, thứ tự kết nối được mô tả trong mã nguồn.
Riêng LED 7 đoạn các bạn có thể mua tại công ty Thiên Minh (tme.vn). Nó có 13 chân để điều khiển.

Sơ đồ kết nối Arduino với led 7 đoạn

Tín hiệu điện lấy vào lấy vào để đo sẽ đặt ở chân A1, mạch lấy tín hiệu đo là 1 mạch chia áp theo sơ đồ như sau. Tín hiệu đo sẽ lấy ngay chân ngoài của R1. Tín hiệu đưa vào chân A1 nằm giữa R1 và R2

Thêm chú thích
Với R1 = 1M, R2 = 100K.
Video Clip giới thiệu bài học
Đoạn mã nguồn sẽ như sau

#define LED1 10
#define LED2 11
#define LED3 12
#define LED4 13

#define SEG_A 7
#define SEG_B 8
#define SEG_C 2
#define SEG_D 3
#define SEG_E 4
#define SEG_F 5
#define SEG_G 6
#define DP 9
#define NUM_SAMPLES 10
#define DC A1

int sum = 0;
String n;
unsigned char sample_count = 0;
int number[10][7] =
{
  //A,B,C,D,E,F,G
  {0, 0, 0, 0, 0, 0, 1}, //num 0
  {1, 0, 0, 1, 1, 1, 1}, //num 1
  {0, 0, 1, 0, 0, 1, 0}, //NUM 2
  {0, 0, 0, 0, 1, 1, 0}, //NUM 3
  {1, 0, 0, 1, 1, 0, 0}, //NUM 4
  {0, 1, 0, 0, 1, 0, 0}, //NUM 5
  {0, 1, 0, 0, 0, 0, 0}, //NUM 6
  {0, 0, 0, 1, 1, 1, 1}, //NUM 7
  {0, 0, 0, 0, 0, 0, 0}, //NUM 8
  {0, 0, 0, 0, 1, 0, 0}, //NUM 9

};
// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(DP, OUTPUT);

}

// the loop routine runs over and over again forever:
void loop() {
  String Vin = "0";
  float vol = 0.00;
  if (sample_count < NUM_SAMPLES) {
    sum += analogRead(DC);
    sample_count++;
  } else {
    vol = (float) 0.0048828125 * (sum / 10);
    vol = vol * 11.25;
    int IntegerPart = (int) vol;
    int decimalPart = 100 * (vol - IntegerPart + 0.005);
    Vin = (String) IntegerPart;
    if (Vin.length() < 2) Vin = '0' + Vin;
    Vin = Vin + (String) decimalPart;
    sample_count = 0;
    sum = 0;
    // hien thi ra led 7 doan
    n = (String) Vin.charAt(0);
    displayNum(LED1, n.toInt());
    n = (String) Vin.charAt(1);
    displayNum(LED2, n.toInt());
    n = (String) Vin.charAt(2);
    displayNum(LED3, n.toInt());
    n = (String) Vin.charAt(3);
    displayNum(LED4, n.toInt());
  }
}

void displayNum(int l, int n) {
  _turnOff();
  digitalWrite(SEG_A, number[n][0]);
  digitalWrite(SEG_B, number[n][1]);
  digitalWrite(SEG_C, number[n][2]);
  digitalWrite(SEG_D, number[n][3]);
  digitalWrite(SEG_E, number[n][4]);
  digitalWrite(SEG_F, number[n][5]);
  digitalWrite(SEG_G, number[n][6]);

  if (l == LED2) {
    digitalWrite(DP, LOW);
  } else {
    digitalWrite(DP, HIGH);
  }
  digitalWrite(l, HIGH);
  delay(5);
}

void _turnOff() {
  digitalWrite(LED4, LOW);
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
}

Trả lời

Email của bạn sẽ không được hiển thị công khai.