您的位置: 主页>机器人编程>ROBOLAB编程>【Arduino】生日创意
加盟酷吧机器人 培养孩子核心能力

【Arduino】生日创意

本文不是教学文章,本人也正在学习中,目前状态半桶水

这几天,友人Fan²就要生日了,时间比较赶,一时间不知道送什么好,正好最近正在学习Arduino,就想着利用这个来做点生日创意为她庆生

简单来说,Arduino就是一个开源的平台,包括硬件和软件,很多东西你都可以自己DIY出来

我用的硬件是Arduino UNO,软件是Arduino IDE。想法是配合着生日歌,显示她的生日日期。嗯,听起来很简单,那我们就开始吧

【Arduino】生日创意

Arduino UNO

【Arduino】生日创意

Arduino IDE

零件

接下来就一个一个较为详细的研究了,不过也只讲和今天项目有关的内容,其他就算是基础也不讲,不然内容就太多了

首先就是这个最最最主角的Arduino UNO板子。其中USB插头是通过USB和电脑进行数据交换;而图中的数据交换区域是Arduino板子和所连接的硬件进行数据交换,有很多个端口(2~13);虽然USB插口可以通过电脑给板子供电,但是总是要随身带着电脑未免有点不方便,所以就有了电源插口,可以通过电池对板子供电;最后的电源区域是板子对硬件进行供电

【Arduino】生日创意

Arduino UNO示意图

个人困惑???

按道理,电源端口和USB端口对板子进行供电的效果应该是一样的,但是不知道为什么本人实际操作的时候总是会出问题

然后就是面包板,这个是方便人们进行电路测试的一种零件。它的内部电路构造很简单,中间部分是横向连接(中间沟处不连通,如绿线);上下两边的线是纵向连通(如蓝线和红线,这个地方一般被用作零线和火线)

【Arduino】生日创意

面包板

【Arduino】生日创意

面包板示意图(来自百度)

蜂鸣器,就是它发声的地方,等会用它来播生日歌。Arduino编程有自己的音调预设[1]

【Arduino】生日创意

蜂鸣器

高压升压模板(NCH8200HV),能将板子输出的电压升到170V,供辉光管使用[2]

【Arduino】生日创意

NCH8200HV

K155ID1,一种集成电路,驱动辉光管用。可以单纯通过控制4个端口来达到控制10个端口的目的

【Arduino】生日创意

K155ID1

TIPS

购买这些集成电路芯片的时候,请看清型号。我就有买错过的尴尬经历。请注意型号的最后一位是N还是D。N指的是DIP(Dual In-line Package,双列直插式封装),D指的是SOP(Small Out-Line Package,贴片封装)

【Arduino】生日创意

这个两个都是74CH595,但大的是DIP,小的是SOP,当初就这个买错了

辉光管,在LED被发明前,被用来显示信息。密封的玻璃管里围了网状的金属阳极,还有被包在里面的数字状的阴极,管中充满了低压气体或蒸汽。当阳极金属网和某一个阴极之间被加上了适当的高压,该阴极周围气体就会发出橙黄色光芒,辉光管就是通过这种方式来显示数字的

我使用的是来自前苏联的IN-14(ИН-14)侧显辉光管[3],现已停产。它除了包含"0~9"的数字之外,左右两边还有小数点。更重要的是,里面充的是水银蒸气,相对来说不那么容易老化,同时发光的时候,橙光周围还有淡淡的蓝色光辉。而且它采用“非蒸散型消气剂”(顶部小圆片),阴极不易中毒,寿命也就更长了。下图右边的两个圈是管子的底座。管子的引脚比较乱,因为是拆机的。拆机的没法保证质量,毕竟已经这么久了,所以可能会有坏管的情况

【Arduino】生日创意

辉光管IN-14(ИН-14)

【Arduino】生日创意

ИН-14示意图

连接电路

打开Fritzing设计电路图进行设计

【Arduino】生日创意

Fritzing

TIPS

学会变通。我现在的电路是经过好几次修改的了,如果出现了问题,就不要一意孤行地死磕,想办法解决。另外,我原本打算一边播歌一边放数字,但得引入SCoop.h才能多线程(一次性只能进行一项任务)。不过在我测试的时候,发现数字停止变动后再放音乐,效果也很赞,就修改了电路图,并把这个方案保留下来了

我原本打算用移位寄存器74HC595的,就不需要占用那么多的端口,可惜这两天都没有研究懂。另外,由于我手上很多零件这个软件没有,所以后期PS加上去了。图上紫色线指的就是辉光管的很多引脚要接K155ID1的很多引脚,画面太复杂了就这么简化了

【Arduino】生日创意

随便瞎画的电路图

另外连接电路的时候,还要知道以下内容:

NCH8200HV有四个引脚,A是DC INPUT,连接Arduino板子的5V电源;B是170V的DC OUTPUT,连接辉光管的阳极;剩下两个都是GND(电线接地端),通过零线连接到Arduino的GND就行。可以参考下面的接法(D,,,D我好懒得去接啊)

【Arduino】生日创意

NCH8200HV接法参考

另外,K155ID1的引脚示意图如下

【Arduino】生日创意

K155ID1引脚示意图

集成电路芯片DIP一般都有一个U型凹槽来帮忙确认方向。上图中芯片内部的是引脚的序号,周围的是引脚的作用。VCC(Volt Current Condenser)是电路的供电电压,GND是接地端,这两个分别接火线和零线,注意K155ID1的启动电压是4.75V,最大能承受的电压是5.25V,一般供5V电压就行

K155ID1引脚的ABCD是输入端,数字是输出端,通过对输入端不同高低电流的组合供电,可以实现2^4共16种输出,但是我们只要其中的10种输出到输出端就行。比如ABCD全部输入低电流,那0就输出。它的真值表如下(注意,这里的ABCD是倒着过来写的)

【Arduino】生日创意

K155ID1的真值表

这样一来,我们就要把K155ID1的ABCD连接到Arduino板子的数据交换区域(2~13),而输出端连接辉光管其中除了小数点之外(因为一般用不到)的10个阴极处

辉光管的话,从底部看,中间有一个小箭头,指的就是阳极的那个引脚,顺时针看下去,接下来就是左小数点,然后1~9,再是0,最后一个右小数点就又绕回阳极了

【Arduino】生日创意

IN-14引脚示意图

Warning

连接辉光管必须连一个20K欧的电阻防止辉光管烧坏,而且记得,这些电阻都得连在支路上而不是干路上,也就是说每一个灯管都要连一个电阻。我之前懒,连在干路上,结果一个没有亮另一个忽闪忽闪地几个阴极一起亮了。做二极管实验的时候也要每一个二极管连一个电阻

然后就可以开始瞎眼的实际接线了,真实眼花

Warning

断路后才触碰电路,尤其这里面有170V的高压,注意用电安全

安装和拔出集成电路芯片的时候要小心,以免弄坏引脚

首先拿出公对母杜邦线(是的,也有母对母,公对公)把辉光管的引脚都安排上

【Arduino】生日创意

公对母杜邦线

【Arduino】生日创意

安排上了,但是引脚多余的长度舍不得剪QAQ

【Arduino】生日创意

头秃眼花又欢乐的连线环节

【Arduino】生日创意

【Arduino】生日创意

【Arduino】生日创意

TIPS

连完线,请务必再检查一下,保证不出错,不要烧了任何东西

编程

接下来就是紧张而刺激且枯燥还耗神的编程环节,让我们一起打开Arduino IDE,一起做秃头预备护理吧

一般了解一个语言,我都是先了解它的注释是怎么写的。注释指的是,程序不读取执行,单纯是写在程序里,给后面的程序员看的

在Arduino IDE里注释符是这么写的(蓝色部分)

//注释

/*

注释

*/

Warning

程序的每一句结尾都必须记得加上英语的分号" ; ",否则程序会报错

OK,没问题,开始编程吧

//根据K155ID1真值表定义一个10*4的矩阵//int 是有返回值的定义//{}里是一个整体intnumbers[10][4] = {//D,C,B,A{0,0,0,0}, //0{0,0,0,1}, //1{0,0,1,0},//2{0,0,1,1}, //3{0,1,0,0}, //4{0,1,0,1}, //5{0,1,1,0},//6{0,1,1,1}, //7{1,0,0,0}, //8{1,0,0,1} //9};//定义每个辉光管A引脚和蜂鸣器阳极所连的端口,方便未来更改端口的时候,可以随时更改//定义位置参考上面最后连完的图int bulb1 = 2;int bulb2 = 6;inttrumpet = 10;//void是不返回值的定义//setup部分只运行一次void setup() {//for是循环语句//格式是for (int x = 某个初始值; 在符合此处条件的情况下,for会一直循环; x++是每一次循环,x=x+1,x--则是x=x-1)for(int i=bulb1; i<(bulb1+4); i++){//定义i端口为输出//pinMode是定义端口的函数//格式是pinMode(端口号,INPUT/OUTPUT);注意大小写pinMode(i, OUTPUT);}//上面是定义第一个辉光管所连接的端口,下面是第二个for(int i=bulb2; i<(bulb2+4); i++){pinMode(i,OUTPUT);}//定义蜂鸣器阳极所连接的端口为输出端口pinMode(trumpet, OUTPUT);}//setup部分结束//loop部分会一直循环//loop部分开始void loop() {//让两个辉光管随意显示0-9任意数字十次for (int p=0; p<10;p++){//num是我们自己定义的函数,它的定义脚本在后面//random就是随机抽取后面括号范围内的整数//后面括号取下限不取上限,即0-9num(random(0,10),random(0,10));//每次循环延迟0.2秒//delay的单位是毫秒//一定要delay,否则一次循环太快了delay(200);}//辉光管显示" 8 8 "这个数字,这个是友人的生日日期num(8,8);//延迟1秒,即让" 8 8"显示1秒delay(1000);//让辉光管从" 00 " 显示到" 19 ",暗示友人的成长过程for (intp=0; p<2; p++){for(int r=0; r<10;r++){num(p,r);delay(100);}}//最终数字停在" 20 ",这是友人今年的生日num(2,0);delay(200);//停0.2秒开始播放生日歌,停一小会是为了能让人反应过来,这是辉光管显示"20"的时候才开始播放的song(trumpet);//等待3s,进入下一个循环delay(3000);}//loop部分结束//定义刚刚说的,我们自己定义的函数num,这是让两个辉光管显示数字的函数void num(int x, int y){for(intj=bulb1; j<(bulb1+4);j++){//digitalWrite是对端口进行输出,这些端口必须先被定义为输出端口//格式是digitalWrite(端口号,要输出的数据);digitalWrite(j, numbers[x][bulb1+3-j]);}for(int k=bulb2; k<(bulb2+4); k++){digitalWrite(k,numbers[y][bulb2+3-k]);}}//函数num定义结束//对刚刚song函数的定义//生日快乐歌void song(ints){//tone是让蜂鸣器发声的函数//格式为tone(端口号, 要发生音调的编号,具体定义请看附录[1]);tone(s,784);//G5delay(240);//注意,很多东西都是如果你没有去改变它的话,它就会一直保持上一个状态//比如这里的tone,并不是说你让它发声发240毫秒之后它就会停下来了。相反,它会一直响这个音调,直到你修改了这个端口的值,或者切断了电源。所以我们需要noTone的存在//digitalWrite也是如此,所以最后一个数字会在播放音乐的时候一直显示//noTone是让蜂鸣器停止发声的的函数//格式为noTone(端口号);noTone(s);delay(10);tone(s,784);//G5delay(250);tone(s,880);//A5delay(500);tone(s,784);//G5delay(500);//tone(s,1047);//C6delay(500);tone(s,988);//B5delay(1000);//tone(s,784);//G5delay(240);noTone(s);delay(10);tone(s,784);//G5delay(250);tone(s,880);//A5delay(500);tone(s,784);//G5delay(500);//tone(s,1175);//D6delay(500);tone(s,1047);//C6delay(1000);//tone(s,784);//G5delay(240);noTone(s);delay(10);tone(s,784);//G5delay(250);tone(s,1568);//G6delay(500);tone(s,1319);//E6delay(500);//tone(s,1047);//C6delay(500);tone(s,988);//B5delay(500);tone(s,880);//A5delay(500);//tone(s,1397);//F6delay(240);noTone(s);delay(10);tone(s,1397);//F6delay(250);tone(s,1319);//E6delay(500);tone(s,1047);//C6delay(500);//tone(s,1175);//D6delay(500);tone(s,1047);//C6delay(1000);//noTone(s);}//song函数定义结束

测试

编程完后,点击左上角的" √ ",编译一下,看看程序有没有出错

【Arduino】生日创意

编译

将端口设定好

【Arduino】生日创意

设定端口

然后按左上角的" → "就可以上传到Arduino UNO进行测试了

【Arduino】生日创意

上传

最后测试一下,没问题就算完成了。再次提醒用电安全,高压警告

【Arduino】生日创意

测试

原本打算完成后装饰一下,但是本直男实在是没有这个动手能力就放弃了。而且黑天暗地,也看不清装饰了啥,不是吗(懒癌的借口

生日祝福

To Fan²,

不知不觉又是一年,时间真的是太快了。希望你新的一岁能有更多见识;能各种事情随自己心愿;实验再难虽然偶尔磕磕碰碰但是最后还是能够顺利完成。

老实说,上次你们两人的变化真的惊到我了,各种见闻学识让我耳目一新,醍醐灌顶,是真的佩服你们!

最后,不管时间如何流逝,我们高中这些小伙伴永远是最好的朋友,一定!保持联系!!!

生日快乐!

郡邑

2019/8/8

【Arduino】生日创意

偷懒,拿张去年的贺图,小丑花没有源文件实在是很难改(再次懒癌),哈哈哈

附录

[1]Arduino蜂鸣器预设网址

http://arduino.cc/en/Tutorial/Tone

[2]高压升压模板(NCH8200HV)

【Arduino】生日创意

以下图片来自YanZeyuan's DIY Studio

【Arduino】生日创意

【Arduino】生日创意

【Arduino】生日创意

[3]有关于辉光管的部分内容可以参考

http://www.nixieworld.com/2019/06/19/in14/

https://tubehobby.com/datasheets/in14.pdf

【Arduino】生日创意

【Arduino】生日创意

后记,小编朋友研发了一个游戏化的少儿编程在线课程(5-12岁),游戏化教学结合scratch(一款在线少儿编程工具,类似乐高的积木拼搭),我家娃娃学了几次课,非常喜欢(超预期),16次课才200多块钱,对锻炼孩子的思维能力和动手动力很有帮助。

欧美思机器人教育加盟 赚钱好项目
上一篇:聚焦 | 密院八月最上头活动遇上七夕?夏季设计
下一篇:为什么美国STEM专业,挤破头也要进?
您可能喜欢
回到顶部