查看: 34747|回复: 36

NO7 自行车POV制作 (基本完结)

[复制链接]

该用户从未签到

发表于 2013-8-26 19:08 | 显示全部楼层 |阅读模式
POV原理:
  Persistence of vision是光对视网膜所产生的视觉,在光停止作用后,仍保留一段时间的现象,其具体应用是电影的拍摄和放映。原因是由视神经的反应速度造成的,其时值约是十六分之一秒,对于不同频率的光有不同的暂留时间。是动画、电影等视觉媒体形成和传播的根据。而装在自行车上,很多人将它称之为风火轮。就像小时候的偶像哪吒脚上踩的轮子。
制作步骤:
1、查找资料
  视觉1:发现装在自行车上的POV国内商店有卖,但很少能自编程,显示自己想要显示的东西基本没可能。也基本都是安装在自行车上,单纯的显示一个圆圈,只知道跑起来后轮子会发光,炫彩的环形灯光。
QQ图片20130826184926.jpg (摘至淘宝)
  视觉2:近来makefaire、kickstarter中出现的monkey light 256级全彩效果。绚丽的效果令人向往。可以显示JPG、GIF、PNG、AVI、MOV等格式图片或者3D效果。
QQ图片20130826183809.jpg QQ图片20130826183718.jpg (摘至kickstarter)
  视觉3:过程中看到另外的低成本的POV,便宜的让人有点伤人,另一方面又肯定了中国制造的力量,无法阻挡。因为我觉得自己做出来肯定不止这个成本,伤心之余买了个回来玩玩。
   11.jpg 222.jpg
拆开研究了下:一个16脚的打磨过的主芯片,产生信号,7个LED,三极管。光敏二极管,震动开关。光敏猜测是用来检测白天黑夜,白天的时候不需要点亮,因为效果不佳。震动开关,检测在静止时不点亮LED。纽扣电池··回来玩了下就爆开了一颗。
效果有点···那个就没有图了。有个喜欢的地方就是外壳的设计,防水,还可以直接安装在自行车气嘴上,真是好创意啊。
2、设计
别的始终是别的,自己做的才是自己的。所以我开始了,首先给自己定个位,256级全彩需要单片机刷新频率够高,硬件复杂度相对高,编程最好还要有单独的软件,不然会泪流满面。这样不适合我。而下面这不能自编程的就更没有兴趣了,所以我敲定了利用自己熟悉的ATmega328,arduino编程玩玩简单的,主要实现硬件上。
制作方案:
主要芯片:Atmega328、74HC595
LED:高亮发光二极管16只
位置检测:霍尔传感器3144
红外遥控:38K红外一体化接收头
简单阐释方案,利用驱动2片74HC595芯片级联驱动16个高亮LED显示动态单色图形。
PCB设计:
原理图:
33.jpg
华丽丽的布局画线结束后,效果图出来了····, QQ图片20130827204913.jpg
正面主芯片,稳压芯片(考虑散热),电源接口(为连接电池供电输入)。串口接,ICSP接口(下载程序)。LED开始考虑贴片高亮LED,后来用了高亮直插LED(正因为手上有这种,就节约了)将插针的两脚剪短,掰弯,焊在板子上。当然固定孔少不了。 QQ图片20130826191343.jpg       来张背面,背面还添了两人在骑自行车的效果。大家觉得不丑吧·~·
!.jpg

漫长的等待后,PCB加工好,回来焊接测试
22.jpg

小手不抖,一次性QFP封装轻松焊上···
21.jpg
继续选择供电,供电我选择的可充电锂电池,一块3.7V、1400mah,两者串联起来,总电压7.4V。引出供电接口与充电接口。一支给POV板供电,一支用来充电。
11.jpg 22.jpg
通过固定孔将旋转POV用捆扎带绑在自行车钢丝上。
将磁铁固定在自行车轴上。用于检测一圈的速度。
33.jpg
程序:

kittenblock中小学创客名师推荐的图形化编程软件


#include <util/delay.h>
int latchPin = 10;
int clockPin = 13;
int dataPin = 11;  
int intPin=2;
/*********全局变量定义**********/
unsigned long int S=0;
unsigned int DelayN=80,                //延时临时计数
DelayTime=80;        //每次延时的周期个数
int flag;

byte a[]={
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  
  0x30,0x03,0x3F,0xFF,0x3F,0xFF,0x30,0x00,0x00,0x00,0x3F,0xC3,0x3F,0xC3,0x30,0xC3,
0x30,0xFF,0x30,0xFF,0x00,0x00,0x30,0xC3,0x30,0xC3,0x30,0xC3,0x3F,0xFF,0x3F,0xFF,
 //1 ,2,3
   0x01,0xFF,0x01,0xFF,0x01,0x80,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x00,0x00,0x00,0x00,
0x19,0xFE,0x19,0xFE,0x19,0x86,0x19,0x86,0x1F,0x86,0x1F,0x86,0x00,0x00,0x00,0x00,
 //4,5
0x7F,0xFE,0x7F,0xFE,0x63,0x06,0x63,0x06,0x7F,0x1E,0x7F,0x1E,0x00,0x00,0x00,0x06,
0x00,0x06,0x00,0x06,0x00,0x06,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
 //6,7
 0x3F,0xFF,0x3F,0xFF,0x30,0xC3,0x30,0xC3,0x30,0xC3,0x3F,0xFF,0x3F,0xFF,0x00,0x00,
0x30,0xFF,0x30,0xFF,0x30,0xC3,0x30,0xC3,0x30,0xC3,0x3F,0xFF,0x3F,0xFF,0x00,0x00,
//8,9
        };
 byte a1[]={
  0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
0x01,0xF0,0x03,0xFC,0x07,0xFE,0x0F,0xFF,0x1F,0xFF,0x3F,0xFE,0x7F,0xFE,0xFF,0xFC,
0xFF,0xFC,0x7F,0xFE,0x3F,0xFE,0x1F,0xFF,0x0F,0xFF,0x07,0xFE,0x03,0xFC,0x01,0xF0,
 }   ;    

void timer1_init()
{
        cli(); //禁止所有中断
        TCCR1A=0X00;
        TCCR1B=0X04;  //256分频
        TCNT1H = 0x80;
        TCNT1L = 0x80;  //定时器赋初值
        TIMSK1 |= 0x01;//中断允许
        TIFR1=0X00;  //置位溢出标志
        sei();//开全局中断
}
void delayw(unsigned char n)
{
        for(;n>0;n--){
                DelayN=DelayTime;
                while (DelayN);
                 {_delay_ms(4);}
        }
}
void displayP()
{
    for (flag= 0; flag <192;) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin,MSBFIRST,0xff-a1[flag++]);   
    shiftOut(dataPin, clockPin,MSBFIRST,0xff-a1[flag++]);
    digitalWrite(latchPin, 1);
    delayw(1);
    if(digitalRead(2)==0)
     flag=0;
 } 
}
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(intPin,INPUT_PULLUP);
 // attachInterrupt(0, blink, LOW); //外部中断使能
  timer1_init();
}

void loop() {
    if(digitalRead(2)==0){  //触发显示
    DelayTime=S/160;
    S=0;
    displayP();
    }
}


 ISR (TIMER1_OVF_vect)   //T0溢出中断服务程序
 {
   S++;    //计数
   if (DelayN!=0)
    DelayN--;
 }


更好显示没有时间和精力写了,大家见谅请别扔砖,POV板手上还有一个多余的,有兴趣愿意自己调程序的人可以联系我,可以免费送出。
视频就上个以前第一次拍的视频···视频地址:









打赏作者鼓励一下!

1人打赏

该用户从未签到

发表于 2017-1-17 13:06 | 显示全部楼层
本帖最后由 Levi_Arduino 于 2017-1-17 13:38 编辑

      这个monkey lights 我在09年刚毕业的时候也仿着老外的做过,用的RGB的全彩LED,采用MEGA168+MBI5026驱动 32个RGB LED,这个小片子,是专业的LED驱动,SPI接口,显示效果很不错,只是做了DEMO之后,电池的固定一直没有找到很好的解决方案,还有图案数据的产生需要上位机程序的支持,自己在这方面又是外行,那就只搞了个基本的版本,有兴趣的朋友,可以联系我,我这里还有做剩下的j几块板子,可以自己DIY,或者进行升级,但不能用于商业用途。

IMG_5267.JPG
IMG_5268.JPG
IMG_5269.JPG
IMG_5270.JPG
IMG_5271.JPG
IMG_5272.JPG

该用户从未签到

发表于 2013-8-26 22:47 | 显示全部楼层
见过顺丰送的广告风扇,里面用的柔性的导线,我也不知道怎么说led也是很小的一个,可以装在很小的风扇叶上

还有就是,为啥不弄成全彩的led。。。。这样不是更好么?

该用户从未签到

发表于 2013-8-26 22:48 | 显示全部楼层
考虑到供电可以用锂电池?或者轮子上直接装个线圈自己会发电?

自己又脑洞大了、、

该用户从未签到

 楼主| 发表于 2013-8-26 22:50 | 显示全部楼层
killnew 发表于 2013-8-26 22:48
考虑到供电可以用锂电池?或者轮子上直接装个线圈自己会发电?

自己又脑洞大了、、 ...

请看后面介绍~~~
打赏作者鼓励一下!

该用户从未签到

发表于 2013-8-27 00:38 | 显示全部楼层
8彩就成 摇摇棒这个东西低端的很无趣(lz的这个思路很好,要是led再密一些加几个彩色的边就更好看了)。。相比而言这东西成本很低 效果很炫  高考完了我要做个金箍棒 (打算采用不到1000个贴片led 。。装在透明树脂浇灌的棒子里 ..)

该用户从未签到

 楼主| 发表于 2013-8-27 17:34 | 显示全部楼层
zhaokbk 发表于 2013-8-27 00:38
8彩就成 摇摇棒这个东西低端的很无趣(lz的这个思路很好,要是led再密一些加几个彩色的边就更好看了)。。相 ...

多谢回复,也感谢你的建议,我采用的是高亮LED,一颗会占用不少的空间,如果LED过密而LED不多,安装在轮子上显示的效果就不会那么好~~
打赏作者鼓励一下!
  • TA的每日心情
    擦汗
    2016-8-7 07:53
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2013-9-11 00:12 | 显示全部楼层
    非常的不错哦,赞一下!

    该用户从未签到

    发表于 2013-9-12 11:23 | 显示全部楼层

    非常的不错哦,赞一下!
  • TA的每日心情
    慵懒
    2015-5-10 17:04
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2013-9-12 14:05 | 显示全部楼层
    要是全彩的  供电也得改  还要中功率三极管扩流  还要改程序  挺麻烦的
  • TA的每日心情
    慵懒
    2015-5-10 17:04
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2013-9-12 14:07 | 显示全部楼层
    你这里用自适应算法了吗  貌似延时有点少
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(四) 认识一下ESP8266WiFi库
    博哥零基础教你玩转ESP826
    帖子导航: 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    博哥零基础教你玩转ESP8266(一) 重识ESP8266
    博哥零基础教你玩转ESP826
    https://blog.csdn.net/wubo_fly 帖子导航: 博哥零基础教你玩转ESP8266(一) 重识
    无线遥控四个灯泡
    无线遥控四个灯泡
    我有一个遥控器,一个接收板,还有四个灯泡,不知道如何连接在一起,然后控制灯亮
    AS608指纹模块在MEGA2560上的发出滋滋滋的声音
    AS608指纹模块在MEGA2560
    各位大佬求助!近日萌新在做一个门禁系统的毕设,老师要求买个指纹模块,我就去淘宝买
    求助~~!完全不懂的小白只想做一个简单的东西,大神请进。
    求助~~!完全不懂的小白只
    事情是这样,我想做一个通过人体红外感应模块控制电机的装置,这个电机只有一个,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表