大家好,今天小编来为大家解答以下的问题,关于兴趣爱好交流网站源码分享,兴趣爱好页面网站这个很多人还不知道,现在让我们一起来看看吧!
我们将逐步构建一个万用表。我们将分别看到所有部分,最后我们将所有部分加在一起。首先,我们将使用非常简单的arduino配置来构建一个简单的欧姆表。我们将在每种情况下看到arduino代码。对于每个示例,我们将首先在测量值的arduino监视器上进行串口打印,最后使用使用i2c通信在LCD屏幕显示出来。我们还将构建一个电容表,一个电感表,最后建立电流表和功率计。
电阻表
因此,我们将使用最基本的分压器来计算阻值。众所周知,分压器由两个串联的电阻(R1和R2)组成。中间点的输出电压为[R2/(R1+R2)]Vin。使用该公式并了解两个电阻之一的值并测量Vout,可以很容易地计算出电阻的阻值。
我们知道Vin将是arduino的5伏。我们也知道R2是1k欧姆。我们可以使用Arduino的模拟输入之一测量Vout,例如引脚A0。通过所有这3个值,我们现在可以计算出电阻器R1的未知值。所以像这样我们自己做了一个电阻表。但问题是精度。当R2=1k欧姆时,我们能够以非常好的精度测量0到1k欧姆的电阻。但是为了测量更高的阻值,我们必须改变R2的值。我们将使用R2=2k来测量0到2k之间的电阻,对于2K到20k之间的值,R2=20k,对于20k到200k之间的值,R2=200k,最后R2=1M,以测量200k到1M欧姆之间的值。
好的,我们想测量未知电阻的电阻。因此,我们将数字引脚D2连接到它,在写代码时我们将其切换到OUTPUTHIGH或INPUT,以便在需要时施加5V或高阻态。使用旋钮开关我们可以改变档位。记得在旋转开关引脚上放一些下拉电阻。我们将5V连接到旋转开关的中间引脚,将4个引脚连接到数字引脚D9,D10,D11和D12。当D9为高时,我们将在0到2k欧姆范围内。因此我们将D2设置为高电平,使未知电阻器的电压为5伏,并将D5设置为OUTPUT和LOW状态。我们必须将D3,D4,D6设置为INPUTS,以使引脚具有高阻抗,因此没有电流会流过其他3个电阻。当我们改变比例时,我们需要做的就是将其中一个引脚更改为OUTPUT为LOW状态,并将其他引脚设置为INPUTS。复制下面的代码并将其上传到您的Arduino。我使用得是ArduinoUNO,但你可以使用任何类型的Arduino。首先,为了使用带有i2c通信的LCD屏幕,您必须在您的ArduinoIDE中安装i2cLyquidCrystal库。
你可以下载Lyquidcrystal库,要安装它,我们只需转到Sketch->Include库,然后打开我们刚刚下载的.zip文件。
文件详情见微信公众号电子爱好讨论分享
源代码:
//LCDconfig
include<LiquidCrystal_I2C.h>
LiquidCrystal_I2Clcd(0x3f,20,4);//sometimestheadressisnot0x3f.Changeto0x27ifitdosn’twork.
intanalogPin=0;
intV_measured=0;
intVin=5;
floatVout=0;
intapply_voltage=2;
floatR2=0;
floatbuffer=0;
intch2K=5;
intch20K=4;
intch200K=3;
intch1M=6;
intScale2k=9;
intScale20k=12;
intScale200k=11;
intScale1M=10;
voidsetup()
{
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(V_measured,INPUT);
pinMode(analogPin,INPUT);
pinMode(apply_voltage,OUTPUT);
//Detecttherangemode(0-1kK;10k-100k;100k-1M)
pinMode(Scale2k,INPUT);
pinMode(Scale20k,INPUT);
pinMode(Scale200k,INPUT);
pinMode(Scale1M,INPUT);
//Wesetthispinsasinputfornow.
pinMode(ch2K,INPUT);
pinMode(ch20K,INPUT);
pinMode(ch200K,INPUT);
pinMode(ch1M,INPUT);
}
voidloop()
{
///////////////////-2k-/////////////////////
if(digitalRead(Scale2k))
{
digitalWrite(apply_voltage,HIGH);
pinMode(ch2K,OUTPUT);
pinMode(ch20K,INPUT);
pinMode(ch200K,INPUT);
pinMode(ch1M,INPUT);
digitalWrite(ch2K,LOW);
floatR1=2;//SetthisvaluestothevalueoftheusedresistorinKohms
V_measured=analogRead(analogPin);//in8bits
buffer=V_measured*Vin;
Vout=(buffer)/1024.0;//involts
buffer=(Vin/Vout)-1;
R2=R1*buffer*1000;//*1000becauseweexpressitinohms
if(R2>2000)
{
Serial.print(“Increasescale”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Increasescale”);
lcd.setCursor(0,1);
lcd.print(“orinsertresist”);
delay(1000);
}
if(R2<2000)
{
Serial.print(“—-[2K]—-“);
Serial.print(“\\n”);
Serial.print(“\\n”);
Serial.print(“Resistance:”);
Serial.print(R2);
Serial.print(“”);
Serial.print(“ohms”);
Serial.print(“\\n”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“SCALE:0-2K”);
lcd.setCursor(0,1);
lcd.print(R2);
lcd.setCursor(10,1);
lcd.print(“ohms”);
delay(1000);
}
}
////////////////////////////////////////////
///////////////////-20k-/////////////////////
if(digitalRead(Scale20k))
{
digitalWrite(apply_voltage,HIGH);
pinMode(ch2K,INPUT);
pinMode(ch20K,OUTPUT);
pinMode(ch200K,INPUT);
pinMode(ch1M,INPUT);
digitalWrite(ch20K,LOW);
floatR1=20;//SetthisvaluestothevalueoftheusedresistorinKohms
V_measured=analogRead(analogPin);//in8bits
buffer=V_measured*Vin;
Vout=(buffer)/1024.0;//involts
buffer=(Vin/Vout)-1;
R2=R1*buffer;
if(R2>20)
{
Serial.print(“Increasescale”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Increasescale”);
lcd.setCursor(0,1);
lcd.print(“orinsertresist”);
delay(1000);
}
if(R2<20)
{
Serial.print(“—-[20K]—-“);
Serial.print(“\\n”);
Serial.print(“\\n”);
Serial.print(“Resistance:”);
Serial.print(R2);
Serial.print(“”);
Serial.print(“Kohms”);
Serial.print(“\\n”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“SCALE:2-20K”);
lcd.setCursor(0,1);
lcd.print(R2);
lcd.setCursor(10,1);
lcd.print(“Kohms”);
delay(1000);
}
}
////////////////////////////////////////////
///////////////////-200k-/////////////////////
if(digitalRead(Scale200k))
{
digitalWrite(apply_voltage,HIGH);
pinMode(ch2K,INPUT);
pinMode(ch20K,INPUT);
pinMode(ch200K,OUTPUT);
pinMode(ch1M,INPUT);
digitalWrite(ch200K,LOW);
floatR1=220;//SetthisvaluestothevalueoftheusedresistorinKohms
V_measured=analogRead(analogPin);//in8bits
buffer=V_measured*Vin;
Vout=(buffer)/1024.0;//involts
buffer=(Vin/Vout)-1;
R2=R1*buffer;
if(R2>200)
{
Serial.print(“Increasescale”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Increasescale”);
lcd.setCursor(0,1);
lcd.print(“orinsertresist”);
delay(1000);
}
if(R2<200)
{
Serial.print(“—-[200K]—-“);
Serial.print(“\\n”);
Serial.print(“\\n”);
Serial.print(“Resistance:”);
Serial.print(R2);
Serial.print(“”);
Serial.print(“Kohms”);
Serial.print(“\\n”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“SCALE:20-200K”);
lcd.setCursor(0,1);
lcd.print(R2);
lcd.setCursor(10,1);
lcd.print(“Kohms”);
delay(1000);
}
}
////////////////////////////////////////////
///////////////////-1M-/////////////////////
if(digitalRead(Scale1M))
{
digitalWrite(apply_voltage,HIGH);
pinMode(ch2K,INPUT);
pinMode(ch20K,INPUT);
pinMode(ch200K,INPUT);
pinMode(ch1M,OUTPUT);
digitalWrite(ch1M,LOW);
floatR1=1;//SetthisvaluestothevalueoftheusedresistorinMohms
V_measured=analogRead(analogPin);//in8bits
buffer=V_measured*Vin;
Vout=(buffer)/1024.0;//involts
buffer=(Vin/Vout)-1;
R2=R1*buffer;
if(R2>2)
{
Serial.print(“Increasescale”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Increasescale”);
lcd.setCursor(0,1);
lcd.print(“orinsertresist”);
lcd.setCursor(10,1);
lcd.print(“Mohms”);
delay(1000);
}
if(R2<2)
{
Serial.print(“—-[1M]—-“);
Serial.print(“\\n”);
Serial.print(“\\n”);
Serial.print(“Resistance:”);
Serial.print(R2);
Serial.print(“”);
Serial.print(“Mohms”);
Serial.print(“\\n”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“SCALE:200-1M”);
lcd.setCursor(0,1);
lcd.print(R2);
lcd.setCursor(10,1);
lcd.print(“Mohms”);
delay(1000);
}
}
////////////////////////////////////////////
if((digitalRead(Scale2k)==LOW)&&(digitalRead(Scale20k)==LOW)&&(digitalRead(Scale200k)==LOW)&&(digitalRead(Scale1M)==LOW))
{
Serial.print(“Selectscale”);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Selectscaleand”);
lcd.setCursor(0,1);
lcd.print(“insertresistor”);
Serial.print(“\\n”);
delay(1000);
}
}
现在,打开串口监视器或连接LCD屏幕并放入未知值的电阻器。
关于兴趣爱好交流网站源码分享的内容到此结束,希望对大家有所帮助。