步驟1:材料
這是要使用的材料。
集成:
IC ATMEGA 328P(Arduino UNO/Duemilanove )
LM741
LM393
穩(wěn)壓L7805CV
LCD 16X2
晶體16MHz
電容器:
0.33uF
100nF
2 x 22pF 《1》聚酯1uF 《電阻:10K電位計(jì)
7 x 10K
2 x 220歐姆
1 M 《150》 330歐姆
二極管:
1N4004
連接器:
端子塊2針
4 x MOLEX 100支2針
4針MOLEX花費(fèi)100
4 x Borne
2 x開(kāi)關(guān)
2 x按鍵盒
步驟2:代碼和性能
作為測(cè)量骨骼電容的三個(gè)功能,電感和電阻,我們必須選擇我們想做的,要選擇功能并使用2位可以計(jì)數(shù)0-0,0-1,1-0,1-1。
所以我們使用兩個(gè)開(kāi)關(guān)進(jìn)行選擇,使它們用作下拉開(kāi)關(guān),將它們用作下拉開(kāi)關(guān),以測(cè)量電感為0-0,電容為0-1,電阻為1-0,這就是方法我們選擇衡量。
要測(cè)量電感,請(qǐng)使用LM393比較器來(lái)測(cè)量LM741的電容,并使用10k電阻輕松地測(cè)量電阻并制作一個(gè)分壓器。
假設(shè)我們要計(jì)算R1。我們知道R2的值為10k,我們知道Vin的值為5V(通常在Arduino環(huán)境中可以找到),并且在Arduino的模擬Vout引腳上的讀數(shù)是750。
1 。-我們知道ADC Arduino的分辨率為10位,這意味著對(duì)于0V到5V之間的輸入值,可以進(jìn)行1024分頻(將2提升到10)。因此,如果我們?cè)谀M引腳上施加5V,則其值為1023(1024不會(huì)記住從0開(kāi)始計(jì)數(shù),而不是從1開(kāi)始計(jì)數(shù))。如果我們?cè)谝_上施加0V,其值將為0,例如,如果我們將其設(shè)為2.5V,其值將為511。
因此,如果以數(shù)字值提供讀取模擬引腳的值是750,我們可以計(jì)算出Vout,即分壓器的輸出電壓。
》》 5V/1024格= 0,00488V/格
》》 0.00488伏/格?750格= 3.66V
2.-我們可以已經(jīng)清除了R1,那就是問(wèn)題:
》》 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的值計(jì)算為:
》》 R1 =(R2?Vin/Vout)-R2
相同的代碼在西班牙語(yǔ)文檔中,因此如果您如有任何疑問(wèn),請(qǐng)這樣說(shuō):
#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 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
在這里您可以看到原理圖中所有內(nèi)容的連接方式,我上傳了用老鷹。
-
萬(wàn)能表
+關(guān)注
關(guān)注
1文章
21瀏覽量
13999 -
Arduino
+關(guān)注
關(guān)注
188文章
6470瀏覽量
187180
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論