找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10315|回复: 8
打印 上一主题 下一主题
收起左侧

趣味性电子作品“兄弟之心

  [复制链接]
跳转到指定楼层
楼主
ID:262 发表于 2014-10-21 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自高中的小同志的作品


兄弟,
情同手足,肝胆相照
手拉手,心连心,一起走       

从高二上学期开始,渐渐感受到班里一种团结,兄弟的情义正在汇聚,微妙而又美好。
       在下学期开始的通用技术作品制作中,这种情义越来越浓,小组们一起努力,做出了七件精致的作品。有海盗船、万宁大桥、古代战车、傻妞智能家居、风车、沙漠酒吧,还有温馨的台灯。还有接下来的电子套件的焊接制作等活动。
       渐渐展现出制作的兴趣和热情,
       基于这份珍贵情感,我制作了这么一个趣味性电子作品“兄弟之心”,以纪念这美好的三年。
       像往常一样,用法,原理,制作过程,程序源代码,总结,尾巴,一个也不少。

       用法:
           兄弟两人将兄弟之心悬挂于胸前,心正在缓慢跳动。
           当彼此在一起的时候,两颗心,相应相伴,一起同频率快速跳动。
       原理:
           通过红外通讯协议(非标准协议),两颗心互相握手通讯,协议达成即完成非己识别,改变LED闪动频率。

      
        制作过程:

        2014年5月1日
        绘制电路图

        单片机采用便捷的STC单片机,STC12LE5608AD。该单片机为3.3V单片机,我电池部分打算用纽扣电池,直接扣在电路板上,方便携带。更别说要挂一个电池盒了。我主打轻量级的设计方案。
        为了使表面更加简洁,电阻、三极管等,全部换成了贴片的封装,额外增加了四个测试点,VCC、GND、RXD、TXD,用来串口通信的,编程 ,调试离不开这个,同时,也设计为贴片的形式,就是一个焊盘,不穿孔,到时候编程的时候把线头焊上去就行。
        外接12M晶振,也采用贴片封装。LED用5mm白发红,各串联1.5K的电阻。至于红外LED,用一个3mm的,接收头用红外一体化接收头。本来是一起在网上买的,后来居然发现漏了接收头,无奈,在钦州的电子商场里一找,幸好,有!价格。。汗颜呐!五元一个!!
        两个NPN三极管控制红外LED、心形LED。虽然STC单片机的IO普遍具有强推挽输出功能,但是为了降低芯片负担,用两个小三极管也不是什么难事。


        检查设计规则无冲突后,进入PCB制作阶段。
        
        设定电路板尺寸,自动导入电子元件封装。。可惜,STC单片机这个封装没有,自己画了一个。一片混乱哈哈!!但不要讨厌这乱七八糟的连线,暂时无视它先把元件布局好。主要是先将LED摆出个心形。后面你不得不依靠这些飞线完成PCB的设计。




        人工布线完成。加上了版权作者信息。在你布局好元件后,在进行布线的时候,系统会屏蔽掉所有飞线,只保留且突出显示你正在布的这条,利用这些飞线一路指引你要连通哪个地方。这就是CAD和人工制图的区别之一了。自动完成由电路图到PCB的转换,只要你电路图没画错,PCB也肯定不会错,除非你违反规则。线宽20mil,电路密度不高的情况下,对于自制PCB,尽量宽线宽。
        因为我不需要丝印层,所以那些黄色的标识符可以无视了。
        这次PCB设计,相比以前,有两大特点:
        一、走线走曲线,一方面是好看,另一方面
边缘平滑,不仅干扰低,而且是在以后的使用中不会刮、碰到有锋利的角,增加线路稳定性。
        二、走线与焊盘的连接处通通进行“补泪滴”处理,是为了防止钻孔精确度造成的误差损失和让焊接更牢固。
        
        
        通过DRC检查后,将线路图用喷墨打印机打印到菲林胶片上,同时导出钻孔位图。又进入下一阶段啦!准备覆铜板进行PCB制作。
         

        打印出来的菲林胶片,打印质量调到最高,对比度最大。一定要黑,高端大气上档次的黑!如果有地方不够黑,用黑色油性笔修补。

        刷上UV自干型感光油墨,自然晾干三四个小时就可以进行下一步了。

        一定要确保油墨完全干了,不粘了,再将胶片放在板上。否则等下一曝光,紫外线灯的温度会让油墨和胶片粘在一起,等下你把油墨都给拔了就完了。对齐平行边线,然后用一块透明玻璃压住。





        用黑灯泡发出紫外线灯光照射电路板曝光。曝光时间6分钟,我每次都是用这个时间,感觉效果不错,没有过度曝光,也没有没曝光完全。自己的经验啦。跟你之前刷的油墨厚度有关,两者互相配合才行。
        然后丢进显影液显影。显影液浓度不能贪快而调高,否则会抑制油墨的脱落,这种抑制你怎么扫也扫不掉,但当你稍微加一点水进去后,你会发现,哗啦瞬间全部脱完了,连线路部分都不剩,光碌碌的……



       放进三氯化铁溶液腐蚀掉多余的铜。抱歉,我真的没有找到有什么环保点的试剂,网上流传有一种蓝色环保蚀刻剂,但效果不如三氯化铁来得好,而且需要持续震荡。



        


        噔噔噔!蚀刻、脱模完成。

        接下来,这个作品,我有个特别的地方,那就是自己做贴图,做外观。
        怎么做呢? 不可能有什么现成的符合我的主题的贴图吧。
        这种方法是我首次应用啊,直接用感光油墨来印刷图案。
        其实电路板印制图案一般用其他更加稳固的油墨,比如文字UV油墨等…但我没有买,直接用抗蚀刻的感光油墨来做了。
        电脑通过PS,画好之后,同样打印到菲林胶片上。黑色部分建议做得大一点,你等一下涂油墨的时候如果不小心涂得太广了,导致那部分没有被遮挡到,曝光之后,那部分油墨就没办法弄掉了,会很难看。除非你愿意一举丢进脱模剂里,然后重新来过。
        



        在电路板的正面,即没有铜的那一面涂上感光油墨,还是吸附得上的。

        同样,进行曝光,显影,马上得到了效果。为了更加牢固,显影之后,再放回紫外灯下重复曝光一次,时间十几分钟。同时,为了防止平时玩着玩着刮掉,我最后在上面粘了一层透明胶带,也算是贴膜了吧,哈哈!


        接
下来进行钻孔。
        由钻孔的位图生成CNC雕刻机的刀路图,生成G代码,导入CNC。
        电路板放平后,精度好的话,你只需要找一个定位点就够了。
        接下来,就是CNC的Show Time !~~~
        我泡杯茶,听音乐,看报纸去了哈哈哈!!





        

        钻孔完成。看!还是很准滴!


        接下来用万用表进行飞针检查,确认没有短路的地方,就可以焊接了。这个检查,要是在工厂里,试想一下,一块板被固定在墙上,然后成百上千的针如暴风骤雨般刺向电路板的每一个焊盘……啊啊啊啊啊!我仿佛听到了电路板的惨叫,那叫一个惨不忍睹呐!!
        
        首先焊接芯片,我用的是先破坏后修复的焊接方法。使劲堆锡,让每个引脚充分浸透焊锡,然后蘸松香,焊锡轻轻松松就可以被烙铁头带走。前提是你的烙铁要有很强的吸焊能力,这种能力源自于第一次使用时的锡化和后期的保养,还有熟练的操作技能,否则你要不就用一些铜线辅助带锡,要不就不要玩这招了……

        我还没堆满锡就拍了的照片,大家不要以为这样就可以了。
        然后,吸走焊锡后,引脚与焊盘紧密相连,同时又不会与相邻引脚粘连。注意用放大镜仔细查看是否真的有粘连。
        其实,放大镜对我来说真的好难看,看得我眼都晕了。那是九十年代那些老电工师傅用的装备了,现在我们21世纪来点高科技的,用什么呢?
        嘻嘻!!!手机!现在的智能手机,好的摄像头,其微距拍摄能力不是盖的,拍得比放大镜还清晰。同时,还有闪光灯功能,让闪光灯在背后照射,不管多小的锡球,总能产生一个违和的点,你不可能看不到。

        焊接程序调试线,从此,这根线一直跟随着装置的成长……直到那一天的到来。
        还有一个LED灯,红外发射灯,接收头。
        电源开关部分真是失策,焊接的时候一不小心发现没有这种推拉式的开关了,可是线路封装、钻孔已经定型,
钦州没有这种开关卖,我只好临时改一下,用一些自锁开关代替了。




        分别对两块电路板写入程序,用数字示波表辅助调试红外通讯的协议。测量下降沿的实际时间与理论值的误差,等。帮助更快地解决通讯问题。
       这里单片机是没有片上调试功能的,调试程序没有那么方便。当然你可以借助一些信号,比如那盏红色LED灯,本来是要做显示的,你可以在程序中判断执行到哪里了,哪里有没有被执行,执行了就顺便插一句代码让它点亮。或者往PC机送回一些数据。这样你就知道程序的问题所在了。当然什么单步调试之类的在这里真算是是奢侈品,别想啦,因地制宜,随机应变了。



        这就是两个装置之间互相发送的信号的数据段的波形,有经验的朋友应该可以读出是0x42吧。对
我来说,42是初中生活里一个充满意义的数字,高中里则是14 。但为什么这里不用14而用42?随便随便了,通讯协议的东西,你可以自己定义。真想找个理由的话,那便是:人总是在现在怀念过去。



        红外数据收发测试成功!最远达到2.4米。由于双方遵守红外编码协议,载波了的信号,具有很强的抗干扰性能。同时,达到这个距离也是载波的功劳,38KHz脉冲波给LED带来的峰值电流很大,可以瞬间发射出很亮的红外灯光,使之传播更远。
        当然这距离还可以更远。像电视机、空调遥控器那些,不来个三四米以上你是没法用的。



        至此,这四根调试线的使命也就到了尽头,标志着芯片程序调试完成,从电路板上脱离。唯一留下的,就是芯片里的程序和即将带给大家的欢乐,还有那四个孤零零的焊点。










        最后,把所有元器件焊接完毕。作品做成了!兄弟之心。

程序源代码:
讨厌的QQ空间,一发上来,那些原有的代码缩进没了。


        /*  2014年5月11日00:05:20
          单片机型号: STC12LE5608AD
          程序编写:杨宇庆
  晶振:12M
        */

#include "STC.h"
#include <intrins.h>
sbit LED=P3^5;
sbit IRS=P3^7;
sbit IRR=P3^2;//also P1^3
//P01、P02被固定为GND。为方便电路板布线。


bit F_SendWave=0;//是否亮起红外LED灯,若不亮起,发射过程相当于等待N个脉冲
unsigned int WaveTimes=0;//脉冲计数
unsigned int IRtime[16]={0};//数据段里每次脉冲相隔的时间
bit IRrecvOK=0;
void Timer0Init(void);
void Send_low(void);
void Send_high(void);
void Send_data_0(void);
void Send_data_1(void);
void SendDat(unsigned char dat);
void Recive();

void Delay50ms()//@12.000MHz
{
unsigned char i, j, k;

_nop_();
_nop_();
i = 3;
j = 72;
k = 161;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}

void Delay500ms()//@12.000MHz
{
unsigned char i, j, k;

_nop_();
_nop_();
i = 23;
j = 205;
k = 120;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UartInit(void)//9600bps@12.000MHz
{
PCON &= 0x7F;//波特率不倍速
SCON = 0x50;//8位数据,可变波特率
AUXR |= 0x40;//定时器1时钟为Fosc,即1T
AUXR &= 0xFE;//串口1选择定时器1为波特率发生器
TMOD &= 0x0F;//清除定时器1模式位
TMOD |= 0x20;//设定定时器1为8位自动重装方式
TL1 = 0xD9;//设定定时初值
TH1 = 0xD9;//设定定时器重装值
ET1 = 0;//禁止定时器1中断
TR1 = 1;//启动定时器1
ES=1;
EA=1;
}
void UartSendChar(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Timer0Init(void)//13微秒@12.000MHz
{
AUXR |= 0x80;//定时器时钟1T模式
TMOD &= 0xF0;//设置定时器模式
TMOD |= 0x01;//设置定时器模式
TL0 = 0x64;//设置定时初值
TH0 = 0xFF;//设置定时初值
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时

ET0=1;
EA=1;
}

void tm0_isr() interrupt 1
{
if (F_SendWave)//中断两次,完成高低的跳变才算发射了一个脉冲,所以定时器周期是13us,这样才是26us的脉冲即38KHz
{
IRS=!IRS;
}
else
IRS=0;

WaveTimes++;

TL0 = 0x64;//设置定时初值
TH0 = 0xFF;//设置定时初值
}
void Send_high(void)
{
WaveTimes=0;
F_SendWave=1;
while(WaveTimes<40);
}//电平跳变一次算为一个脉冲
void Send_low(void)
//发送宽度0.52ms的低电平延时,40个脉冲。脉冲宽度0.52ms
{
WaveTimes=0;
F_SendWave=0;
while(WaveTimes<40);
}
void Send_data_1(void)//发送编码1
{//120
Send_low();//40
Send_low();//40
Send_high();
}
void Send_data_0(void)    //发送编码0
{
Send_low();//40
Send_high();
}
void SendDat(unsigned char dat)
{
unsigned char i=0;
unsigned char Sdat1=~dat;
TL0 = 0x64;//设置定时初值
TH0 = 0xFF;//设置定时初值
Send_high();
Send_high();
Send_high();
Send_high();
Send_high();
Send_high();

Send_low();//40
Send_high();//引导的终止信号,下降沿到来开始计时
//240个脉冲3.12ms+80个脉冲,非标准9ms

for (i=0;i<8;i++)//发送数据码
{
if (dat&0x01==0x01)
Send_data_1();
else
Send_data_0();
dat>>=1;
}
        //地址码、地址反码、数据反码部分不发送。

Send_low();
Send_low();
Send_low();
Send_low();
Send_low();
Send_low();
        //结尾
}


void Recive()
{
F_SendWave=0;
TL0 = 0x64;//设置定时初值
TH0 = 0xFF;//设置定时初值
IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;   //使能外部中断

}
void Ex0_isr(void) interrupt 0
{
static unsigned char i=0;
        //红外一体接收头保持高电平。接收到38KHz的红外光时,会拉下低电平,直到500ms左右超时或者红外光消失。

if (WaveTimes>240)//理论值260
{
i=0;
WaveTimes=0;
//LED=!LED;
//LED=1;
//SBUF=WaveTimes;
}
else
{
IRtime[ i]=WaveTimes;
WaveTimes=0;
i++;
if (i==8)
{
IRrecvOK=1;
EX0=0;
i=0;
}
}
}
unsigned char IRproc()
{
unsigned char i=0;
unsigned char dat1=0;

if (IRrecvOK)
{
//LED=!LED;
for (i=0;i<8;i++)//接收数据码
{
dat1>>=1;
if (IRtime[ i]>100 && IRtime[ i]<150)//理论值80~120
{
dat1|=0x80;
//LED=!LED;
}
}
IRrecvOK=0;
}
return dat1;
/*数据反码验证,由于不发送,所以此处验证取消。
//if (((dat1&0xFF00)>>8)==(~(dat1&0x00FF)))
if (dat1&0x00FF == ~0x42)
return 0x42;
else
return 0;
*/
}
void LEDfast()
{
unsigned char i=0;
for (i=0;i<10;i++)
{
LED=!LED;
Delay50ms();
}
}
void LEDslow()
{
unsigned char i=0;
LED=!LED;
Delay500ms();
}
void main()
{
unsigned int r1=0;
Timer0Init();
//UartInit();
//SBUF=0x88;
//LED=0;

while(1)
{

SendDat(0x42);
Delay50ms();//此处延时50ms,
//发射出去的光的能量已经耗尽得差不多了,然后再开始接收,不会接收到自己发出的信号
                //同时,此处的延时会导致传输距离缩短。
                //如若没有延时,需要两块电路板烧写不同的程序,即发射不同的信号,互相识别对方的。
Recive();
Delay50ms();

if(IRproc()==0x42)
{
LEDfast();
//SBUF=0xF5;
}
else
{
LEDslow();
}
}
}


        总结:
              在本次制作中,流程还可以优化一下。应该先钻孔,后做图案。因为钻孔时的震动很容易把图案给抹掉。
              在调试程序的时候,对于这种数字电路的信号,逻辑分析仪比示波器来得更直接,更方便。而且价格也很便宜,还能解析各种总线。示波器主要用来检测模拟电路中的波形,有没有毛刺,是否平缓等。
              
之所以不采用标准红外通讯协议,是因为采用它会容易对周围具有红外遥控功能的电器设备产生干扰。我在这协议的基础上进行了部分修改。另外,基于虚拟语气,这颗心能利用这种红外线,心灵感应地控制身边的电器那是再好不过的了。
              刚才也说了,传输距离还可以更长。但是,追求再高超的技术 ,也得要考虑实际需要啊。本作品的实际功能是要表达兄弟之间见面的激动之情和心中永不消退的默契。距离要适中,如果老远就能感应到兄弟的存在,你会不会为找不到对方,而担心发愁呢?心知就在身边却仍无法遇见。
              红外通讯技术在以前,可是蓬勃发展的一项技术,不亚于现在的NFC 。其成本极低,不需要实线连接,但传输速率较慢,丢包率不理想。这项技术渐渐被人们遗弃,由原来的双工到现在只用在遥控器上的“你发我收”——单发单收。其实,一项技术有一半是不应该因为其缺点而放弃,人们还应该更多地尊重它的优点,在未来合适的地方说不定它还能派上用场。
              比如,这项技术在现在可以用在智能家居里,主机对各个开关,传感器的控制上。墙壁开关等都是在很长一段时间里不会移动的物体,使用红外通讯技术比使用WiFi无线网络所带来的电磁辐射小很多,很多。维修成本也很低。过多的依赖WiFi网络会使得信号变得拥挤。
         

        尾巴:
            一个城市的落后,给人们带来的不便真是不小。昂贵的价钱,甚至连货都没有,越来越发展的科技技术和停滞不前的物质供给的矛盾,不得不迫使人们产生了网购的想法,也因此促进了电子商务和物流业的繁荣。但若是要想被网购,这基础还是要打牢呀!



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:68699 发表于 2014-11-12 11:17 | 只看该作者
很多观点赞同,设计的真不错,赞一个!
回复

使用道具 举报

板凳
ID:79149 发表于 2015-5-15 21:55 | 只看该作者
赞  厉害啊   膜拜呀
回复

使用道具 举报

地板
ID:69240 发表于 2015-5-24 09:01 | 只看该作者
很强大,工具齐全,好评
回复

使用道具 举报

5#
ID:241152 发表于 2017-10-25 21:36 | 只看该作者
谢谢分享
回复

使用道具 举报

6#
ID:383585 发表于 2019-1-14 22:29 | 只看该作者
哇!好漂亮!
回复

使用道具 举报

7#
ID:362076 发表于 2019-1-15 11:00 | 只看该作者
那四根下载线,说的那么伤感...不过楼主的贴片焊的真不错
回复

使用道具 举报

8#
ID:471573 发表于 2019-1-23 17:23 | 只看该作者
这个做的很强大!
回复

使用道具 举报

9#
ID:833307 发表于 2022-7-29 09:02 | 只看该作者
跨越了时空,看见了直男一枚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表