电子DIY好物推荐 篇一:一个智能插座自己做,能省多少钱?

2021-09-23 17:52:45 8点赞 23收藏 5评论

延时插座其实并不新鲜,DIY这款延时插座主要是因为倒计时编程。还有选择板子的时候尽量选择面积稍大的,捷配这方面面积可能会比较有优势,在10*15之内。

今天做的这个插座主要是定时插座,俗称倒计时插座。

一个智能插座自己做,能省多少钱?

一个智能插座自己做,能省多少钱?

首先按照已经发生的流程,在捷配官网的PCB购买页,选一块12*12的板子,担心过热会烧坏板子,打板的时候特地要求阻燃性,打样。下图非本次DIY所使用的PCB板,不要误会,只是这个板子真的很漂亮。

一个智能插座自己做,能省多少钱?

DIY这个插座计划中需要实现的功能其实比较简单,我们选择延时断电或延时上电工作方式,在开机前操作黑色的小开关进行设置。接下来我们做一下参数设置和可设定范围:


1、一个智能插座自己做,能省多少钱? 倒计时部分,定时时间我们设置为在【1分钟~99小时59分钟】,因为是手动对时,不是联网对时,精度方面没法保障,索性就不那么纠结了。

2、一个智能插座自己做,能省多少钱? 短按按键1,分钟加1,长按按键1,小时加1(正对图片位于插座左边的突出按钮) ,在停止和启动状态下均可调整时间。

3、一个智能插座自己做,能省多少钱? 短按按键2。启动定时,长按按键2。复位。4、电压:使用继电器控制插座输出,250V电压下额定电流10A,建议实际使用不超过1kW,不然很容易烧。为方便快速制作,本设计选用模块化零部件,主要模块包括单片机STC15F104W、220V转5V电源模块、TM1637四位时钟数码管模块、继电器模块等。全部材料均可在网上采购,总材料费用30元左右(含盒子和电源线)。接线图:

一个智能插座自己做,能省多少钱?

单片机:STC15F104W是一款非常方便实用的小单片机,8个脚的芯片除Vcc和Gnd外6个脚全是IO口,无须外部晶振和复位,供个电就能直接使用,实用是搞小制作的绝佳选择。


数码管:

TM1637数码管模块使用I2C通信,只占用两个IO口就行,而且程序非常简单,再也不用考虑常规数码管的刷新和消隐什么的。加载封装好的头文件即可轻松调用显示。

继电器:

继电器选用了可硬件设置高低电平驱动的模块,我使用了高电平驱动。一开始输出高电平发现驱动不了,原来要把IO口设置为强推挽模式才能驱动。
因为单片机IO口数量限制,需要按键复用,这就引入了长按短按识别机制。我使用了10ms中断扫描一次按键状态,使用自己琢磨了一套长按短按机制,可能有点粗糙,但亲测好用。

一开始写的程序显示倒计时,是直接显示计时时间,比如倒计时剩不到1分钟时,数码管显示的是00:00,总感觉这样不科学。后来改为只要这一分钟的秒还没走到0,就仍算1分钟。比如只剩20秒时,仍显示00:01,只有倒计时结束剩0秒时,才显示00:00。程序作了相应修改实现了此功能。但总感觉还能写的更简练。。。制作产品当然少不了一个好看的外壳。我经常在网上买防水塑料盒,各种规格都有。

这个延时插座使用的盒子尺寸是158mm*90mm*40mm。盒子的切割钻孔也有技巧。工具方面电钻当然少不了,还有带倒钩的割刀也非常实用,盒子在小太阳前烘烤一下会更软更好切割。这个延时插座没装输出电源指示灯,是因为忘了。单片机源程序:

差不多就到这了,那这样究竟能省多少钱呢,也就45块钱。但DIY实践操作所学的知识真的对我挺有用的,以后还要改进改进,加入温度传感器。

一个智能插座自己做,能省多少钱?

一个智能插座自己做,能省多少钱? 编程模块:

/*********************************************/

/* DIY延时插座 */

/* 创建者 :JS */

/* 创建时间:2021/9/13 */

/*********************************************/

#include STC15.H

#include TM1637.H

#include intrins.h

sbit key1=P3^0; //按键1,时间设置:短按分钟+,长按小时+

sbit key2=P3^1; //按键2,短按启动,长按复位

sbit key3=P3^2; //开关按键3,切换延时断电/延时上电功能,只在开机时检测

sbit relay=P3^3; //继电器触发信号,硬件设置为高电平时线圈通电

unsigned char mode=0; //mode为工作模式0,1 分别表示停止模式和运行模式

unsigned char hour=0,minute=0,second=0,time_count=0; //真实计时的时,分,秒,10ms计数器

unsigned char show[6]={0,0,0,0,0,0}; //TM1637四位数码管显示数组:小时的十位和个位,分钟的十位和个位,最后两个为小时和分钟。

unsigned int uiKeyTimeCnt1; //按键1计数

unsigned int uiKeyTimeCnt2; //按键2计数

bit ShortTouchFlag1=0; //按键1短按按键有效标志

bit LongTouchFlag1=0; //按键1长按按键有效标志

bit LongTouchRelease1=1; //按键1长按释放过的标志

bit ShortTouchFlag2=0; //按键2短按按键有效标志

bit LongTouchFlag2=0; //按键2长按按键有效标志

bit LongTouchRelease2=1; //按键2长按释放过的标志

bit delay_OnOff=0; //延时上电和延时断电选择位,开机检查Key3设置此位,0表示延时断电,1表示延时上电。

bit flag_1s=1; //秒任务标志位

bit flag_500ms=1; //半秒标志位

bit stat_500ms=0; //半秒状态位,控制时间冒号闪烁

/******************************

函数说明:延时函数,STC_ISP软件给出 @6MHz 1T单片机

入口参数:us=延时微秒数

出口参数:无

******************************/

void Delay_US(unsigned int us)

{

while(us--)

{

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

}

}

/******************************

函数说明:定时器0初始化,12T自动重装模式,定时10毫秒

******************************/

void Timer0Init(void) //10毫秒@6.000MHz

{

AUXR &= 0x7F; //定时器时钟12T模式

TMOD &= 0xF0; //设置定时器模式

TL0 = 0x78; //设置定时初值

TH0 = 0xEC; //设置定时初值

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

ET0=1; //允许T0中断

EA=1; //开全局中断

}

/******************************

函数说明:按键短按长按检测

******************************/

void Key_scan(void) //在中断里调用,每10ms检查一次按键状态

{

if(key1==0) //如果按键1按下

{

uiKeyTimeCnt1++; //累加按键计时

}

if(uiKeyTimeCnt1>200&&LongTouchRelease1==1) //当按键超过2秒且此前释放过一次时

{

LongTouchFlag1=1; //长按标志位置1,用于长按2秒后立即处理长按动作

LongTouchRelease1=0; //长按释放标志置0,表示长按未释放

}

if(key1==1) //当按键松开(也可能是抖动弹开)

{

if(uiKeyTimeCnt1>2&&uiKeyTimeCnt1<=200) //只有大于20mS,且小于2秒,才判为短按

{

uiKeyTimeCnt1=0; //清零按键计时

ShortTouchFlag1=1; //短按标志位置1

LongTouchFlag1=0; //长按标志位置0

}

if(uiKeyTimeCnt1>200) //如果松开按键时按键超过2秒,则为长按释放

{

uiKeyTimeCnt1=0; //清零按键计时

LongTouchRelease1=1; //长按释放标志位置1,表示长按已释放

}

}

if(key2==0) //如果按键2按下

{

uiKeyTimeCnt2++; //累加按键计时

}

if(uiKeyTimeCnt2>200&&LongTouchRelease2==1) //当按键超过2秒且此前释放过一次时

{

LongTouchFlag2=1; //长按标志位置1,用于长按2秒后立即处理长按动作

LongTouchRelease2=0; //长按释放标志置0,表示长按未释放

}

if(key2==1) //当按键松开(也可能是抖动弹开)

{

if(uiKeyTimeCnt2>2&&uiKeyTimeCnt2<=200) //只有大于20mS,且小于2秒,才判为短按

{

uiKeyTimeCnt2=0; //清零按键计时

ShortTouchFlag2=1; //短按标志位置1

LongTouchFlag2=0; //长按标志位置0

}

if(uiKeyTimeCnt2>200) //如果松开按键时按键超过2秒,则为长按释放

{

uiKeyTimeCnt2=0; //清零按键计时

LongTouchRelease2=1; //长按释放标志位置1,表示长按已释放

}

}

}

/******************************

函数说明:按键处理

******************************/

void Key_process(void)

{

if(ShortTouchFlag1==1) //当按键1短按标志位为1时进行按键1短按处理

{

ShortTouchFlag1=0; //清除短按标志位

minute++; //短按按键1的效果:分钟加1

if(minute==60) //如果设置分钟达到60分

minute=0; //将分钟清零

if(second>0) //以下将实际计时的小时和分钟转换为数码管显示的小时和分钟。比如计时还有00:00:20秒时,数码管显示的是00:01。

show[5]=minute+1; //只要秒不为零,则显示出来的分钟应该比实际计时的分钟加1

else

show[5]=minute; //只有秒为零时,显示的分钟才和计时的分钟一致

if(show[5]==60) //如果显示的分钟为60分,则显示的小时比实际计时的小时+1。

{

show[5]=0;

show[4]=hour+1;

}

else

show[4]=hour; //如果显示的分钟比实际的加1后还不到60分钟,则显示的小时和计时的小时一致。

show[0]=show[4]/10%10; //显示的小时十位数

show[1]=show[4]%10; //显示的小时个位数

show[2]=show[5]/10%10; //显示的分钟十位数

show[3]=show[5]%10; //显示的分钟个位数

TM1637_display(show[0],show[1],show[2],show[3],1); //显示定时时间。在按键调时状态下,时间的冒号固定显示不闪烁。

}

if(LongTouchFlag1==1) //当按键1长按标志位为1时进行按键1长按处理

{

LongTouchFlag1=0; //清除长按标志位

hour++; //按键1长按的效果:小时加1

if(hour==100) //如果设定的小时到100了

hour=0; //小时清零。定时时间最高只能设定99小时59分钟。

if(second>0) //以下将实际计时的小时和分钟转换为数码管显示的小时和分钟,同上。

show[5]=minute+1;

else

show[5]=minute;

if(show[5]==60)

{

show[5]=0;

show[4]=hour+1;

}

else

show[4]=hour;

show[0]=show[4]/10%10; //显示的小时十位数

show[1]=show[4]%10; //显示的小时个位数

show[2]=show[5]/10%10; //显示的分钟十位数

show[3]=show[5]%10; //显示的分钟个位数

TM1637_display(show[0],show[1],show[2],show[3],1); //显示定时时间。在按键调时状态下,时间的冒号固定显示不闪烁。

}

if(ShortTouchFlag2==1) //按键2短按处理,在停止状态下短按为启动运行

{

ShortTouchFlag2=0; //清除短按标志位

if(mode==0&&(minute>0||hour>0)) //只在停止状态下且设定了有效的定时时间,才能响应短按

{

mode=1; //短按的效果:启动定时

relay=~delay_OnOff; //开始定时后,根据开机时设定的延时断电或延时上电,继电器进行相应动作。如设定的是延时断电(delay_OnOff为0),启动后继电器应该先通电动作。

}

}

if(LongTouchFlag2==1) //按键2长按处理,长按为复位。在运行和停止状态下均可长按复位。

{

LongTouchFlag2=0; //清除长按标志位

mode=0; //复位后状态为停止状态

relay=0; //继电器释放

hour=minute=second=0; //计时时间清0

TM1637_display(0,0,0,0,1); //数码管显示时间00:00,时间冒号不闪烁

}

}

void main(void)

{

P3M1&=~(1<<3); //将继电器驱动脚P3.3设置为推挽输出

P3M0|=(1<<3);

relay=0; //继电器硬件选择为高电平驱动,开机后默认插座无电

delay_OnOff=key3; //延时断电或延时上电选择。1:延时上电,0:延时断电。只在开机前操作Key3有效。

TM1637_display(0,0,0,0,1); //上电后默认显示00:00

Timer0Init(); //定时器T0初始化并启动

while(1)

{

Key_process(); //调用按键处理函数

if(flag_500ms==1) //每500毫秒进行一次显示处理,主要是为了实现时间冒号的闪烁

{

flag_500ms=0; //清除半秒标志位

stat_500ms=~stat_500ms; //时间冒号每秒亮灭一次

if(mode==1) //只在启动定时的状态下刷新显示时间

{

if(second>0) //以下为将实际计时的时间转换为数码管显示的时间。比如定时还剩20秒时,数码管实际显示的是00:01。

show[5]=minute+1;

else

show[5]=minute;

if(show[5]==60)

{

show[5]=0;

show[4]=hour+1;

}

else

show[4]=hour;

show[0]=show[4]/10%10; //显示的小时十位数

show[1]=show[4]%10; //显示的小时个位数

show[2]=show[5]/10%10; //显示的分钟十位数

show[3]=show[5]%10; //显示的分钟个位数

TM1637_display(show[0],show[1],show[2],show[3],stat_500ms); //显示时间,冒号位是0还是1由stat_500ms确定,每半秒变化一次。

}

if(mode==1&&flag_1s==1) //以下为定时状态下更新计时时间,当秒任务标志位为1时进行倒计时

{

flag_1s=0; //清除秒任务标志位

if(second>0) //如果秒大于0,则减1秒

{

second--;

}

else if(minute>0) //如果秒等于0,则从分钟借位,分钟减1,秒变为59

{

minute--;

second=59;

}

else if(hour>0) //如果秒和分钟都为0,则从小时借位,小时减1,分钟和秒都为59

{

hour--;

minute=59;

second=59;

}

else //如果时分秒都为0

{

mode=0; //倒计时结束,进入停止状态

relay=delay_OnOff; //依据开机时设置的延时断电或延时上电,设置计时完成后的继电器状态。如果设置的是延时断电,计时到后继电器驱动为0。

TM1637_display(0,0,0,0,1); //计时到后时间显示00:00,时间冒号不闪烁

}

}

}//半秒任务结束

}//while(1)结束

}//main函数结束

void time0(void) interrupt 1 //T0中断服务,每10ms响应一次

{

time_count++; //计数加1

Key_scan(); //每10ms扫描一次按键状态

if(time_count==50) //每500ms时设置一次半秒标志位

flag_500ms=1;

if(time_count==100) //每1秒设置一次半秒标志位和秒任务标志位

{

time_count=0;

flag_500ms=1;

flag_1s=1;

}

}

展开 收起

配电箱家用PZ30明暗装开关盒 电源控制箱 18 回路套装空开盒 pz30-18回路(暗装)

配电箱家用PZ30明暗装开关盒 电源控制箱 18 回路套装空开盒 pz30-18回路(暗装)

60.1元起

奥睿科(ORICO)插座/排插/插线板/拖线板/接线板 新国标认证 NKO系列 2孔0.15米

奥睿科(ORICO)插座/排插/插线板/拖线板/接线板 新国标认证 NKO系列 2孔0.15米

11.9元起

德力西 usb魔方插座无线插排插线板接线板多功能家用电源转换器typ 【无线魔方】【2位插孔】【一键总控】

德力西 usb魔方插座无线插排插线板接线板多功能家用电源转换器typ 【无线魔方】【2位插孔】【一键总控】

9.9元起

ON智能插座转换器插排排插插线板插板接线板 6位全长1.8米

ON智能插座转换器插排排插插线板插板接线板 6位全长1.8米

79.9元起

公牛 插座扩展多功能排插带开关插板面板多孔转换器插头插线板学生宿舍创意小型可爱夜灯一转多二三立体上墙 【品字形】一转三 总开关9603K

公牛 插座扩展多功能排插带开关插板面板多孔转换器插头插线板学生宿舍创意小型可爱夜灯一转多二三立体上墙 【品字形】一转三 总开关9603K

22.9元起

美仕杰家用壁挂式电力轨道插座(明装款)五孔/USB

美仕杰家用壁挂式电力轨道插座(明装款)五孔/USB

79元起

公牛超薄扁平插头转向薄靠墙电源三孔小插座缝隙扁插头插排拖线板电视柜多功能转换器被沙发床头扩展带线家用 1.8米A140(满58顺丰包邮)

公牛超薄扁平插头转向薄靠墙电源三孔小插座缝隙扁插头插排拖线板电视柜多功能转换器被沙发床头扩展带线家用 1.8米A140(满58顺丰包邮)

20.6元起

公牛插座转换器插排插板不带线一转二三多功能家用插头分插器插座 一转三 独立开关[品字形]

公牛插座转换器插排插板不带线一转二三多功能家用插头分插器插座 一转三 独立开关[品字形]

15.5元起

德力普(Delipow) 插座 一转二多功能排插 商旅/家用便携式插座转换器/转换插头 2个两角插口+2个三角插口

德力普(Delipow) 插座 一转二多功能排插 商旅/家用便携式插座转换器/转换插头 2个两角插口+2个三角插口

12.8元起

公牛插座经典蓝白款排插2位6位三插位电源接线板多孔家用插排拖线板加长插线板长线多用功能电插板带线 GN-606 3插位总控开关 全长1.8米

公牛插座经典蓝白款排插2位6位三插位电源接线板多孔家用插排拖线板加长插线板长线多用功能电插板带线 GN-606 3插位总控开关 全长1.8米

29.9元起

飞利浦插座转换器一转多转换插排无线插板不带线插头分插器插线板 【一转三+保护门】1301P

飞利浦插座转换器一转多转换插排无线插板不带线插头分插器插线板 【一转三+保护门】1301P

14.8元起

公牛插座插排不带线正品插板排插无线电插板1/2/3/4孔插位接线板

公牛插座插排不带线正品插板排插无线电插板1/2/3/4孔插位接线板

12.3元起

公牛 插座一转六多孔电源插头多功能家用插线板插头插排 97333(分控一转六)

公牛 插座一转六多孔电源插头多功能家用插线板插头插排 97333(分控一转六)

33.6元起

爱国者aigo六位延长线插座(快充版 65W) 插座/USB插座/插排/排插/接线板 65W快充全长1.8米 AC0631

爱国者aigo六位延长线插座(快充版 65W) 插座/USB插座/插排/排插/接线板 65W快充全长1.8米 AC0631

152.1元起

公牛(BULL)GN-317新国标插座/插线板/插排/排插/接线板/拖线板 6位分控全长3米

公牛(BULL)GN-317新国标插座/插线板/插排/排插/接线板/拖线板 6位分控全长3米

75元起

海锚一转四新国标无线转换器分控开关转接插头/插座/插线板一转多家用电源插板不带线234白

海锚一转四新国标无线转换器分控开关转接插头/插座/插线板一转多家用电源插板不带线234白

20.9元起
5评论

发表评论请 登录
  • 最新
  • 最热
评论举报

请选择举报理由

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章

电子舟

Ta还没有介绍自己

关注 打赏
最新文章 热门文章
23
扫一下,分享更方便,购买更轻松