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


Trong bài này, vnMedian 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);
}
Back To Top