疏雨梧桐 发表于 2014-7-29 12:39:42

arduinoDIY求大神指点 自制的电阻测试仪 加显示

本帖最后由 疏雨梧桐 于 2014-7-29 14:33 编辑

我今天刚开始做自己设计的程序和电路,会有些粗糙。

先说原件:
10kΩ的电阻 一个
面包板一个
面包线 若干
arduino Uno 板一个



-思路:analogRead()函数可以读取一个值,0--1023对应0---5v


把5v电源,10K电阻,还有待测电阻接一个回路。
10k电阻一端接GND,然后读取另一段的电位值,可求出电流。然后电流乘以10K+待测的值=5
解未知量 可求出电阻的值。然后在串口通信中输出 ,外接的话可以采用稳压二极管来得到稳定电压。

A4端做为输入

程序
如下:



#define SENSOR 0
int i=0,x=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
i=analogRead(5);
x=(10240000/i)-10000;
Serial.print(x);
delay(1000);
}



图片上传不上去,只能这样,我想用lcd显示 但是不知道输出变量的函数是什么,求大神指点。

我写了这个 也贴上去,


//ceshidianzu
int DI = 12;
int RW = 11;
int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚
int q;
int Enable = 2;
int x=0,i=0,y=0;
void LcdCommandWrite(int value) {
// 定义所有引脚
int i = 0;
for (i=DB; i <= DI; i++) //总线赋值
{
   digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。
   value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);// 延时1ms
digitalWrite(Enable,LOW);
delayMicroseconds(1);// 延时1ms
}

void LcdDataWrite(int value) {
// 定义所有引脚
int i = 0;
digitalWrite(DI, HIGH);
digitalWrite(RW, LOW);
for (i=DB; i <= DB; i++) {
   digitalWrite(i,value & 01);
   value >>= 1;
}
digitalWrite(Enable,LOW);
delayMicroseconds(1);
digitalWrite(Enable,HIGH);
delayMicroseconds(1);
digitalWrite(Enable,LOW);
delayMicroseconds(1);// 延时1ms
}



void setup(){


int i = 0;
for (i=Enable; i <= DI; i++) {
   pinMode(i,OUTPUT);
}
delay(100);
// 短暂的停顿后初始化LCD
// 用于LCD控制需要
LcdCommandWrite(0x38);// 设置为8-bit接口,2行显示,5x7文字大小                     
delay(64);                     
LcdCommandWrite(0x38);// 设置为8-bit接口,2行显示,5x7文字大小                        
delay(50);                     
LcdCommandWrite(0x38);// 设置为8-bit接口,2行显示,5x7文字大小                        
delay(20);                     
LcdCommandWrite(0x06);// 输入方式设定
                         // 自动增量,没有显示移位
delay(20);                     
LcdCommandWrite(0x0E);// 显示设置
                         // 开启显示屏,光标显示,无闪烁
delay(20);                     
LcdCommandWrite(0x01);// 屏幕清空,光标位置归零
delay(100);                     
LcdCommandWrite(0x80);// 显示设置
                         // 开启显示屏,光标显示,无闪烁
delay(20);      
}
void SHOW(int x)
{
    switch(x)
    {
      case 0: LcdDataWrite('0');break;
      case 1: LcdDataWrite('1');break;
      case 2: LcdDataWrite('2');break;
      case 3: LcdDataWrite('3');break;
      case 4: LcdDataWrite('4');break;
      case 5: LcdDataWrite('5');break;
      case 6: LcdDataWrite('6');break;
      case 7: LcdDataWrite('7');break;
      case 8: LcdDataWrite('8');break;
      case 9: LcdDataWrite('9');break;
    }
}
void loop()
{
   i=analogRead(5);
x=(10240000/i)-10000;
for(y=0;x>1;)
{
    y++;
    q=x%10;
    x/=10;
}

LcdCommandWrite(0x01);// 屏幕清空,光标位置归零
delay(10);
LcdCommandWrite(0x80+3);
delay(10);                     
// 写入欢迎信息
LcdDataWrite('W');
LcdDataWrite('e');
LcdDataWrite('l');
LcdDataWrite('c');
LcdDataWrite('o');
LcdDataWrite('m');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('t');
LcdDataWrite('o');
delay(10);
LcdCommandWrite(0xc0+1);// 定义光标位置为第二行第二个位置
delay(10);
LcdDataWrite('m');
LcdDataWrite('y');
LcdDataWrite(' ');
LcdDataWrite('D');
LcdDataWrite('I');
LcdDataWrite('Y');
LcdDataWrite(' ');
delay(5000);
LcdCommandWrite(0x01);// 屏幕清空,光标位置归零
delay(10);
LcdDataWrite('I');
LcdDataWrite('h');
LcdDataWrite('e');
LcdDataWrite(' ');
LcdDataWrite('r');
LcdDataWrite('e');
LcdDataWrite('s');
LcdDataWrite('i');
LcdDataWrite('s');
LcdDataWrite('t');
LcdDataWrite('a');
LcdDataWrite('n');
LcdDataWrite('c');
LcdDataWrite('e');

delay(10);
LcdCommandWrite(0xc0+1);// 定义光标位置为第二行第si个位置
delay(10);
LcdDataWrite(' ');
LcdDataWrite('i');
LcdDataWrite('s');
LcdDataWrite(' ');

for(y;y>0;y--)
{
    SHOW(q);
}


delay(7000);

}



改进后版本:

稍后加上!





#include <LiquidCrystal.h>   //调用arduino自带的LiquidCrystal库

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//设置接口

int x,i;

void setup()
{
lcd.begin(16, 2);//初始化LCD
delay(1000); //延时1000ms
}

void loop ()                     
{

i = analogRead(5);   //i变量为从5信号口读取到的数值
x=(10240000/i)-10000;
lcd.clear(); //清屏
lcd.setCursor(0, 0) ; //设置光标位置为第一行第一个位置
lcd.print("R=");      //使屏幕显示文字R=
lcd.print(x);

delay(3000);                     //延时3秒,这里也就是刷新速度。

}





求指点,菜鸟一枚,奋斗中……

zoologist 发表于 2014-7-29 13:18:33

论坛支持的图片比较小,你减少一下 size再上一下试试

发表于 2014-7-29 13:18:38

欢迎指导!http://app.qlogo.cn/mbloghead/1ec0679983af80c0a640

疏雨梧桐 发表于 2014-7-29 13:36:11

zoologist 发表于 2014-7-29 13:18 static/image/common/back.gif
论坛支持的图片比较小,你减少一下 size再上一下试试

谢谢 ,我用ps把图片转小了,然后就可以了。

a1039752256 发表于 2014-7-29 14:13:06

用库啊亲,

疏雨梧桐 发表于 2014-7-29 14:18:54

a1039752256 发表于 2014-7-29 14:13 static/image/common/back.gif
用库啊亲,

原来不知道啊,刚刚在论坛中看到了。这就去改!

疏雨梧桐 发表于 2014-7-29 14:25:51

a1039752256 发表于 2014-7-29 14:13 static/image/common/back.gif
用库啊亲,#include <LiquidCrystal.h>   //调用arduino自带的LiquidCrystal库

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//设置接口

int x,i;

void setup()
{
lcd.begin(16, 2);//初始化LCD
delay(1000); //延时1000ms
}

void loop ()                     
{

i = analogRead(5);   //i变量为从5信号口读取到的数值
x=(10240000/i)-10000;
lcd.clear(); //清屏
lcd.setCursor(0, 0) ; //设置光标位置为第一行第一个位置
lcd.print("R=");      //使屏幕显示文字R=
lcd.print(x);

delay(3000);                     //延时3秒,这里也就是刷新速度。

}
这样可以吗?

小叉 发表于 2014-7-29 17:21:31

http://www.geek-workshop.com/thread-3312-1-1.html
看看这个不知道有没有帮助

a1039752256 发表于 2014-7-29 20:55:02

x=(10240000/i)-10000;
这里是什么意思捏?

a1039752256 发表于 2014-7-29 21:06:37

a1039752256 发表于 2014-7-29 20:55
x=(10240000/i)-10000;
这里是什么意思捏?

哦,明白了,原来是简化了原式

a1039752256 发表于 2014-7-29 21:11:21

不过那个x最好改成long型,避免数据溢出

疏雨梧桐 发表于 2014-7-31 14:51:30

a1039752256 发表于 2014-7-29 21:11 static/image/common/back.gif
不过那个x最好改成long型,避免数据溢出

好的 我明白了 谢谢!

疏雨梧桐 发表于 2014-7-31 15:01:03

a1039752256 发表于 2014-7-29 20:55 static/image/common/back.gif
x=(10240000/i)-10000;
这里是什么意思捏?

这个是推出来的公式:

youliuyi61 发表于 2014-9-18 11:12:49

能保证电流不变化吗?

疏雨梧桐 发表于 2014-11-8 23:19:34

youliuyi61 发表于 2014-9-18 11:12 static/image/common/back.gif
能保证电流不变化吗?

电压稳定的情况下 电阻不变电流就不会变, 输出端的电压为稳定的5v所以不会变。
页: [1] 2
查看完整版本: arduinoDIY求大神指点 自制的电阻测试仪 加显示