如何使用Arduino制作万能表

电子说

1.3w人已加入

描述

步骤1:材料

这是要使用的材料。

集成:

IC ATMEGA 328P(Arduino UNO/Duemilanove )

LM741

LM393

稳压L7805CV

LCD 16X2

晶体16MHz

电容器:

0.33uF

100nF

2 x 22pF 《1》聚酯1uF 《电阻:10K电位计

7 x 10K

2 x 220欧姆

1 M 《150》 330欧姆

二极管:

1N4004

连接器:

端子块2针

4 x MOLEX 100支2针

4针MOLEX花费100

4 x Borne

2 x开关

2 x按键盒

步骤2:代码和性能

Arduino

Arduino

Arduino

作为测量骨骼电容的三个功能,电感和电阻,我们必须选择我们想做的,要选择功能并使用2位可以计数0-0,0-1,1-0,1-1。

所以我们使用两个开关进行选择,使它们用作下拉开关,将它们用作下拉开关,以测量电感为0-0,电容为0-1,电阻为1-0,这就是方法我们选择衡量。

要测量电感,请使用LM393比较器来测量LM741的电容,并使用10k电阻轻松地测量电阻并制作一个分压器。

假设我们要计算R1。我们知道R2的值为10k,我们知道Vin的值为5V(通常在Arduino环境中可以找到),并且在Arduino的模拟Vout引脚上的读数是750。

1 。-我们知道ADC Arduino的分辨率为10位,这意味着对于0V到5V之间的输入值,可以进行1024分频(将2提升到10)。因此,如果我们在模拟引脚上施加5V,则其值为1023(1024不会记住从0开始计数,而不是从1开始计数)。如果我们在引脚上施加0V,其值将为0,例如,如果我们将其设为2.5V,其值将为511。

因此,如果以数字值提供读取模拟引脚的值是750,我们可以计算出Vout,即分压器的输出电压。

》》 5V/1024格= 0,00488V/格

》》 0.00488伏/格•750格= 3.66V

2.-我们可以已经清除了R1,那就是问题:

》》 Vout =(R2/R1 + R2)•Vin

》》 3.66 V =(10k/R1 + 10k)•5V

》》 R1 + 10k = 10k•5V/3.66V

》》 R1 =(10k•5V/3.66V)-10k =3.66KΩ

通常,我们可以将R1的值计算为:

》》 R1 =(R2•Vin/Vout)-R2

相同的代码在西班牙语文档中,因此如果您如有任何疑问,请这样说:

#include LiquidCrystal lcd(13, 8, 7, 5, 4, 2);

#define R_1 A1

#define R_2 A2

#define IND_1 6

#define IND_2 12

#define fuente_pin 11

#define switch_pin 10

#define descarga_pin 9

#define PIN_1 A3

#define PIN_2 A4

//Variables leer pines

int pin_1;

int pin_2;

//Variables para inductometro

double pulso;

double frecuencia;

double capacitancia;

double inductancia;

//Capacimetro

float R = 1.0e6;

float C = 0;

float RC = 0;

long t_inicio = 0;

volatile long t_alto = 0;

long T = 0;

float VCC = 4.50;

float Vref = VCC / 2;

float V0 = 0;

float error_correccion = 40.;

int retardo_delay = 20;

//Variables resistometro

int vR_1 = 0;

int vR_2 = 0;

float Vin = 5;

float Vout = 0;

float Res_1 = 10000;

float Res_2 = 9000000;

float r_1 = 0;

float r_2 = 0;

float Resistor_1[8];

float Resistor_2[5];

float ResArreglo_1;

float ResArreglo_2;

void setup() {

lcd.begin(16, 2);

//Configuracion de pines

pinMode(PIN_1, INPUT);

pinMode(PIN_2, INPUT);

//Configuracion Inductometro

pinMode(IND_1, INPUT);

pinMode(IND_2, OUTPUT);

capacitancia = 0.000001021;

//delay(200);

//Configuracion de Resistometro

pinMode(R_1, INPUT);

pinMode(R_2, INPUT);

//Configuracion Capacimetro

attachInterrupt(1, stop, RISING);

Vref = VCC / 2;

pinMode(fuente_pin, OUTPUT);

digitalWrite(fuente_pin, LOW);

pinMode(switch_pin, INPUT);

pinMode(descarga_pin, INPUT);

}

void loop() {

leerpines();

if (pin_1 == LOW && pin_2 == LOW) {

digitalWrite(IND_2, HIGH);

delay(5);

digitalWrite(IND_2, LOW);

delayMicroseconds(100);

pulso = pulseIn(IND_1, HIGH, 5000);

lcd.clear();

if (pulso 》 0.1) {

frecuencia = 1.E6 / (2 * pulso);

inductancia = 1. / (capacitancia * frecuencia * frecuencia * 4.*3.1459 * 3.14159);

inductancia *= 1E6;

lcd.setCursor(2, 0);

lcd.print(“INDUCTANCIA:”);

//delay(200);

if (inductancia 》= 1000) {

lcd.setCursor(0, 1);

int valor = (inductancia / 1000) - 0.5;

lcd.print(valor);

lcd.setCursor(6, 1);

lcd.print(“mH”);

} else {

lcd.setCursor(0, 1);

int valor_2 = inductancia + 10;

lcd.print(valor_2);

lcd.setCursor(6, 1);

lcd.print(“uH”);

}

} else if (pulso 《 0.1) {

lcd.setCursor(2, 0);

lcd.print(“INSERTAR IND”);

}

delay(300); } if (pin_1 == LOW && pin_2 == HIGH) {

lcd.clear();

for (int i = 0 ; i 《= 7; i++) {

Resistor_1[i] = analogRead(R_1);

ResArreglo_1 = ResArreglo_1 + Resistor_1[i];

}

vR_1 = (ResArreglo_1 / 8.0);

Vout = (Vin * vR_1) / 1023;

r_1 = Res_1 * (1 / ((Vin / Vout) - 1));

lcd.setCursor(2, 0);

lcd.print(“RESISTENCIA:”);

if (r_1 《= 999) {

lcd.setCursor(0, 1);

lcd.print(r_1);

lcd.setCursor(9, 1);

lcd.print(“Omhs”);

} else if (r_1 》= 1000) {

r_1 = r_1 / 1000;

lcd.setCursor(0, 1);

lcd.print(r_1);

lcd.setCursor(9, 1);

lcd.print(“KOmhs”);

}

delay(500);

ResArreglo_1 = 0;

} if (pin_1 == HIGH && pin_2 == LOW) {

lcd.clear();

if (debounce(switch_pin) == LOW)

{

pinMode(descarga_pin, OUTPUT);

digitalWrite(descarga_pin, LOW);

delay(100);

pinMode(descarga_pin, INPUT);

digitalWrite(fuente_pin, HIGH);

t_inicio = micros(); } if (t_alto 》 0 && t_inicio 》 0 && (t_alto - t_inicio) 》 0 )

{

T = (t_alto - t_inicio);

RC = -T / log((Vref - VCC) / (V0 - VCC));

//Vref = VCC/2

//V0 = 0V

C = RC / R; //Valor en uF

lcd.setCursor(0, 0);

lcd.print(“C:”);

lcd.setCursor(3, 0);

lcd.print(C * 1000, 1);

lcd.setCursor(13, 0);

lcd.print(“nF”);

lcd.setCursor(0, 1);

lcd.print(“C:”);

lcd.setCursor(3, 1);

lcd.print(C * 1000000 - error_correccion , 0);

lcd.setCursor(13, 1);

lcd.print(“pF”); t_inicio = 0;

t_alto = 0; digitalWrite(fuente_pin, LOW);

delay(2000);

}

}

}void leerpines() {

pin_1 = digitalRead(PIN_1);

pin_2 = digitalRead(PIN_2);

}void stop()

{

t_alto = micros();

}int debounce(int pin)

{

int estado;

int previo_estado;

previo_estado = digitalRead(pin);

for (int i = 0; i 《 retardo_delay; i++)

{

delay(1);

estado = digitalRead(pin);

if ( estado != previo_estado)

{

i = 0;

previo_estado = estado;

}

}

return estado;

}

步骤3:电路,原理图和PCB

Arduino

在这里您可以看到原理图中所有内容的连接方式,我上传了用老鹰。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分