
火箭发射灯光模拟模块
简介
本项目是基于AI8051U单片机核心板火箭发射模拟灯光,用于模拟火箭发射时的声光效果,这个模块是整体项目的子项目。
简介:本项目是基于AI8051U单片机核心板火箭发射模拟灯光,用于模拟火箭发射时的声光效果,这个模块是整体项目的子项目。开源协议
:GPL 3.0
描述
项目简介
本项目是基于AI8051U单片机核心板火箭发射模拟灯光模块,用于模拟火箭发射时的声光效果。这个模块是整体项目的子项目。
项目功能
本项目是基于AI8051U单片机核心板火箭发射模拟灯光,用于模拟火箭发射时的声光效果。
原理解析及线路连接关系
本项目LED驱动电源部分、LED部分、AI8051U单片机核心板(成品)、灯光效果控制电路、10位数码管和语音模块CH9300(成品)组成见,图1。

图1:火箭发射模拟灯光模块工作流程图
LED驱动电源部分,直接采用LM1084IS-3.3/TR。
其中LED部分又细分为:
模拟点火灯光电路:无PCB,用38个正向电压最大值3.4V的暖白色5mmLED灯珠组成,电路用细金属丝连接,安装在用蓬松的脱脂棉平铺在蓝色的底板上,38个LED点亮时,将白色的脱脂棉渲染成暖白色,模仿火箭发射时的烟雾,见图2。

图2:模拟点火灯光电路接线实物图(局部)
助推:由四个安装了LED圆环组成,安装在主箭周围的四个助推火箭上,与模拟点火灯光电路同时点亮。
主箭:由三个安装了LED圆环组成,安装在主箭上,分三个阶段点亮,代表火箭升空的过程。
语音模块CH9300的音响由两部分组成:
火箭发射时的轰鸣声,使用时长3秒音频,覆盖主箭三个LED圆环间隔一秒,依次点亮的过程。
火箭发射成功后的欢呼声,使用时长1秒音频。
电路原理:
模拟火箭发射倒计时模块倒计时结束以后,模拟火箭发射倒计时模块的AI8051U单片机核心板I/O口P12发出触发信号,进入火箭发射模拟灯光模块AI8051U单片机核心板I/O口P33,触发火箭发射模拟灯光程序运行。
首先,P20输出低电平信号,进入灯光效果控制电路(见图2),通过LED进入光耦,通过限流电阻,进入S8550基极,S8550饱和导通,双刀双掷继电器工作分别接通:
模拟点火灯光电路、助推的四个LED圆环和主箭底层的LED圆环。
语音模块CH9300的IO1,发出3秒火箭发射时的轰鸣声。
第二,P20定时1秒结束后,P21接替工作,P21的低电平信号,进入灯光效果控制电路通过LED进入光耦,通过限流电阻,进入S8550基极,S8550饱和导通,双刀双掷继电器接通主箭最中间的LED圆环。
第三,P21定时1秒结束后,P22接替工作,P22的低电平信号,进入灯光效果控制电路通过LED进入光耦,通过限流电阻,进入S8550基极,S8550饱和导通,双刀双掷继电器接通主箭最上层的LED圆环。
最后,P22定时1秒结束后,P23接替工作,P23的低电平信号,进入灯光效果控制电路通过LED进入光耦,通过限流电阻,进入S8550基极,S8550饱和导通,双刀双掷继电器接通语音模块CH9300的IO2,发出火箭发射成功后的欢呼声。

图3:灯光效果控制电路
软件代码
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
#include "intrins.h" //调用头文件
#define u8 unsigned char //8位无符号变量(0-255)
#define u16 unsigned int //16位无符号变量(0-65535)
u8 buttonPressCount = 0; // 定义一个变量来记录按钮按下的次数
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
// 定义P2和P3的各个引脚
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit StartKey = P3^3; // 定义P33为开始键
unsigned char timeCnt;
unsigned char lastTimeCnt;
bit running = 0; // 运行标志,0表示待机,1表示运行
void Timer0_Init(void) //10毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
timeCnt = 0;
ET0 = 1;
}
// 定时器0中断服务程序
void Timer0_ISR(void) interrupt 1
{
//TF0 = 0; //清除TF0标志
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
timeCnt++;
if(timeCnt >= 100){
ET0 = 0;
}
}
void tiemrSleep(){
Timer0_Init();
while(timeCnt < 100);
}
// 延时函数
void Delay(u16 time)
{
while(time--);
}
// 检测按键是否按下,返回1表示按下,0表示未按下
bit CheckStartKey()
{
if(StartKey == 0) // 检测到低电平表示按键按下
{
Delay(20); // 延时消抖
if(StartKey == 0) // 确认按键是否仍然按下
return 1; // 按下返回1
}
return 0; // 未按下返回0
}
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
P4M1 = 0x00; P4M0 = 0x00; // 设置P4为输入模式
P2M1 = 0x00; P2M0 = 0x00; // 设置P2为推挽输出
P3M1 = 0x00; P3M0 = 0x00; // 设置P3为输入模式
P2 = 0xFF;
lastTimeCnt = 0;
timeCnt = 0;
Timer0_Init();
EA = 1;
while(1)
{
// 检测按键是否按下,按下后开始运行
if(CheckStartKey())
{
running = 1; // 设置运行标志
}
if(running)
{
P20 = 0; P21 = 1; P22 = 1; P23 = 1; tiemrSleep(); // 只点亮P2.0,延时1秒
P20 = 1; P21 = 0; P22 = 1; P23 = 1; tiemrSleep(); // 只点亮P2.1,延时1秒
P20 = 1; P21 = 1; P22 = 0; P23 = 1; tiemrSleep(); // 只点亮P2.2,延时1秒
P20 = 1; P21 = 1; P22 = 1; P23 = 0; tiemrSleep(); // 只点亮P2.3,延时1秒
P20 = 1; P21 = 1; P22 = 1; P23 = 1; // 熄灭所有LED
running = 0; // 重置运行标志,回到待机状态
}
}
}
实物图
此处可放入组装完成后完整实物图

图4:主箭灯光

图5:助推箭灯光

图6:灯光效果控制电路实物图

图7:LED驱动电源

图8:AI8051U单片机核心板

图9:语音存储功放电路(成品)
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论