
冬季电加热发热片激光剑手把路亚竿鱼竿
简介
针对冬季钓鱼戴手套操作不灵活,不戴手套又会特别冷导致手僵硬。特意开发此套件
简介:针对冬季钓鱼戴手套操作不灵活,不戴手套又会特别冷导致手僵硬。特意开发此套件开源协议
:GPL 3.0
描述
视频链接:
项目简介
冬季玩路亚,戴手套不方便操作,不戴手套手很快就冻僵了。为了解决这个烦恼,特意做了一款可以电加热的路亚竿手柄。
项目功能
为了做小体积,把所有东西都装到手把节中,主控采用了STC8G1K08A
整个系统采用两节18650供电,并通过78L05降压提供5V给主控供电
通过一个NTC来获取实时温度
通过PID算法输出PWM信号控制MOS管来实现恒温
外部通过一个按键提供交互,上电默认无输出,长按开关机,短按切换温度,一共预设三个档位,40/50/60
通过一个分压电路配合单片机内部1.19V的基准电压实时获取电池电压,当电压低于7.2V限制最低档运行,低于6V关闭输出,保护电池不会过放
外接一个WS2812B的三色LED灯珠用来显示档位和运行状态,配合透明玻纤竿稍可以让整个杆子发光。
项目参数
- 本设计设计ADC测量电池电压,在低电压情况下强制关闭输出保护电池;
- 本设计采用NTC测量实时温度,并通过简单算法实现恒温
- 选用WS2812B可编程LED显示状态
原理解析(硬件说明)
项目实现
主控STC8G1K08A

系统5V供电

按键上拉,按下下拉

ADC测量电池电压

NTC测量实时温度

2812BRGB LED灯显示状态

调温MOS

项目功能
简单测试例程,PID调温暂时没有测试
#include "intrins.h"
// 定义IO口
sbit KEY = P5^4; // 按键输入P5.4
sbit WS2812B = P5^5; // WS2812B数据线P5.5
// P3.3将用作CCP/PWM输出,由硬件控制
// 档位定义
#define GEAR_1 0
#define GEAR_2 1
#define GEAR_3 2
// 颜色定义 (GRB格式)
#define COLOR_GREEN 0x00FF00 // 绿色
#define COLOR_YELLOW 0xFFFF00 // 黄色
#define COLOR_RED 0xFF0000 // 红色
// PWM周期定义 (基于65535)
#define PWM_PERIOD 1000 // PWM周期
// 全局变量
unsigned char current_gear = GEAR_1; // 当前档位
bit key_flag = 0; // 按键标志
unsigned int key_count = 0; // 按键计时
// 函数声明
void Delay_us(unsigned int us);
void Delay_ms(unsigned int ms);
void GPIO_Init(void);
void CCP_PWM_Init(void);
void Timer0_Init(void);
void WS2812B_WriteByte(unsigned char dat);
void WS2812B_WriteColor(unsigned long color);
void Key_Scan(void);
void Set_Gear(unsigned char gear);
// 微秒延时函数
void Delay_us(unsigned int us)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
// 毫秒延时函数
void Delay_ms(unsigned int ms)
{
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 1000; j++);
}
// GPIO初始化
void GPIO_Init(void)
{
// P3.3设置为CCP/PWM输出
// STC8G的P3.3可以作为CCP1/PCA1/PWM输出
P3M0 |= 0x08; // P3.3推挽输出
P3M1 &= ~0x08;
// P5.5推挽输出(WS2812B)
P5M0 |= 0x20;
P5M1 &= ~0x20;
// P5.4准双向口(按键输入,内部上拉)
P5M0 &= ~0x10;
P5M1 &= ~0x10;
P5 |= 0x10; // 设置上拉
}
// CCP/PWM初始化 - 使用PCA模块的CCP功能
void CCP_PWM_Init(void)
{
// PCA模块初始化
CCON = 0x00; // 清除CF标志,停止PCA计数器
CMOD = 0x02; // PCA时钟源 = Fosc/2,禁止PCA溢出中断
// PCA模块0用于PWM输出(对应P3.3)
CCAPM1 = 0x42; // PCA模块1工作于8位PWM模式,无中断
// 设置PWM周期和初始占空比
CH = 0;
CL = 0;
// 初始占空比30%
CCAP1H = (unsigned char)(PWM_PERIOD * 0.30);
CCAP1L = CCAP1H;
// 启动PCA计数器
CR = 1; // 启动PCA计数器
}
// 定时器0初始化(用于按键扫描)
void Timer0_Init(void)
{
AUXR |= 0x80; // 定时器0为1T模式
TMOD &= 0xF0; // 设置定时器0为16位自动重装
TL0 = 0xCD; // 设置定时初值
TH0 = 0xD4; // 10ms@11.0592MHz
TR0 = 1; // 启动定时器0
ET0 = 1; // 使能定时器0中断
EA = 1; // 开总中断
}
// WS2812B写一个字节
void WS2812B_WriteByte(unsigned char dat)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
if(dat & 0x80)
{
WS2812B = 1;
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
WS2812B = 0;
_nop_(); _nop_();
}
else
{
WS2812B = 1;
_nop_(); _nop_();
WS2812B = 0;
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
}
dat <<= 1;
}
}
// WS2812B写颜色(GRB格式)
void WS2812B_WriteColor(unsigned long color)
{
unsigned char i;
// 发送GRB数据,24位
for(i = 0; i < 24; i++)
{
if(color & 0x800000)
{
WS2812B = 1;
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
WS2812B = 0;
_nop_(); _nop_();
}
else
{
WS2812B = 1;
_nop_(); _nop_();
WS2812B = 0;
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
}
color <<= 1;
}
}
// 按键扫描
void Key_Scan(void)
{
static unsigned char key_state = 0;
switch(key_state)
{
case 0: // 等待按键按下
if(KEY == 0)
{
key_state = 1;
key_count = 0;
}
break;
case 1: // 消抖确认
if(KEY == 0)
{
key_count++;
if(key_count >= 2) // 20ms消抖
{
key_state = 2;
key_flag = 1; // 按键有效
}
}
else
{
key_state = 0;
}
break;
case 2: // 等待按键释放
if(KEY == 1)
{
key_state = 0;
}
break;
}
}
// 设置档位
void Set_Gear(unsigned char gear)
{
current_gear = gear;
switch(gear)
{
case GEAR_1: // 一档:绿色,PWM 30%
CCAP1H = (unsigned char)(PWM_PERIOD * 0.30);
CCAP1L = CCAP1H;
WS2812B_WriteColor(COLOR_GREEN);
break;
case GEAR_2: // 二档:黄色,PWM 60%
CCAP1H = (unsigned char)(PWM_PERIOD * 0.60);
CCAP1L = CCAP1H;
WS2812B_WriteColor(COLOR_YELLOW);
break;
case GEAR_3: // 三档:红色,PWM 90%
CCAP1H = (unsigned char)(PWM_PERIOD * 0.90);
CCAP1L = CCAP1H;
WS2812B_WriteColor(COLOR_RED);
break;
}
// WS2812B复位
WS2812B = 0;
Delay_us(50);
}
// 定时器0中断服务函数(10ms按键扫描)
void Timer0_ISR() interrupt 1
{
Key_Scan(); // 每10ms执行一次按键扫描
}
// 主函数
void main(void)
{
// 初始化
GPIO_Init();
CCP_PWM_Init(); // 初始化CCP/PWM
Timer0_Init();
// 上电默认一档
Set_Gear(GEAR_1);
while(1)
{
// 检测按键标志
if(key_flag)
{
key_flag = 0;
// 循环切换档位
current_gear++;
if(current_gear > GEAR_3)
{
current_gear = GEAR_1;
}
Set_Gear(current_gear);
}
// 主循环其他任务
Delay_ms(10);
}
}
组装流程






实物图

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










