打印
[国产单片机]

设计一个适合老人用的厨房定时器---更新,已经做了3个样版

[复制链接]
5849|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 广东梁百万 于 2021-10-14 17:23 编辑

设计一个适合老人用的厨房定时器,看看会不会有厂商来参考我的创意

厨房烹饪计时用,要操作简单方便。
两排LED显示,第一排大数字是显示倒计时,这个倒计时间用一个旋转开关调节,时间到了就响铃30秒,EC11编码开关往下按就消音.

第二排小数字显示当前时间,EC11编码开关往下长按就进入时间设定,左右旋转调整时间。







-----------------------------------------

2021/8/4更新------已经画图打样

-----------------------------------------------

2021/10/14 更新,8月份已经做出了第一个样板,  9月份已经更改了线路做出了第二版。
现在已经焊接了3个样板, 试验情况达到了设计要求。




使用特权

评论回复
沙发
广东梁百万|  楼主 | 2021-6-23 19:51 | 只看该作者

使用特权

评论回复
板凳
kissdb| | 2021-6-24 14:26 | 只看该作者
本帖最后由 kissdb 于 2021-6-24 14:29 编辑

我感觉最好弄个离线语音识别的,喇叭声音弄大点,我家现在的智能音箱做的最多的事就是几分钟后提醒我关火,看烤箱啥的

使用特权

评论回复
地板
广东梁百万|  楼主 | 2021-8-4 23:59 | 只看该作者
2021/8/4更新------已经画图打样,
电路板增加了一个继电器模组,这个继电器模组可单独使用,
如果还需要定时控制电器那就用到继电器模组,
如果只是闹铃响,那就锯掉这个模组。



使用特权

评论回复
5
单模先声| | 2021-8-29 23:20 | 只看该作者
EC11的程序可以分享一下吗?谢谢

使用特权

评论回复
6
广东梁百万|  楼主 | 2021-8-29 23:49 | 只看该作者
单模先声 发表于 2021-8-29 23:20
EC11的程序可以分享一下吗?谢谢

经测试,快或慢转动时都能正常计数,但如果很暴力那种快就识别不了。
电路见图1,电容实际用的是103(10n),
原理:正转时,A端先低电平,再到B端低电平,过一段时间后两者都是高电平,这里就是读取从其中一个是低电平到同时高电平这过渡状态从而判断正反转,看图2

编程算法:用定时器中断,每1ms就把EC11的A端和B端移入变量EC11_AB里面,跟着判断正反转,过渡前过渡后各读两次,如果是01011111(0x5f)那就是正转,10101111(0xaf)是反转。

单片机使用的是STC8G1K08




图1






图2





 sbit EC11_A = P1^6;           //EC11 A端
        sbit EC11_B = P1^7;           //EC11 B端
        sbit EC11_D = P5^4;           //EC11 压按开关


          //------EC11编码器相关的数组和变量

                unsigned char xdata EC11_AB=0x00;    //ec11的AB端定时扫描输入
                unsigned char xdata EC11_AOUT=0;    //ec11的A端状态
                unsigned char xdata EC11_BOUT=0;    //ec11的B端状态
         //--------------------
             void EC11SM();//EC11输入扫描函数声明
                 void EC11CL();//EC11处理函数声明

           //------------------------

         void main()
        {

    P0M0=0x00;             //初始化
    P0M1=0x00;
    P1M0=0x00;
    P1M1=0x00;
    P2M0=0x00;
    P2M1=0x00;
    P3M0=0x00;
    P3M1=0x00;
    P5M0=0x00;
    P5M1=0x00;

         AUXR |= 0x04;                //定时器时钟1T模式
        T2L = 0x9A;                //设置定时初值
        T2H = 0xA9;                //设置定时初值
        AUXR |= 0x10;                //定时器2开始计时
        IE2 = 0x04;         
        EA = 1; //中断使能        
         

         //主函数//********************
        while (1)       //下面重复循环
        {


          EC11CL();//EC11处理函数


          }   
          }





                //* 定时器2中断服务函数 */
                void InterruptTimer2() interrupt 12
                {
               
        
                EC11SM();//EC11输入扫描函数


                    }




                        //EC11输入扫描函数
                        void EC11SM()
                        {
                         EC11_AB=(EC11_AB<<1)|EC11_A;    //把EC11的A端值移入
                         EC11_AB=(EC11_AB<<1)|EC11_B;    //把EC11的B端值移入
                         if(EC11_AB==0x5f)
                         {
                          EC11_AOUT=1;                  //正转时就置A端状态为1
                          }
                         if(EC11_AB==0xaf)
                         {
                         EC11_BOUT=1;                  //正转时就置B端状态为1
                         }
                         else;
                         }

                        //EC11处理函数
                        void EC11CL()
                        {
                         if(EC11_AOUT==1)
                         {
                                                //************这里是正转时需要执行的内容*******
                        
                          EC11_AOUT=0;
                          }

                         if(EC11_BOUT==1)
                         {
                                                //***********这里是反转时需要执行的内容*********
                          
                          EC11_BOUT=0;
                          }
                         else;
                         }









使用特权

评论回复
7
rankey| | 2021-8-31 13:54 | 只看该作者
广东梁百万 发表于 2021-8-29 23:49
经测试,快或慢转动时都能正常计数,但如果很暴力那种快就识别不了。
电路见图1,电容实际用的是103(10n ...

梁老板,恕我直言,这个判断EC11输入扫描函数,不够好。会出现暴力转动,无法区分正转或反转的异常。
    兄弟我这里有一个亲自操刀验证 OK的扫描函数。设计简单巧妙,无需通过判断数值来区分转向,极大提高了分辨能力。代码发一段你看下,老板您一看就秒懂
  /*****************************************************
函数2功能:编码器扫描函数
***************************************************/
void Encoder_scan(void)   
{
         static  unsigned char   A_Laststate;     //A引脚的上一次电平状态
         static  unsigned char   B_Laststate;     //B引脚的上一次电平状态
         static  unsigned char   A_Currentstate;        //A引脚的当前电平状态
         static  unsigned char   B_Currentstate;        //B引脚的当前电平状态         
        if(Encoder_enable)  //若扫描编码器使能
        {
                 A_Currentstate=Encoder_A;//扫描并获取当前A相电平,
                 B_Currentstate=Encoder_B;
if(A_Currentstate!=A_Laststate)
        {  
         if((A_Currentstate==1)&&(B_Currentstate==0)) //A相发生高跳变,且B相滞后,仍是0电平,为正转
                 {
                 Turn_Valve=CW;         //扫描后标记为顺时针
                 }
                  }
        else if(B_Currentstate!=B_Laststate)
        {  
         if((B_Currentstate==1)&&(A_Currentstate==0)) //B相发生高跳变,且A相滞后,仍是0电平,为反转
         {
         Turn_Valve=CCW ;         //扫描后标记为逆时针
         }
         }
  else if((A_Currentstate==A_Laststate)&&(B_Currentstate==B_Laststate)) //扫描到未发生转动
          {
           Turn_Valve=Stop;   //扫描后标记为静止
           }
        }
        A_Laststate=A_Currentstate;
         B_Laststate=B_Currentstate;
         Encoder_enable=0;        //释放使能,等待下一次扫描       
}

使用特权

评论回复
8
广东梁百万|  楼主 | 2021-10-10 09:34 | 只看该作者
rankey 发表于 2021-8-31 13:54
梁老板,恕我直言,这个判断EC11输入扫描函数,不够好。会出现暴力转动,无法区分正转或反转的异常。
    ...

谢谢分享。

使用特权

评论回复
9
molismart| | 2021-10-14 16:14 | 只看该作者
那种软件画的图,可以出这么清晰的3D

使用特权

评论回复
10
广东梁百万|  楼主 | 2021-10-14 17:13 | 只看该作者
molismart 发表于 2021-10-14 16:14
那种软件画的图,可以出这么清晰的3D

立创EAD, 国产,免费的

使用特权

评论回复
11
NJZR| | 2021-10-14 19:05 | 只看该作者
应该用LCD屏,身为一个定时器必须插电源是一件很蛋疼的事

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

204

帖子

4

粉丝