风火轮制作成功,发贴庆祝!
前些日子在咱们论坛看到了http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=705426&bbs_page_no=1&bbs_id=1000
SpokePOV - 在转动的自行车轮子上显示图案(国外用AVR的小制作)
于是元旦画好了图准备做一个。一直没时间,后来做了板子,本周末终于完成简版的制作了,先发个贴庆祝一下。下面是显示实拍:
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143162.jpg
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143163.jpg
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143164.jpg
-----此内容被qingwei_cui于2007-01-29,08:58:35编辑过 呵呵,很漂亮。
请问楼主的硬件是用原来 的那个吗? PCB板实拍:
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143165.jpg
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143166.jpg
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143167.jpg
-----此内容被qingwei_cui于2007-01-29,09:06:57编辑过 电路就是在原来发的贴上的那个,没变动。 取模工具,我把窗体进行抠图,自己对这个界面很满意,大家觉得怎么样,呵呵。
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143168.JPG
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143169.JPG
点击此处下载armok01143170.rar
-----此内容被qingwei_cui于2007-01-29,09:27:12编辑过 先占个位子,有时间将源码及文档整理一下,传上来,请大家指点! good! 哇,超酷!我也想做一个 :) 呵呵,很漂亮!
本本 是 T系列的? 电源也固定在轮子上吗? 本本是R50系列,农民机呀,自己买,只能这种了,呵呵。电池暂时是绑在轮子上的。
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143171.JPG 自行车轮子转速不同怎么解决 用霍尔传感器检测轮子转一周所用的时间。将此时间256等分,做为每个列(“沿半径射线”)的显示时间。
当前显示所用的的总时间是上次检测的时间,一般自行车转的过程中,加速度不是很大,相邻两次转一周的时间相差不大,除非让金刚来摇这个轮子,呵呵。 不错,软件用什么开发的,要是能作成显示GIF的就好了 软件是用Borland C++写的,增加jpg、gif支持应该比较简单的。 用C++Builder开发的,拾点算法是好友stzangle想出来的,界面是我设计的,一会让他把最初版的传上来,GIF可以做到,后期我将优化算法,加入此功能。谢谢大家支持! R50,呵呵,楼主的本本和我的一样的 好东西啊, 顶一个~! 漂亮!支持让阿莫开卖。 挺漂亮啊 不错的东东,过年研究下。 原理图,方便大家查看!
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143199.jpg
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143200.jpg
点击此处下载armok01143201.rar
-----此内容被qingwei_cui于2007-01-29,16:08:22编辑过 cool! 太棒了 好东西! 支持! 昨天回去,搞好动画显示的程序,拍的效果不好,用相机的视频拍不好,最后用摄相头拍的。
显示效果与源图如下:
点击此处下载armok01143237.rar
为什么gif格式图片传不上来呀? 不错 现在以读GIF 文件了吗? PowerLogic画的原理图还是比较清楚,赞一个! 我的也做好了,等等装到车子上show一个 http://cache.amobbs.com/bbs_upload782111/files_6/armok01143263.JPG
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143264.JPG 楼上的用的是老外用EAGLE画的那版PCB吧,你的二极管好炫啊
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143266.JPG
-----此内容被qingwei_cui于2007-01-30,14:45:12编辑过 稍微改了一下呵呵
给你发了邮件,有空聊聊。 好啊,回邮件了,这下找到志同道合的了,呵呵。加油,让你的也快点出影。 太帅啦,晚上骑出去比宝马还抢眼,哈哈 帅呆了。 这种原理还应用到了CPU风扇上!
http://cache.amobbs.com/bbs_upload782111/files_6/armok01143318.jpg
温度显示装置,是很多发烧玩家常用的配件之一。TT技于近期推出的一款兼具散热于视觉冲击的iFLASH MiNi风扇,不同于以往传统风扇的单调外型, iFlash Mini采用流线型的风罩造型设计,当风扇启动时,扇叶上LED能精巧的排列出“Thermaltake”字样与“实时温度显示”,在蓝色背光的衬托下,非常能吸引注众人的目光。当安装在CPU上时,iFlash Mini 风扇不仅仅是炫丽的装饰品,更能随时显示CPU附近的空气温度是否过高而需要再加强机箱内部的对流散热,兼具美观与实用价值。 关注了,确实有意思 可以做个透明、防水的塑料外壳把电路装起来。
cysoft 蓝色的 LED 实在在炫了,这样的自行车也太炫了! 我用清漆处理防水,外壳需要专门找学结构的人设计,而且会很厚,最重要的是开磨很贵的阿~~~~~ y有问题啊
好像没有计算相位 楼主能不能卖个成品给我啊 to:qaaabbb
不好意思,最近很,忙没怎么上网。邮件或QQ聊吧
e-mail:qingwei_cui@163.com QQ:39886157 太帅啦,晚上骑出去比宝马还抢眼,哈哈
--------------------
这是不可能的,自行车骑起来以后效果全没了,LED灯除了旋转还在平移!! 大家好,我是初学者,这些零件板子都叫什么名称,到哪里才可以买到?大概要多少钱?谢谢!! 好好玩啊,用51单片机能做吗?小弟对AVR还不熟 最近没什么动静了,这玩意好玩啊! 蛮喜欢的,问一个弱的问题: 需要多少个这样的PCBA? 这东西好,估计装到车上用不了两天.连线路板带MEGA8一起找不见. 佩服,学习了!真是太有才了! 恭喜恭喜啦 /******************************************************************************
* fhl.c - 编译环境AVRGCC
*
* Copyright 1998-2003 Routon Technology Co.,Ltd.
*
* DESCRIPTION: -
* 风火轮控制源码
* modification history
* --------------------
* 01a, 16.01.2007, cuiqingwei written
* --------------------
******************************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
//#include <avr/wdt.h>
//#include <avr/eeprom.h>
//#include <avr/pgmspace.h>
#include <util/delay.h>
/*----------------*
* 端口定义 *
*----------------*/
#define BOTTON_PIN PIND
#define bitBOTTON 2
#define HALL_PORT PORTD
#define HALL_PIN PIND
#define bitHALLOUT 3
#define bitHALLPWR 6
/*----------------*
* 74HC595引脚*
*----------------*/
#define SEL_SIDE PORTD // 锁存时钟--74HC595 12#
#define bitFRONT 4
#define bitBACK 5
#define SET_SER PORTB|= _BV(PB4) // 数据------74HC595 14#
#define CLR_SER PORTB&=~_BV(PB4)
#define SET_SCLK PORTB|= _BV(PB5) // 移位时钟--74HC595 11#
#define CLR_SCLK PORTB&=~_BV(PB5)
/*----------------*
* 宏定义 *
*----------------*/
#define EN_ANIMATE 1 // 支持动画
#define NUM_PIXELS 256 // 像素数256 (刚好一个字节)
#define NUM_LEDS 32 // 单面LED数据
#define HALL_DEBOUNCE 4 //
#define BUTTON_DEBOUNCE 100 // 100ms
#define STANDBY_TIMEOUT 5*((F_CPU/256)/0xff)// F_CPU晶振频率 约5S
#define POWEROFF_TIMEOUT 2*60*((F_CPU/256)/0xff)
/*----------------*
* EE地址定义*
*----------------*/
#ifndef EEWE
#define EEWE 1
#endif
#ifndef EEMWE
#define EEMWE 2
#endif
#define E2_ROTATION_OFFSET 0x00
#define E2_MIRROR 0x01 // 镜相
#define E2_ANIMATION 0x02 // 动画
/*----------------*
* 变量定义 *
*----------------*/
volatile unsigned inttLap; // 轮子转一圈所用时间存放变量
volatile unsigned char tHall; // 霍尔传感器检测时间
unsigned char mirror; // 镜相
unsigned char fleds, bleds; // 前、后面LED对应缓?
unsigned char tanim_dalay = 6; // 动画保持
volatile unsigned int tanim= 0; // 时间控制变量
volatile unsigned int anim_e2_offset= 0;
volatile unsigned int curr_e2_addr= 0; //
/*----------------*
* 图像数据 *
*----------------*/
unsigned char val[] EEMEM ={ // 存入E2 EEMEM 等同于 __attribute__((section(".eeprom")))
"string in eeprom"};
/*----------------*
* 函数声名 *
*----------------*/
void cpu_init (void);
void refresh_leds(void);
void ctrl595_out (unsigned char);
void set_led (unsigned char , unsigned char );
void inter_eeprom_write (unsigned char , unsigned char );
unsigned char inter_eeprom_read (unsigned char );
unsigned char spi_transfer (unsigned char );
/*----------------------------------------------*
* CPU初始化 *
*----------------------------------------------*/
void cpu_init(void)
{
/* 端口配置 */
PORTB = 0xC7;
DDRB= 0x38;
PORTC = 0x7F; //m103 output only
DDRC= 0x00;
PORTD = 0x8F;
DDRD= 0x72;
PORTD = (_BV(bitBOTTON) | _BV(bitHALLOUT) | _BV(bitHALLPWR))
& ~_BV(bitFRONT) & ~_BV(bitBACK);
/* 看门狗 */
MCUSR= 0; // MCUSR 中的WDRF清零
WDTCSR = _BV(WDE) | _BV(WDP2) | _BV(WDP1); // 使能 1 S
/* 外部中断0、1低电平触发,0:按键;1:传感器 */
EICRA= _BV(ISC11) & ~_BV(ISC10) & _BV(ISC01) &~_BV(ISC00);
/* 打开外部中断 */
EIMSK= _BV(INT1) | _BV(INT0);
/* 定时器0 */
TCCR0A = 0;
TCNT0= 0xff; // 100us
TCCR0B = _BV(CS02); // 256分频 clk/256
TIMSK0|= _BV(TOIE0); // 打开溢出中断
/* 定时器1 CTC模式 */
TCCR1A = 0;
TCCR1B = _BV(WGM12); // WGM: 4) CTC, TOP=OCRnA
tHall = 0;
tLap= 0;
}
/*----------------------------------------------*
* 外部中断0:按键检测(低电平) *
*----------------------------------------------*/
SIGNAL (INT0_vect)
{
unsigned int t=0;
while (!(BOTTON_PIN & _BV(bitBOTTON))) // 等待释放按键
{
t++;
_delay_ms(1);
}
if (t > BUTTON_DEBOUNCE)
{
if (t < 500UL)
{
/* 短按键,小于500ms 打开看门狗死循环造成复位,激活系统 */
WDTCSR = _BV(WDE); // 使能看门狗
while (1);
}
else // 长按键休眠待机
tLap = 0xffff;
}
}
/*----------------------------------------------*
* 外部中断1:霍尔传感器触发(低电平) *
*----------------------------------------------*/
SIGNAL (INT1_vect)
{
if (tHall > HALL_DEBOUNCE) // 软抗骚扰,防止误触发
{
#if EN_ANIMATE // 动画支持
if (tanim != tanim_dalay)
{
tanim++;
}
else
{
tanim = 0;
anim_e2_offset += 1024;
}
#endif
/* 我们知道最后一次霍尔传感器触发后的毫秒数,
以及每次扫描有256条射线状“像素” 以便分别在
每个像素间断期间取得必要的毫秒数,现在仅仅使
得定时器1处于那个比率,也就是T/C1中断时间是
T0的256之1,T0所选时钟256分频,则T/C1所选时
时钟不分频*/
TCNT1 = 0; // timer1计数值清0
if ((tLap < 0xff) && (tLap > 0x3)) // 时间在短太长都不处理
{
OCR1A = (tLap << 8) | TCNT0; // 输了比较寄存器赋值
TCNT0 = 0; // T0计数值清零
/* 取出源数据存放地址 */
curr_e2_addr = (inter_eeprom_read(E2_ROTATION_OFFSET) % NUM_PIXELS)* 4;
mirror = inter_eeprom_read(E2_MIRROR);
TCCR1B |= _BV(CS10); // 时钟无分频
TIMSK1 |= _BV(OCIE1A); // T/C1输出比较A产生中断
}
else
{
set_led(2, bitFRONT);
set_led(2, bitBACK);
TCCR1B &= ~_BV(CS10); // 无时钟源,停止T/C1
}
tLap = 0;
}
tHall = 0;
}
/*----------------------------------------------*
* T0 100u定时中断 *
*----------------------------------------------*/
SIGNAL (TIMER0_OVF_vect)
{
if (tHall != 0xff)
tHall++;
if (tLap != 0xffff)
tLap++;
}
/*----------------------------------------------*
* T/C1 CTC(比较匹配时清零定时器)模式 *
* ------------------------------------ *
* 数器数值TCNT0一直累加到TCNT0与OCR0A匹配,然后 *
* TCNT0 清零.产生此中断 *
*----------------------------------------------*/
SIGNAL (TIMER1_COMPA_vect)
{
unsigned int addr;
sei();
addr = curr_e2_addr; // 源数据地址
if (tLap < STANDBY_TIMEOUT) // 转一圈地时间小于5S才显示
{
addr %= (NUM_PIXELS * 4);
ctrl595_out(inter_eeprom_read(addr + anim_e2_offset));// 要显示数据送出
SEL_SIDE |= _BV(bitFRONT);
asm("nop"); asm("nop");
asm("nop"); asm("nop");
SEL_SIDE &=~_BV(bitFRONT);
if (mirror)
{
ctrl595_out(inter_eeprom_read(anim_e2_offset + (1024UL-addr)));
SEL_SIDE |= _BV(bitBACK);
asm("nop"); asm("nop");
asm("nop"); asm("nop");
SEL_SIDE &=~_BV(bitBACK);
}
else
{
SEL_SIDE |= _BV(bitBACK);
asm("nop"); asm("nop");
asm("nop"); asm("nop");
SEL_SIDE &= ~_BV(bitBACK);
}
/*
fleds = fleds = fleds = fleds = 0xFF;
fleds = ~(_BV(addr % 8));
clock_leds(bitFRONT);
addr++;
if (addr > 32)
addr = 0;
*/
/* 关中断,确保在同一时间其它中断打断写入此地址 */
cli();
if (addr == (curr_e2_addr%(NUM_PIXELS*4)))
{
curr_e2_addr = addr+4; // 地址指针移向下一数据区
}
//curr_e2_addr = addr;
sei();
}
else // 转一圈超过5S
{
cli();
TCCR1B &= ~0x7; // 关闭T/C1
sei();
set_led(2, bitFRONT); // turn off all but one LED;
set_led(2, bitBACK);
}
}
/*----------------------------------------------*
* 595输出控制 *
*----------------------------------------------*/
void ctrl595_out(unsigned char sel)
{
unsigned int i;
unsigned char *leds;
unsigned long dat;
if (sel == bitFRONT)
leds = fleds; // 前面
else
leds = bleds; // 后面
dat = ((long)leds<<24)|((long)leds<<16)|((long)leds<<8)|leds;
for (i=0;i<NUM_LEDS;i++)
{
CLR_SCLK; // 移位时钟置低
if (dat&1)
SET_SER; // 置高数据时钟
else
CLR_SER; // 接低数据时钟
dat>>=1;
SET_SCLK; // __↑ 移位时钟上升沿,数据进入移位寄存器
}
SEL_SIDE |= _BV(sel);
asm("nop"); asm("nop");
asm("nop"); asm("nop"); // __
SEL_SIDE &=~_BV(sel); // __↑ 锁存电平上升沿,数据输出到并行端口
}
/*----------------------------------------------*
* LEDS 控制 *
*----------------------------------------------*/
void set_led(unsigned char led, unsigned char side)
{
unsigned char *leds;
if (side == bitFRONT)
leds = fleds;
else
leds = bleds;
leds = leds = leds = leds = 0xff;
leds =~_BV(led%8);
ctrl595_out(side);
}
/*----------------------------------------------*
* LEDS 刷新 *
*----------------------------------------------*/
void refresh_leds(void)
{
unsigned char i;
for(i=0; i< NUM_LEDS; i++)
{
set_led(i, bitFRONT);
set_led(NUM_LEDS-i, bitBACK);
_delay_ms(50);
}
}
/*----------------------------------------------*
* 读内部eeprom *
*----------------------------------------------*/
unsigned char inter_eeprom_read(unsigned char addr)
{
loop_until_bit_is_clear(EECR, EEWE);// 等待写完成
EEAR = addr;
EECR |= _BV(EERE); // 开始读EEPROM
return EEDR; // 返回仅1个时钟周期
}
/*----------------------------------------------*
* 写内部eeprom *
*----------------------------------------------*/
void inter_eeprom_write(unsigned char addr, unsigned char data)
{
loop_until_bit_is_clear(EECR, EEWE);// 等待写完成
EEAR = addr;
EEDR = data;
cli(); // 关闭所有中断
EECR |= _BV(EEMWE); // 此操作必须在4个时钟周期内发生
EECR |= _BV(EEWE);
sei(); // 打开中断
}
int main (void)
{
cpu_init();
while(1)
{
asm("wdr");
if (tLap == 0xFFFF)
{
cli();
/* 关闭的有LED及霍尔传感器 */
set_led(0, bitFRONT);
set_led(0, bitBACK);
HALL_PORT &=~_BV(bitHALLPWR);
/* 关闭看门狗 */
WDTCSR |= _BV(WDCE) | _BV(WDE);
WDTCSR = 0;
/* 休眠待机 */
MCUCR |= _BV(SM1) | _BV(SM0) | _BV(SE);
sei();
asm("sleep");
}
}
}
/*----------------------------------END OF FILE-------------------------------*/ 以上为下位机代码,现在没时间搞这个了,一直在搞zigbee。如果有兄弟喜欢,可与我交流呀, 不错,感谢分享! 不错 有得玩还有谁需要 qingwei_cui 阿伟
的PCB板吗 有一定数量 qingwei_cui 阿伟会去做我先预定2块~ 好好玩 感热大家的热情支持,看来这东西得翻出来,再好好搞搞了。^_^ 原理图看不清。大家有清楚的原理图吗 太牛了!小崔有才啊! 不错!听好玩的。。。。。 【61楼】 zhzj2007 :原理图看不清。大家有清楚的原理图吗
????? 24楼有PADS格式的原理图呀,可以下载了看看。
【62楼】 qingwei_cui 阿伟 太牛了!小崔有才啊!
????? 是哪个用我的帐号发的,难道是我晚上梦流时,搞得。晕 问点多余的,也是咨询
现在的图片是车轮原地旋转的照片,如果车是行进中,光点还能组成现在的图样吗?那个图样是叫摆线吧,太久了,都忘了,呵呵
能否来一个行进中的照片,看看是什么样的
有什么好办法解决行进中的图形问题 【62楼】 qingwei_cui 阿伟 太牛了!小崔有才啊!
????? 是哪个用我的帐号发的,难道是我晚上梦流时,搞得。晕
哈哈~~ 还有这回事! 是啊,不知道前进时候效果怎么样啊。
不过,还是挺好的。顶一个。 顶一个 DXM,太有才了!顶顶! 不知道qingwei_cui 阿伟还做吗?我也想预定两块。 楼主 看到你风火轮的设计我真的很佩服 太牛了!顶顶! 刚才跟qingwei_cui 阿伟聊了一下,如果要的人多了,他会去做的,所以如果你需要,请在此留下. 厉害,向你学习 hetao7241 2块
兄弟们还有要的吗?如果有报个名!谢谢! 好东西啊 。 谢谢楼主 好玩的,顶顶! 哈哈 终于有戏了 还有我的2块呀 谢谢啦 怎么防水啊? 怎么你的原理图,PROTEL99不能打开啊,2004则什么都没有? 用PADS2004画的 hetao7241 2块
yeyu12342块
再有一块我就去作板,还有啊,你们俩能不能留下e-mail呀,好联系的。 想不到搂住还有这种创意!太优秀了,^_^ 一些兄弟可能没用过pads2004,我现在上传个PDF档的原理图,供大家查看。
点击此处打开armok01164902.pdf dwj@mailme.cn 谢谢~ 要一块(已邮件联系过了)
ccccliang@yahoo.com.cn 想要两片,装车!哈哈!goodfriend007_2001@163.com 还能不能做啊,算我2片! ainet2004@163.com
qq:15038689 我也想要阿2片 hanker510@163.com 我也要2片wqm8181@163.com 我也要两片lucheng77@163.com
qq:75275235 我正在统计,马上联系去做,谢谢大家支持。 好谢谢你啦~ hi,yeyu123:
请收邮件,我给你发邮件了。 我要两块,麻烦阿伟了...
emial: southjiang@163.com 我也要两片;麻烦你了.......
Email:wzhscj@sohu.com 我也要2片
email:ying_or_fei@hotmail.com 不错!太亮了! qingwei_cui 阿伟,请你速与我联系,QQ:116956842 TEL:13621589813 商讨合作.另,我要几片. email:116956842@qq.com 好玩~~~不错~~~ 好玩又好看 感谢大家的厚爱,你们的支持让我重燃激_情,我准备把PCB板再好好布一下,下一步准调试出成本,低价出售给大家,一起学习。等我的好消息。布板去了………… qingwei_cui 阿伟!给我也来一个哦!
板子大家一起做便宜!回来了自己焊接调试!
woshilongsan@163.com