电子说
步骤1:解释代码。..。..
我试着尽可能地注释代码。我发现在学习Arduino和C ++编程(这里是前Fortran人)时,需要花费大量的自学时间,并且跟随别人的代码并不总是那么明显(至少对于初学者而言)。所以转到链接并将LINE#引用到我所描述的关键事项中,如下所示:
LINES 2-3 - 这些带来支持库代码以使您的时钟模块到工作并定义您正在使用的时钟模块。
#include
DS3231 rtc(SDA,SCL);
左侧《- p》
线路6 - 27:为了保持代码笔直,我在看N1,N2,N3和N4时从左到右分配了每根管子。然后我必须将4根控制线(ABCD)分组,将每根管子的芯片驱动到这些相应的管子上。
#define N1C 28//C 《《《--- N1是小时数十位Nixie Tube,所以每管重复这4行!#define N1B 26//B
#define N1D 24//D
#define N1A 22//A 《《《-----这是将引脚22的输出分配给线路的线路最左边的Nixie Tube芯片。它插入输出引脚22并焊接到芯片的“A”引线上。通过真值表,“A”引线是最低有效数字,D引线是最高有效数字。所以我打赌你想知道为什么引脚分配不按字母顺序排列到ABCD 。..。..这是因为芯片从上到下ADBC有它们,我希望焊接时焊丝没有交叉扭曲。让它们保持平直更容易(我想)。但任何一致性的技巧都必须防止接线错误。您可以随时更改程序以匹配,但故障排除是时间丢失的地方。
LINE 49 - 字节dig1,dig2,dig3,dig4;每个管必须显示给定的数字,无论它是时间还是温度的数字,无论如何。..。..程序取数字并使用一个字节来保存在程序中稍后从寄存器中剥离的数字,但是它被定义这里。
LINE 53 - 60这是DHT22的固定代码,来自互联网上几个来源的示例。找到很多地方。注意我为其他型号的传感器(DHT11)剪切了代码,因为我想要一个精益程序。
LINES 64-77只是设置BME传感器和Servo for Library支持的代码。第77行将伺服控制分配给该引脚61.
LINES 79 - 104这将为4个N1 - N4数码管中的每一个分配4条BINARY控制线ABCD的所有引脚作为输出。注意我试图在评论中显示“A”输出是2 ** 0(最小信号位),“B”是2 ** 1,“C”是2 ** 2,最后和“ D“是2 ** 2或最重要的位。那么这是什么意思?查看附加照片中芯片的Truth表。如果我想在数码管上点亮数字“6”,我需要在ABCD线上发送二进制位模式以打开芯片的引脚6。或者A关闭,B打开,C打开,D关闭。如果它们打开,芯片只查看ABCD线并将它们相加以打开相应的输出。 2 ** 1 = 2,2 ** 2 = 4,所以0 + 2 + 4 + 0 = 6.现在,如果我将芯片引脚6的导线焊接到#6导线管的端子引脚上激活,它将从阳极170VDC完成电路并点亮。
LINES 106-113定义按钮面板输入的Mega引脚。
LINES 122-128设置RTC模块的初始时间和日期。在第一次扫描时,它将使用您在此代码行上实际拥有的值加载模块。一旦Arduino运行您的总代码,您将使用按钮面板更改时间。
LINES 129 - 234 BME280标准设置代码。只需使用这些参数和代码行,这里没有问题。我希望我有更多的时间来真正了解BMP280是否可以通过最后几行校准,但我真的没有得到这个代码的良好参考。我的BMP对实际温度不准确,不得不通过从程序中稍后测量的数字中减去一个整数来强制进行校准。看看你是否能找到它!
LINES 237 - 240 - 设置DHT传感器。这里不用担心。
LINES 246-253声明如果按下按钮,则将变量名称“butXstate”设置为HIGH状态。
LINES 262 - 300和392-409 - 如果nixies显示不正确,这对于解决项目问题至关重要。这些行使用串口让你知道什么是内存寄存器的温度,时间等数据。..这就是你看到的地方。然后从那里进行调试,以便在管上进行调试。串口不在这些寄存器中,有时我想知道我的SDA/SCL通讯速度是否缓慢。问题。不 - 接线错误!
LINES 302 -304 - 这会调出DISPLAYWHAT()。查看是否有某个参数的请求(按钮被按下)。然后它进入DriveTubes(),根据“DisplayWhat()”下的内容,实际将ABCD控制模式写入4个管中的每一个。
LINES 307 - 390是滚动的顺序时钟的功能,用于显示时间,温度,时间,压力,时间,湿度,时间周期。它使用“freq = t.sec”查看已经过的秒的总值,并显示“分钟”的任何象限“它是在.IF语句说明如果在这个时间范围内经过几秒钟并且没有按下按钮,那么从寄存器中获取数字,然后根据该数字驱动管子。同时点亮绿色LED让人知道数字代表什么。
LINES 412 - 424这些只是让传感器的湿度从寄存器刷新到使用。
LINES 427 - 454 DisplayWhat(这只是检查是否按下按钮,如果是,按哪一个。然后去做该按钮所要求的。如果按下按钮0,1,2或3然后转到更改时间,因为此人想要更改时钟时间。如果按钮4然后去获得温度并显示它,按钮5 - 去获得压力并显示它,按钮6去获取湿度并显示它。如果按钮7,则按顺序冲洗所有管子,以防止管子阴极中毒。
LINES 456 - 473 DisplayTime()从RTC获取小时和分钟的时间并从军队中取出时间为12小时基本时间(第462-3行)。然后无论是几分钟还是几小时,它都会除去第一个数字除以10,然后通过取得该部分的剩余部分来获取第二个数字。如果小时小于“10”,要关闭第一个Nixie管,我将芯片驱动到全值16,这样所有ABCD都会打开,真值表会关闭芯片的所有输出,所以没有数字会亮。这是以这种方式去除数字的唯一值。
LINES 474 - 512 ChangeTime()如果按下前4个按钮中的任何一个按钮,则调出。 newhour等的变量名称通过每次按下按钮(对于分钟相同)递增或递减,然后在行510上将新值写入RTC存储器并且时钟采用新的时间设置。
LINES 513 - 594 DisplayTemp()或DisplayPress()或DisplayHumid()都以相同的方式运行。天气变量定义为浮点数,然后从传感器读取。然后将该数字分解为4位数,并逐个单独剥离,因为数字除以10然后减去以得到下一个数字。将其乘以10,并将数字转换为要驱动到该管的数字,并对剩余的管重复。示例:Temp = 71.25然后temp变为7.125,dig1 = 7. Temp仍然是7.125 - 7 = 0.125然后* 10 = 1.25现在设置为Dig2,依此类推。
LINES 598 - 822 RunPoission ()驱动四个数码管以每秒0.1秒的持续时间滚动数字0到9。我们在它们各自的引脚上写入相应控制线的低电平或高电平,以获得正确的BINARY模式,以打开芯片上的右侧输出,以点亮管内正确的电线。
//3 - 例如在Nixie管N1上显示数字3 。..。..
digitalWrite(N1D,LOW);//D1这是2 ** 3,所以我们不需要8,所以“写”引脚N1D关闭或低电平。
digitalWrite(N1C,LOW);//C1这是2 ** 2,所以我们不需要4,所以“写”引脚N1D关闭或低电平。
digitalWrite(N1B,HIGH);//B1这是2 ** 1,所以我们需要一个2来“写”引脚N1D或HIGH。
digitalWrite(N1A,HIGH);//A1这是2 ** 0,所以我们需要一个1来“写”引脚N1D或高电平。
2 + 1是3,芯片将输出3驱动为ON,因此将170VDC传递到管内的电线。
延迟(10);延迟0.010秒并继续扫描并显示“4”然后显示“5”等。
LINES 828 - 1119 DriveTubes()的工作类似于RunPoission(),检查Dig1,Dig2的值是否有效,Dig3和Dig 4等于,然后如果该条件为真,则它会通过并将控制线图案驱动到相应的写入模式。
步骤2:清理案例
我知道Syncroscope并不大足以容纳项目所需的所有电源,而不是Arduino Mega,芯片和布线。所以我建造了一个丙烯酸盒子,给它一个爆炸式的外观。
我摧毁了范围内部,为时钟的其余部分让路。我知道这会很紧张。我只保存了大气指示的面板和指示器。装配丙烯酸外壳有点棘手,没有全面的玻璃斜坡。有点走了很长的路。这肯定需要练习,我使用画家的胶带来防止胶水接触我不想破坏的区域。建议:学习如何用抛光轮或丙烷罐火焰对边缘进行打磨和抛光。这两种方法都很有效,但需要耐心和实践。
我试图最小化这种情况下的访问面板,并发现我组装完整的工作结构非常困难。我试图保持原始仪表的内部支撑,将它们全部保持在一起,至少可以证明这是非常具有挑战性的。请注意,只有一侧可以进入透明盒子,我不得不使用长铰接式尖嘴钳将远端杆固定到位并拧紧这些螺母。整个组件作为夹钳式设计拉在一起。换句话说。..。..做一些不太复杂的事情,这将更容易一起,麻烦也更容易。麻烦拍摄它真是太糟糕了,我将它全部拆开并重新安装在废料板上的所有组件以使一切工作,然后在最后的情况下重新组装时钟。我做了两次!!!
第3步:设置面板
由于我只有一次切割铝面板,所以我非常小心地先用图形方式将其打好并仔细测量。测量两次切割一次。我甚至将面部复印作为切割有机玻璃面板的指导,以确保它是正确的。然后我在钻床上抛光/抛光边缘。
第4步:构建电路。..。..
我在时钟中有三个变压器,我放入了后壳圆形部分:
1。 120 VAC至5 VDC为Arduino和传感器供电。
2。 120 VAC至12 VDC为高压转换器供电。
3。一个12 VDC到200 VDC的变压器 - 为Nixie管供电。
A切换器为它们供电,我使用两个120 VAC氖灯,表示120 VAC已打开。
I然后按照所示的接线图,必须多次测试每个焊接连接,以确保良好的连接。请仔细按照Arduino输出到4芯片驱动器的接线。确保IO编号与所有4个芯片的芯片的ABCD一致。然后确保SOCKETS的芯片始终连线,以便将芯片输出与正确的数字相匹配以进行显示。请注意,IN12引脚编号不是点亮数字的数字。很容易忘记这一点,所以检查并再次检查。
步骤5:焊接电路。..。..
焊接芯片需要铅笔尖铁,大量使用焊剂和技术,以确保没有两个引脚短路。我使用电路板保持一切整洁,并使用Arduino引脚插件。剥离这些细导线是非常保守的,因为热量会导致大部分绝缘层拉回或收缩。将ABCD导线分成四组焊接到引脚上,然后将4个联接的引脚插入到母模块中,焊接到芯片上。
为了将引脚固定到位,我将引脚的两侧热熔化女性的侧面。如果您需要返工,可以使用Xacto刀移除热熔胶。慢慢来。但胶水将所有东西固定在一起,避免了连接松动。
我保持良好的电线颜色方案,以保持直线。..。
黄色 - 数字为170 VDC
p》
红色-5 vdc
黑色 - 接地
白色/黑色120 VAC
紫色12 VDC
Orange Browns等。.. Servo,Nixie等的具体线索
步骤6:设置时钟
按钮板。..(参见接线图)。这些按钮用于设置上/下的小时和分钟,并根据需要调用温度,湿度和大气压力。最后一个按钮运行一个防中毒程序来清洗管子。
当按下按钮时,务必使用8K欧姆电阻器(6K - 10K工作正常)将输入拉到地面。这可以防止麻烦的杂散电压导通输入。关于这些面板的其他地方的一些例子不使用这种方法,并且它们通过编程来缩短它,但它不可靠。只是以正确的方式做到这一点。请参阅接线图,并按照正确的方案进行无故障工作按钮。
我通过焊接在黄铜销底部的小黄铜垫圈上将按钮延伸穿过外壳,黄铜针脚从杆架上切割和打磨。如果倒置,杆不会掉出来。这也使得通过侧壁的按钮没有大的切口,外观整洁,外观干净。
步骤7:装配
装配将取决于您的时钟设计和外壳。这些照片显示了一些装配阶段,坦率地说有些不能很好地完成,然后我重新进行了构建。如果你仔细观察这里的图片和完成的项目,你会看到我做的很多改变。最值得注意的是,nixie插座在安装到电路板上时一直焊接到芯片驱动器引脚。然后ABCD控制线是从芯片到引脚进入Arduino的引脚。
我使用了大量的遮蔽胶带来防止丙烯酸刮伤。大量的线束可以训练电线而不会在各自的焊点处脱落,并且大量的热熔胶使电线绝缘,然后将它们剥离。
步骤8:最终组装和故障排除
我在建立时钟,编写程序和解决问题之间交替进行。我基本上构建了一小段代码来使一件事工作,然后为另一个功能添加代码。如果某些东西不起作用那么。..。..我知道这是添加的新功能,它会扰乱扫描或者流程结构不好。
我的右边有一个数字没有显示全部数字正确,我不知道这是代码还是错误的接线工作/交叉短路,或坏的数码管。所以我换了管。..。..所有的管子都以同样的方式运转,所以它不是管子。然后我找到了布线,发现两根电线交叉连接到插座(数字将我从要显示的数字中剔除)。这只发生过一次,但我仍然没有走出困境。我几乎在那里,但得到疯狂的数字,并最终发现我有一个错字推动数字“2”。 AAAARGH!发现这是一个大海捞针,一旦发现它当然是完美的意义。这是让这一位数发挥作用的日子。
全部0条评论
快来发表一下你的评论吧 !