电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>以懒惰的方式对电阻器进行排序

以懒惰的方式对电阻器进行排序

2022-10-27 | zip | 0.14 MB | 次下载 | 2积分

资料介绍

描述

嘿,

您是否厌倦了在这样的情况下完成每个项目后结束?

您是一个懒得检查每个电阻器上的颜色代码以按电阻对它们进行分类的杂乱无章的人吗?你是不是懒到连用万用表都嫌多?也许有适合您的解决方案,终极懒惰的欧姆表

构建这个用于检查未分类电阻值的简单欧姆表所需要的只是一堆电阻器(这次是已知值)、一个 Arduino 和一个显示器(我用的是 I2C OLED 显示器)。

然后,我们将依靠分压器方程来获得与已知值电阻器串联的未知电阻器的值。这种简单的技术只有一个缺点。两个电阻越不同,我们的测量就越不准确。为了克服这种现象,我们需要使用多个电阻器并编写代码,让 Arduino 为未知值计算选择最合适的电阻器。

遵循这一理念,我们可以按照下图中的示意图构建欧姆表。

?
pYYBAGNYk8iAOWHNAAEw6rZpQkg687.jpg
设备示意图。
?

如果您使用 I2C 显示器,您也可以按照原理图进行操作。Arduino Nano 将引脚 A4 用于 SDA,将 A5 用于 SCL。

现在让我们关注编码部分。我使用的代码可以在这里看到:

#include 
#include 
#include 
  
[...]
  
int R1 = 100;
int R2 = 1000;
int R3 = 10000;
long R4 = 100000;
long R5 = 1000000;
long Rn;
int D2 = 2;
int D3 = 3;
int D4 = 4;
int D5 = 5;
int D6 = 6;
float raw = 0;
float Vout = 0;
float Ru = 0;
int Analogohm = A0;
void setup() {
 [...]
}
void loop() {
   pinMode(D2, OUTPUT);
   pinMode(D3, INPUT);
   pinMode(D4, INPUT);
   pinMode(D5, INPUT);
   pinMode(D6, INPUT);
   digitalWrite(D2, HIGH);
   raw = analogRead(Analogohm);
   Serial.println(raw);
   Serial.println("ref 1M");
   Rn = R5;
   if (raw < 350 || raw > 800){
     digitalWrite(D2, LOW);
     pinMode(D2, INPUT);
     pinMode(D3, OUTPUT);
     digitalWrite(D3, HIGH);
     raw = analogRead(Analogohm);
     Serial.println(raw);
     Serial.println("ref 100k");
     Rn = R4;
     if (raw < 350 || raw > 800){
       digitalWrite(D3, LOW);
       pinMode(D3, INPUT);
       pinMode(D4, OUTPUT);
       digitalWrite(D4, HIGH);
       raw = analogRead(Analogohm);
       Serial.println(raw);
       Serial.println("ref 10k");
       Rn = R3;
       if (raw < 350 || raw > 800){
         digitalWrite(D4, LOW);
         pinMode(D4, INPUT);
         pinMode(D5, OUTPUT);
         digitalWrite(D5, HIGH);
         raw = analogRead(Analogohm);
         Serial.println(raw);
         Serial.println("ref 1000");
         Rn = R2;
         if (raw < 350 || raw > 800){
           digitalWrite(D5, LOW);
           pinMode(D5, INPUT);
           pinMode(D6, OUTPUT);
           digitalWrite(D6, HIGH);
           raw = analogRead(Analogohm);
           Serial.println(raw);
           Serial.println("ref 100");
           Rn = R1;
         }
       }
     }
   }
   Vout = 5*(raw/1024);
   Ru = (Rn*Vout)/(5-Vout);
   if (Ru < 10 || Ru < 70) {
     Ru = 10 *round(Ru/10);
   } else if (Ru < 100 || Ru < 700){
     Ru = 100 *round(Ru/100);
   } else if (Ru < 1000 || Ru < 7000){
     Ru = 1000 *round(Ru/1000);
   } else if (Ru < 10000 || Ru < 70000){
     Ru = 10000 *round(Ru/10000);
   } else if (Ru < 100000 || Ru < 700000){
     Ru = 100000 *round(Ru/100000);
   } else if (Ru < 1000000 || Ru < 7000000){
     Ru = 1000000 *round(Ru/1000000);
   }
   Resistance(Ru);
   delay(1000);
}
[...]

对于 OLED 屏幕,我只使用了 Adafruit 库。您只需要通过 Arduino IDE 的库管理器下载它并复制您需要的代码。我使用了两个位图只是为了让阅读更美观,您可以轻松添加位图或替换我添加的位图。

对于欧姆表部分,您需要了解它是如何工作的,因为您可以根据使用多少电阻器作为参考值来更改它。

一旦代码进入 void 循环,Arduino 将检查引脚 A0 上的电压。由于从分压器方程:

?

V0 = Vi*R2/(R1+R2)

?

如果 R1 和 R2 相同,我们应该使 V0 接近 2.5V(因此我们的 10 位读数为 512)。

如果该值与这些结果相差甚远,则代码将移至下一个值,依此类推,直到我们得到最接近的电阻器。一旦满足“闭合电阻”条件,该值将打印在显示屏上。

注意#1:在每个 IF 语句中,我们需要重新定义每个数字引脚的 pinMode,因为如果将其保留为输出,它将表现为低阻抗引脚并破坏我们在引脚 A0 上的测量。

一旦选择了正确的电阻器,未知电阻器值(代码中的 Ru 变量)将使用分压器方程计算。

注意#2:对于这个设备,我只使用了 5 个电阻,但如果你愿意,你可以为板上的每个数字引脚设置更多的值。

系统下方的照片建立在面包板上。

?
poYBAGNYk8-AbbgkAAw89cYeGTs022.jpg
面包板上的懒惰仪表。
?

现在对于实际应用,我们需要构建某种盒子,我们可以在其中插入未知电阻,结果将显示在屏幕上。

我制作的盒子可以很容易地用3D打印机打印出来,所有部件都可以用胶枪固定在一起。需要对已知的电阻器进行一些焊接,以使所有东西都适合小体积。

?
pYYBAGNYk9WAN3nIAAm9Kc-cmAI378.jpg
最终装置。
?

只剩下一件事:将未分类的电阻器插入那些小孔并清洁工作台!

玩得开心,下个教程见。

?

编辑:我修改了代码的舍入部分,因为它可能会在舍入 5k 电阻时导致错误。通过此更改,问题应该得到解决。无论如何,在参考之间添加一个 5k 电阻应该可以完全防止这个问题。


评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费