5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 【化学博士学种田】一起来DIY可编程航灯(已经写完,所有制造文件已公布) [打印本页]

作者: 白小淘    时间: 2015-4-8 19:03
标题: 【化学博士学种田】一起来DIY可编程航灯(已经写完,所有制造文件已公布)
本帖最后由 白小淘 于 2015-5-6 21:50 编辑

20150416:本帖剩下的内容将转至隔 壁论坛电子区更新。
20150419:所有的文件已经公布了,在另外那个帖子的4楼,公开下载,只需要保证不改我的LOGO就行,其他的随便,至于程序,我已经放了一个闪烁的视频,和视频配套的代码在视频那楼的下面一楼,那个主要对格式进行说明,其他的模块大家一起写啦……

20150506:重大更新,8Mhz的bootloader已经搞定,现在NB了,整块版就剩下Mega8和扩流的三极管……没有任何外围元件了,现在测试能否长时间稳定工作……

总是看到有人做爆闪灯,但是闪久了不觉得无聊么??
我有这样一个想法:
1,做一个廉价的航灯硬件,个位数的RMB投入。
2,多路独 立控制输出,所有的一起闪就没意思了。
3,航灯支持的电压电流宽,想用多大的LED都可以。
4,可以遥控控制,切换多种不一样的闪法,或者开启/关闭LED。
5,把程序写成乐高积木一样的模块,想怎么闪自己拼装,并且开源,想增加新的闪烁模块可以自己写。
好了,就这些,我要开工了。
先说一下计划的硬件,想要把程序模块化,还要所有人都可以自己编程,几乎必须用arduino,因为arduino简单,但是……现在最便宜的arduino官方硬件好像就是pro mini了(貌似有非AVR主控的,但是功能弱爆),这货要最便宜的卖家都要10元左右,果断放弃,这么贵……放弃了就不能用arduino了吗?错!arduino的硬件还有非官方的,这其中,便宜而且功能强大的要数mega8做的了,所以我采用了mega8。
昨天试了一下,现在我搭的mega8已经可以和arduino的IDE通信了,程序的下载,运行都正常。
ATmega8,现在的无刷电调有很多都用了这个单片机,对于闪灯来说运算能力强到无法想象了。
说一下,昨天之前,我不会编程,不了解硬件,以前只是玩过一下下PCBlayout,改过几个电路板,但是……我相信我能做到我前面说的这些。











作者: 白小淘    时间: 2015-4-8 19:07
本帖最后由 白小淘 于 2015-4-9 19:09 编辑

硬件原理图完成,mega8的输入输出按理说串个4.7K的电阻好点,但是我前面两天的测试没用也未见异常,就这样了……
从左到右,P3是四个备用的输出,P1是信号输入,P4是ISP接口,P5是串口,P6是高压输入,目前我测试用的三级管9013支持25V,P2是LED输出
下面写的程序全部以这个原理图为硬件基础。
(, 下载次数: 144)


作者: wcj3445    时间: 2015-4-8 19:09
支持

作者: 情绪控    时间: 2015-4-8 19:57
支持,看看做出来的效果

作者: zhaolong01    时间: 2015-4-8 20:08
路过期待。

作者: 党员冲前面    时间: 2015-4-8 20:24
必须支持。。。期待样品

作者: saintxu    时间: 2015-4-8 21:01



支持折腾

作者: 有点骞    时间: 2015-4-8 21:04
前期验证可以用arduino板子嘛,省事,没必要用mega8造arduino,后期量产再说也不晚。

作者: tq043xu    时间: 2015-4-8 21:05
支持楼主。顶一个

作者: aweixinga    时间: 2015-4-8 21:45
支持开源

作者: tiantianxx    时间: 2015-4-8 22:17




支持折腾

作者: 抚州娃    时间: 2015-4-8 22:23
我模型,这个支持,可惜我只知道电路,不懂编程。。。。。。。。。。。。

作者: 游游龙    时间: 2015-4-8 22:29
比较好的想法……

作者: 白小淘    时间: 2015-4-8 23:00
本帖最后由 白小淘 于 2015-4-9 19:18 编辑

好的,现在把我测试读取PWM的程序发上来,做一下简单的讲解。

硬件电路:ATmega8,接16M晶振,晶振两边接22pF电容,其他不用管,直接刷arduino对应的bootloader,之后用USB转串口连接IDE
串口接在PD0(RX),PD1(TX)上面,四个LED接PD2,PD3,PD4,PD5(我用了三极管放大的,小LED可以不用),遥控信号接PB5。(由于软件还没弄好,口述了……,目前这些硬件5元左右,价格我很满意)

测试正常的状态:开关高时,5号脚的灯亮,其他不变,开关低时,5号脚的灯灭,其他不变。

程序如下:
void setup() //初始化程序
{
for(int i=2;i<6;i++)
pinMode(i,OUTPUT);   //使用for循环一次定义4个脚的模式,全部为输出
pinMode(13,INPUT);   //定义13号脚的模式为输入
}


void loop()  //主程序,这里面的会不断循环执行
{
  int a;   //定义一个整数a
  a = pulseIn(13,HIGH);    //读取13号脚的高电平,赋值给a
                           //PWM信号低位1000us,高位2000us,中位1500us
  if(a>1500)   //如果a大于1500,也就是输入信号为高时
  {
    digitalWrite(5,HIGH); //打开5号脚,此时5号脚的灯亮
  }
  else   //否则,也就是信号不符合if的定义(即小于1500)时
  {
    digitalWrite(5,LOW);  //关闭5号脚,此时5号脚的灯灭
  }
  for(int i=2;i<5;i++)
  {
    digitalWrite(i,HIGH);   //使用for和digitalWrite把其他的脚全部打开
  }
}

上面这一段比较有意义了,
闪灯基本是下面这种格式的:
digitalWrite(i,HIGH);//将i打开
delay(1000);        //延时1000ms
digitalWrite(i,LOW);//将i关闭



作者: 你若未嫁    时间: 2015-4-8 23:05


作者: 龙腾四海1113    时间: 2015-4-8 23:06
支持加学习

作者: 周世林    时间: 2015-4-8 23:09
高位实测2700

作者: 亡魂水风    时间: 2015-4-8 23:12
期待,楼主神人也

作者: walkmanlove    时间: 2015-4-8 23:34
白小淘 发表于 2015-4-8 23:00
好的,现在把我测试读取PWM的程序发上来,做一下简单的讲解。

硬件电路:ATmega8,接16M晶振,晶振两边 ...

闪灯代码其实不用写的.有现成的LED灯条的各种闪代码.复制过来就好了.


作者: 白小淘    时间: 2015-4-8 23:39
周世林 发表于 2015-4-8 23:09
高位实测2700

你的什么控?什么设备测的?
话说标准的PWM一个周期20ms,高电平在1-2ms之间,其余的全是低电平,通道低位时高电平1ms,高位时高电平2ms。你的不是这样子的?



作者: liubin200    时间: 2015-4-9 07:38
支持楼主。顶一个

作者: cadillacxlr    时间: 2015-4-9 10:41
楼主有没有呼吸效果?  有没有考虑怎样的闪灯模式更方便判断机身前后? 我也想自己做,到现在都还没开工。 LED 选择除了灯带, 不知道用食人鱼那种高亮的好不好, 一臂一颗的

作者: 白小淘    时间: 2015-4-9 12:46
cadillacxlr 发表于 2015-4-9 10:41
楼主有没有呼吸效果?  有没有考虑怎样的闪灯模式更方便判断机身前后? 我也想自己做,到现在都还没开工。  ...

这个可以有哦……



作者: 白色的熊    时间: 2015-4-9 13:00
arduino玩过,如果要控制大电流的灯,就得加三极管了吧!普通led满足不了一般人的。以后加上流水灯,呼吸灯,频闪灯等的控制吧。设计不同的延时即可

作者: 白小淘    时间: 2015-4-9 13:06
白色的熊 发表于 2015-4-9 13:00
arduino玩过,如果要控制大电流的灯,就得加三极管了吧!普通led满足不了一般人的。以后加上流水灯,呼吸灯 ...

atmega8的输出最大好像是5V40mA,这个测试可以用,小的LED也行,大的就必须加三极管了。



作者: 周世林    时间: 2015-4-9 14:43
白小淘 发表于 2015-4-8 23:39
你的什么控?什么设备测的?
话说标准的PWM一个周期20ms,高电平在1-2ms之间,其余的全是低电平,通道低 ...

可能昨天弄错了,或者混控了,今天又测了下,您是对的

串口助手一般数值显示
957 上
1501 空
2045 下


作者: cyk0123    时间: 2015-4-9 21:19
楼主我等初中学生党没技术没时间 能不能出个套件

作者: 白小淘    时间: 2015-4-9 21:20
cyk0123 发表于 2015-4-9 21:19
楼主我等初中学生党没技术没时间 能不能出个套件

不打算出套件……


作者: cyk0123    时间: 2015-4-9 21:28
白小淘 发表于 2015-4-9 21:20
不打算出套件……

那我怎么弄 珍真没时间

作者: sdxgy    时间: 2015-4-9 22:33


作者: 白小淘    时间: 2015-4-10 18:56
本帖最后由 白小淘 于 2015-4-10 19:24 编辑

现在来讲一下这个程序的结构吧……
程序有四大模块:
1,初始化模块:这个是固定不变的,负责指定引脚的状态等任务,它只会在上电时执行一次。
2,信号模块:负责读取来自接收机的信号并通知控制模块,通知方式是一个一位的数字(比如低位是1,中位是2等等)。
3,控制模块:接收来自信号模块的数字并控制启用那个闪烁模块,这个理论上可以无限长。
4,闪烁模块:这个输出信号,控制LED如何闪,理论上,可以有无限个这种模块。
信号模块会有三个:一个用于3段开关的(兼容2段),一个用于4段开关的,一个用于6段开关的,所有的模块都可以读取来自旋钮的信号并作出响应,所以如果是旋钮,三个模块想用那个就用那个。
控制模块一个:里面结构这样子case(0){ 闪烁模块 },0可以是任何数字,信号模块发过来哪个数字,控制模块就执行那个数字里的闪烁模块。
闪烁模块:这个负责LED的闪烁,结构是这样子:开启XX,延时多少多少,关闭XX,对就是这样子的……是不是很简单?这个我提供四种不一样的,更多的大家自己动手啦……
(, 下载次数: 3)




作者: 白小淘    时间: 2015-4-10 18:58
我顶贴貌似没反应,你们要帮我顶贴啊……

作者: 白小淘    时间: 2015-4-10 19:07
本帖最后由 白小淘 于 2015-4-10 19:27 编辑

程序楼
【】【】【】【】【以下是初始化模块】【】【】【】【】
  1. void setup()
  2. {
  3.   for(int i=2;i<6;i++)
  4.   {
  5.     pinMode(i,1);
  6.   }
  7.   pinMode(10,0);
  8. }
复制代码

【】【】【】【】【初始化模块结束】【】【】【】【】
【】【】【】【】【以下是用于三段开关和两段开关的信号模块】【】【】【】【】
  1.   int a=pulseIn(10,1);
  2.   int r=1;
  3.   if(a<1800)
  4.   {
  5.     if(a>1200)
  6.     {
  7.       r=2;
  8.     }
  9.     else
  10.     {
  11.       r=1;
  12.     }
  13.   }
  14.   else
  15.   {
  16.     r=3;
  17.   }
复制代码

【】【】【】【】【信号模块结束】【】【】【】【】
这个模块在三段开关时,低位输出1,中位输出2,高位输出3
用于2段开关时,低位输出1,高位输出3




作者: msnrooon    时间: 2015-4-10 19:10
小号码来顶贴

作者: 白小淘    时间: 2015-4-10 19:19
本帖最后由 白小淘 于 2015-4-10 19:40 编辑

程序楼:
以下是控制模块:

  1. switch(r)
  2.   {
  3.     case(1):
  4.     {
  5.        第一个闪烁模块
  6.       break;
  7.     }
  8.     case(2):
  9.     {
  10.        第二个闪烁模块
  11.        break;
  12.     }
  13.     可以不断的这样写很多模块,当然,信号模块有数字过来才会启用。
  14.   }
复制代码

以下是四段开关的信号模块,信号由低到高分别输出1.2.3.4。

  1. int a=pulseIn(10,1);
  2. int r=1;
  3. if(a<1500)
  4. {
  5.   if(a<1200){r=1}
  6.   else{r=2}
  7. }
  8. else
  9. {
  10.   if(a<1800){r=3}
  11.   else{r=4}
  12. }
复制代码




作者: kenhuyang    时间: 2015-4-10 22:52
白小淘 发表于 2015-4-8 23:00
好的,现在把我测试读取PWM的程序发上来,做一下简单的讲解。

硬件电路:ATmega8,接16M晶振,晶振两边 ...

http://bbs.5imx.com/bbs/forum.ph ... =1013486&extra=
看看我的帖子。

使用延时函数不太好。这样会占用时间,单片机在延时期间不干活。切换模式有延迟。楼主看看我的办法,效果超棒


作者: 白小淘    时间: 2015-4-10 23:16
kenhuyang 发表于 2015-4-10 22:52
http://bbs.5imx.com/bbs/forum.php?mod=viewthread&tid=1013486&extra=
看看我的帖子。

好的,我明天研究一下,今天在布线……PCB的尺寸打算做到2×3左右



作者: 漠漠    时间: 2015-4-10 23:48
不懂帮顶

作者: xw1364    时间: 2015-4-11 00:04
期待,楼主神人也

作者: 白小淘    时间: 2015-4-11 21:22
闪烁模块暂时停一下,因为40楼说延时不好……
PCB文件会在我的样品测试无误后公布,啥都不留,谁想做都可以,有技术,任性!

作者: 白小淘    时间: 2015-4-11 22:20
kenhuyang 发表于 2015-4-10 22:52
http://bbs.5imx.com/bbs/forum.php?mod=viewthread&tid=1013486&extra=
看看我的帖子。

你的好复杂,表示看不懂……


作者: 白小淘    时间: 2015-4-11 22:21
kenhuyang 发表于 2015-4-10 22:52
http://bbs.5imx.com/bbs/forum.php?mod=viewthread&tid=1013486&extra=
看看我的帖子。

好像看到了串口通信的代码?能不能简单的讲一下原理?


作者: ms48281920    时间: 2015-4-11 22:47
楼主高人啊,论坛里都是高手,期待!

作者: kenhuyang    时间: 2015-4-11 23:21
本帖最后由 kenhuyang 于 2015-4-11 23:24 编辑
白小淘 发表于 2015-4-11 21:22
闪烁模块暂时停一下,因为40楼说延时不好……
PCB文件会在我的样品测试无误后公布,啥都不留,谁想做都可 ...

我做了两个版本,第一版就是延时函数,这个写起来简单。但是我有的模式跑完一次要十多秒,这样切模式要等最长十多秒才可以换到下一模式,原因我说了,延时期间单片机不干活。视频里就是我的第一版,你可以明显看到延时。  后来开始改第二版,开始想用中断,这样就没延时,但是中断用到这里好像不行,不好弄中断条件。  后来这个问题一直困扰我很久,终于有一天,有灵感了。

    办法就是用的循环语句。我们知道,单片机执行一个语句是需要时间的,只不过很快我们觉察不到。延时函数实质就是让单片机执行空语句。这段时间它读不到外部信号的输入。我用for循环,在循环里让单片机不停读遥控器的信号输入,比如循环500次,由于执行语句需要时间,读完500次,其实要花几秒的时间,这就实现了延时函数。但是由于不停在读遥控信号,所以可以马上检测到控制信号,从而改变闪烁模式。你可以写入我的程序试一下,完全没延时。

   我的程序写的比较乱,解释一下:读取信号,在低信号时(脉冲小于1200),关闭灯。 检测到在中高信号之间切换一次时,(办法是检测脉冲大于1200且两次信号差值大于400),让一个变量i+1。这样高中之间切换一次时i+1.为了实现循环,进行取余运算。比如我是8种闪烁模式那么c=i%8.这样c变量就实现了从0到7循环,对应八种模式。再用case语句,每个case对应一种模式,你想要闪烁怎么写就是了。我写了八种,够用了。灯闪烁之间的延时就用for循环,你现在再看看我的程序,应该就懂了


  串口是模式改变的时候串口输出脉冲和当前的模式,方便我调试,写好了就没用了


作者: 白小淘    时间: 2015-4-11 23:57
kenhuyang 发表于 2015-4-11 23:21
我做了两个版本,第一版就是延时函数,这个写起来简单。但是我有的模式跑完一次要十多秒,这样切模式要等 ...

看懂了,for用了自加,加一次就重新执行一次for,for里面读取信号然后决定是否跳转,利用执行这个的时间起到了延时的作用……高!



作者: kenhuyang    时间: 2015-4-12 00:05
白小淘 发表于 2015-4-11 23:57
看懂了,for用了自加,加一次就重新执行一次for,for里面读取信号然后决定是否跳转,利用执行这个的时间 ...

是的。完全正确


作者: 白小淘    时间: 2015-4-13 18:50
顶起,刚刚去JLC下了PCB的单……

作者: 白小淘    时间: 2015-4-14 18:26
今晚研究呼吸灯哦……

作者: msnrooon    时间: 2015-4-14 18:30
回复后是否被顶起的规则至今不明,好逗……

作者: 白小淘    时间: 2015-4-14 18:52
呼吸灯必须用PWM控制,貌似mega8的arduino只能在9,10,11通道输出原生的PWM,卧槽……中奖了……我的硬件10被用作读取信号,11空置,只用了9控制灯……我的多路呼吸灯啊……

作者: zhaoyu3517    时间: 2015-4-14 22:46
1、Arduino里有个Timer库可以实现伪多线程。但是ATmega8不知道能不能使用。
2、点亮灯的延时函数可以试试换成定时器中断。利用millis()函数试试。
3、pwm输出看看用analog口模拟一下行不。

作者: 白小淘    时间: 2015-4-14 23:03
zhaoyu3517 发表于 2015-4-14 22:46
1、Arduino里有个Timer库可以实现伪多线程。但是ATmega8不知道能不能使用。
2、点亮灯的延时函数可以试试 ...

PWM输出用analog已经不行了,M8我现在用的这几个口都不支持,我刚刚用另外的方法做到了,我让他亮i毫秒,灭1000-i毫秒,然后用for循环让i一个循环加一点,呼吸的速度可以用加的那一点去控制。
我试试你说的1和2去……



作者: 白小淘    时间: 2015-4-14 23:09
白小淘 发表于 2015-4-14 23:03
PWM输出用analog已经不行了,M8我现在用的这几个口都不支持,我刚刚用另外的方法做到了,我让他亮i毫秒, ...

论坛现在管的严,基本连个讨论的人都不好找了……


作者: wangweiabm    时间: 2015-4-15 09:21
去年先用51单片机制作,加四条灯带总重50多克,感觉用在四轴上太重,又和朋友制作了几种用Arduino 单片机(4克)控制的LED流水跑马灯。四轴上的四条灯带,采用普通灯带修改的,单片机、灯带、线共计25克,采用八灯自由编码控制程序,和泡泡的近似,亮的现象:先是全灭,然后依次逐个点亮,依次逐个叠加,依次逐个递减,两边靠拢后分开,两边叠加后递减,最后全亮。循环。购买的CP2102 模块 USB下载器,新款 arduino pro mini 单片机。 (, 下载次数: 1) (, 下载次数: 1)



作者: qifeng    时间: 2015-4-17 09:50
用ULN2803吧,相当于8路NPN三极管,单路最大电流500mA。

作者: 白小淘    时间: 2015-4-19 14:21
全部制作完成了,PCB上的正负极再一次被我布反了,现在的板需要飞线才能用。无误的文件将在隔 壁发布,视频正在上传中……
说一下为什么版主恢复了我的楼我依然不太想在这里更新了:
如果想抓一个犯人进监狱,他会到处逃。如果想把监狱里的人放出来,他会很主动!
(, 下载次数: 5)


作者: runbing1314    时间: 2015-4-19 14:57
个位数成本?这个可以研究。

作者: 白小淘    时间: 2015-4-19 18:28
runbing1314 发表于 2015-4-19 14:57
个位数成本?这个可以研究。

这个东西我准备全部开源,程序已经发的差不多了,硬件今晚在隔 壁放出文件,谁想做都可以,我的目的就是做一个销量和知名度都可以与BB响PK的东东

现在的测试全部完成了,这是最后一个视频,目前我的打样价格都只有8块多,大批量做到5-6元不成问题,我觉得会有商家做的。
http://static.video.qq.com/TPout.swf?vid=a01523re1tx&auto=0



作者: runbing1314    时间: 2015-4-19 18:37
白小淘 发表于 2015-4-19 18:28
这个东西我准备全部开源,程序已经发的差不多了,硬件今晚在隔 壁放出文件,谁想做都可以,我的目的就是 ...

牛人啊!学习学习!

作者: 白小淘    时间: 2015-4-19 23:34
硬件全部更新完毕,这个模块的硬件我就不再更新和制造了,当然,如果有重大不良就再说,剩下5张PCB可以赠送,需要的吱一声,说明一下,现在我手里的PCB把三极管的正负极搞反了,所以呢……需要改改才能用,这个我在60楼说过了,其实也很简单,零件我不提供。

剩下的程序模块会在隔 壁更新,那边的功能多一点,比较好用。

作者: xiaowang2183    时间: 2015-5-5 09:42
白小淘 发表于 2015-4-19 23:34
硬件全部更新完毕,这个模块的硬件我就不再更新和制造了,当然,如果有重大不良就再说,剩下5张PCB可以赠送 ...

太小气了哒,不送我块


作者: 想FLY    时间: 2015-5-19 00:33


作者: honda-cvj-k    时间: 2015-6-19 14:52
达不到这种水平的diy,求成品,寄一两块给我,我微信红包致谢

作者: 白小淘    时间: 2015-6-21 10:51
honda-cvj-k 发表于 2015-6-19 14:52
达不到这种水平的diy,求成品,寄一两块给我,我微信红包致谢

圈圈4265I2554,我直接SF到付吧,这个目前多多少少还是有些缺陷的。


作者: hsp2008    时间: 2015-6-21 15:55
白小淘 发表于 2015-4-8 19:06
闪灯已经完成,目前做了四个控制通道,好简单的说,我之前是完全不会编程的……
争取今晚把遥控信号读取也 ...

电子专业的?


作者: 白小淘    时间: 2015-6-21 20:48
hsp2008 发表于 2015-6-21 15:55
电子专业的?

不是,编程是做这个的前一天自学的……PCB布线之类的是之前看MX3G那个做8通控和电调的帖子时自学的。
我是用到啥就折腾点啥。



作者: honda-cvj-k    时间: 2015-6-22 23:27
白小淘 发表于 2015-6-21 10:51
圈圈4265I2554,我直接SF到付吧,这个目前多多少少还是有些缺陷的。

圈圈?是qq么?号码搜不到人

作者: honda-cvj-k    时间: 2015-6-22 23:29
白小淘 发表于 2015-6-21 10:51
圈圈4265I2554,我直接SF到付吧,这个目前多多少少还是有些缺陷的。

微信也没有搜到!


作者: 白小淘    时间: 2015-6-23 12:37
honda-cvj-k 发表于 2015-6-22 23:29
微信也没有搜到!

是群的说……



作者: 老早了    时间: 2020-7-31 16:03
白小淘 发表于 2015-6-23 12:37
是群的说……

大佬QQ能不能发一下啊,有问题想请教





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com./) Powered by Discuz! X3.3