怎样将1个模拟输入用于Arduino的6个按钮

电子说

1.3w人已加入

描述

步骤1:电路

Arduino

Arduino的模拟输入可接受0V至5V输入。此输入具有10位分辨率,这意味着信号被分成2 ^ 10个段或1024个计数。基于此,在允许同时按下的同时,我们最多可能输入到模拟输入中的是10个按钮到1个模拟输入。但是,这不是一个完美的世界。导体中存在电阻,外部来源的噪声以及功率不完善。因此,为了给自己带来足够的灵活性,我计划设计6个按钮。这在一定程度上受到TinkerCAD Circuits具有6开关DIP开关对象这一事实的影响,这将使测试变得容易。

设计的第一步是确保每个按钮在按下时单独按下,将提供独特的电压。这排除了所有电阻器的值相同。下一步是,并联添加电阻值时,电阻值不能与任何单个电阻器值相同。当电阻并联时,可以通过Rx = 1/[(1/R1)+(1/R2)]来计算得到的电阻。因此,如果R1 = 2000和R2 = 1000,则Rx = 667。我推测通过将每个电阻器的尺寸加倍,对于任何组合我都不会看到相同的电阻。

因此,到目前为止,我的电路是有6个开关,每个开关都有自己的电阻。但是,完成该电路还需要一个电阻。

最后一个电阻有3个用途。首先,它充当下拉电阻。如果没有电阻,则当没有按钮按下时电路将不完整。这将使Arduino模拟输入上的电压浮动到任何电压电位。下拉电阻器实质上将电压下拉至0V。第二个目的是限制该电路的电流。欧姆定律指出,V = IR或电压=电流乘以电阻。在给定的电压源下,电阻越大,电流就越小。因此,如果将5V信号施加到500ohm电阻,则我们可以看到的最大电流为0.01A或10mA。第三个目的是提供信号电压。流过最后一个电阻的总电流为:i = 5V/Rtotal,其中Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R 5)+(1/R 6)]}。但是,对于每个按下了相应按钮的电阻,仅包括1/Rx。从总电流中,提供给模拟输入的电压将为i * Rlast或i * 500。

步骤2:证明-Excel

Arduino

证明该电路具有独特的电阻和独特的电压的最快,最简单的方法是使用Excel的功能。

我设置了所有可能的组合切换输入并按照二进制模式顺序组织这些。值“ 1”表示开关打开,空白表示开关关闭。在电子表格的顶部,我输入了每个开关和下拉电阻的电阻值。然后,我计算了每种组合的等效电阻,但当所有电阻都关闭时除外,因为这些电阻在没有电源的情况下不会产生影响。为了使我的计算变得容易,以便我可以复制和粘贴到每个组合,我通过将每个开关值(0或1)乘以其反向电阻值来将所有组合包括在计算中。如果开关断开,这样做可以从计算中消除其电阻。可以在电子表格的图像中看到生成的方程式,但是Req = Rx + 1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6)。使用Itotal = 5V/Req,我们确定通过电路的总电流。这与流过下拉电阻的电流相同,并向我们的模拟输入提供电压。计算公式为Vin = Itotal x Rx。查看Req数据和Vin数据,我们可以发现我们确实有唯一的值。

在这一点上,我们的电路似乎可以正常工作。现在要弄清楚如何对Arduino进行编程。

第3步:Arduino编程

Arduino

Arduino

Arduino

Arduino

Arduino

当我开始考虑如何对Arduino进行编程时,我最初计划设置各个电压范围来确定开关是打开还是关闭。但是,有一天晚上躺在床上时,我想到应该可以找到一个方程式来做到这一点。怎么样? EXCEL。 Excel能够计算方程以最适合图表中的数据。为此,我需要一个开关(二进制)的整数值与对应于该值的电压输入之间的等式。在我的Excel工作簿中,将“整数值”放在电子表格的左侧。现在确定我的方程式。

下面是有关如何在Excel中确定直线方程式的快速教程。

1)选择一个不包含任何数据的单元格。如果选择了一个具有数据的单元格,Excel将尝试猜测要趋势的单元格。因为Excel很少能正确预测,所以这使设置趋势变得更加困难。

2)选择“插入”选项卡,然后选择“散点图”。

3)右键单击图表框,然后单击“选择数据。..”。这将弹出“选择数据源”窗口。选择“添加”按钮继续选择数据。

4)给它指定一个系列名称(可选)。通过单击向上箭头,然后选择电压数据,选择X轴的范围。通过单击向上箭头,然后选择整数数据(0-63),选择Y轴的范围。

5)右键单击数据点,然后选择“添加趋势线。..”。在“设置趋势线格式”窗口中,选择“多项式”按钮。观察趋势,我们发现2的阶数不太匹配。我选择了3阶,觉得这更准确。选中“在图表上显示方程式”复选框。现在,最终方程式显示在图表上。

6)完成。

确定。回到Arduino程序。现在我们有了方程式,对Arduino进行编程很容易。代表开关位置的整数以1行代码计算。通过使用“ bitread”功能,我们可以获取每个单独位的值,从而了解每个按钮的状态。 (请参阅照片)

第4步:TinkerCAD电路

Arduino

如果您尚未签出TinkerCAD电路,请立即执行。等待!!!!完成阅读我的Instructionable,然后将其签出。 TinkerCAD Circuits使测试Arduino电路非常容易。它包括几个电子对象和Arduino,甚至允许您对Arduino进行编程以进行测试。

要测试我的电路,我使用DIP开关组设置了6个开关并将它们与电阻器捆绑在一起。为了证明我的Excel电子表格中的电压值正确,我在Arduino的输入处显示了一个电压表。一切都按预期工作。

为证明Arduino编程工作正常,我使用Arduino的数字输出将开关的状态输出到LED。

然后我将每个开关切换为一切可能的组合,并为能说“ IT WORKS”而感到自豪!!

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

全部0条评论

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

×
20
完善资料,
赚取积分