11:58 PM
0

Mạch đo điện sử dụng Arduino Uno

Diễn đàn này không có mục Arduino, mình đăng đại ở đây, Admin thấy không đúng chổ, di chuyển giúp nhé, cảm ơn.

Mình đang nghiên cứu Arduino, nhận thấy cần có 1 cái đồng hồ led 7 đoạn dùng để đo điện và kiểm tra các cảm biến. Và mình đã làm mạch đo điện dùng Arduino Uno. Riêng hình sơ đồ chân mình sẽ cập nhật sau. Loay hoay với cái phần mềm vẽ sơ đồ thấy có vẽ rắc rối quá, để mình vẽ tay chụp và gửi sau vậy

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ơ đồ chân mình sẽ cập nhật sau và sơ đồ kết nối mình sẽ cập nhật sau)

Tín hiệu điện lấy và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

Name:  0b110497c74763664c3d98ba8763416f.jpg
Views: 1
Size:  19.9 KB

Với R1 = 1M, R2 = 100K.
Điện áp ngõ ra sẽ đưa vào chân A1.

Video Clip giới thiệu bài học

Clip quay ở định dạng 720p các bạn xem mờ nhớ cấu hình cái clip ở cái biểu tượng bánh răng cơ khí nhé.

Đ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);
}

0 comments:

Post a Comment

 

Lập trình

-

Arduino Hải Phòng

,