找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3517|回复: 8
收起左侧

STM32自动光控窗帘程序+Proteus仿真图 H桥L298驱动电机

  [复制链接]
ID:561269 发表于 2022-1-15 16:22 | 显示全部楼层 |阅读模式
基于STM32F103设计的智能光控窗帘,包含STM32芯片、光敏电阻、LCD1602显示屏、电机驱动控制模块等。
备注:通过ARM内部的ADC采集光敏电阻电压,判断电压值
光强检测模块:光敏电阻,对光照强度不同,阻值不同。并通过ARM内部的ADC采集光敏电阻电压,判断电压值。电压值低于设定的值,表示光强太弱,打开窗帘;电压大于设定的参考电压值,表示光强太强,关闭窗帘;光强合适,显示OK,电机不转,表示窗帘不动。

液晶显示模块:液晶显示High,表示光强太强;液晶显示OK,表示光强合适;液晶显示Low,表示光强太弱LCD1602显示光强度。
资料内部包含STM32程序和Proteus仿真。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
51hei.png 51hei.png

液晶显示High,表示光强太强
液晶显示OK,表示光强合适
液晶显示Low,表示光强太弱

L298  H桥,电机驱动芯片
光强太弱,表示光线不好,应该开窗
光强太强,表示光线强,关窗
光敏电阻,对光照强度不同,阻值不同
电压是模拟量,所以使用AD采集,AD值模拟量转数字量,这样ARM就可以知道当前电压值

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "adc.h"


  6. void L298_GPIO( void )
  7. {
  8.         GPIO_InitTypeDef GPIO_InitStructure;         
  9.         
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  14.         GPIO_Init(GPIOC, &GPIO_InitStructure);        
  15. }

  16. void OPEN(void)        //left moto is runing, but right moto is brake
  17. {
  18.         GPIO_SetBits(GPIOC,GPIO_Pin_5);
  19.         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  20.         GPIO_ResetBits(GPIOC,GPIO_Pin_3);
  21.         GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  22.         GPIO_SetBits(GPIOC,GPIO_Pin_1);        
  23.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  24. }
  25. void CLOSE(void)        //right moto is runing, but left moto is brake
  26. {
  27.         GPIO_ResetBits(GPIOC,GPIO_Pin_5);
  28.         GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  29.         GPIO_SetBits(GPIOC,GPIO_Pin_3);
  30.         GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  31.         GPIO_SetBits(GPIOC,GPIO_Pin_1);        
  32.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  33. }

  34. void STOP(void)        //right moto is runing, but left moto is brake
  35. {
  36.         GPIO_SetBits(GPIOC,GPIO_Pin_5);
  37.         GPIO_SetBits(GPIOC,GPIO_Pin_4);
  38.         GPIO_SetBits(GPIOC,GPIO_Pin_3);
  39.         GPIO_SetBits(GPIOC,GPIO_Pin_2);
  40.         GPIO_SetBits(GPIOC,GPIO_Pin_1);        
  41.         GPIO_SetBits(GPIOC,GPIO_Pin_0);
  42. }


  43. int main(void)
  44. {
  45. int a,b,c,d;
  46.         float temp;
  47.         
  48.         delay_init();                     //延时函数初始化                  
  49.         LCD1602_Init();
  50.     ADC1_GPIO_Config();
  51.         L298_GPIO();
  52.     ADC_Config();  
  53.         LCD1602_ShowStr(0,0,"  Auto curtain ",15);
  54.         LCD1602_ShowStr(0,1,"Light:",6);
  55.         
  56.         while(1)
  57.         {
  58.                 b=ADC_GetConversionValue(ADC1);
  59.                 temp=b*(3.4/4096)*10;
  60.                 //表示光线太弱
  61.                 if( temp < 8 )
  62.                 {
  63.                         LCD1602_ShowStr(7,1,"open ",4);
  64.                         OPEN();
  65.                 }
  66.                 else
  67.                 {
  68.                         if( temp < 25)                                //光线合适
  69.                         {
  70.                                 LCD1602_ShowStr(7,1,"OK  ",4);
  71.                                 STOP();
  72.                         }
  73.                         else                                                //光线太强
  74.                         {
  75.                                 LCD1602_ShowStr(7,1,"close",4);
  76.                                 CLOSE();
  77.                         }
  78.                 }
  79. //                a=temp/1;
  80. //                c=temp*10;
  81. //                d=c%10;
  82. //                LCD_ShowNum(11,0,a);
  83. //                LCD_ShowNum(13,0,d);
  84.         }
  85. }
复制代码

Keil5代码与Proteus8.8仿真下载(注意不要使用其他版本):
STM32光控窗帘.7z (287.88 KB, 下载次数: 228)
回复

使用道具 举报

ID:526735 发表于 2022-5-19 12:12 | 显示全部楼层
你这个文件只能用Proteus8.8打开,其他版本运行就死机
回复

使用道具 举报

ID:406994 发表于 2022-5-23 16:51 | 显示全部楼层
只能用Proteus8.8这个版本
回复

使用道具 举报

ID:1028005 发表于 2022-5-28 11:55 | 显示全部楼层
繁星落叶 发表于 2022-5-23 16:51
只能用Proteus8.8这个版本

如果用proteus8.9画出来,然后用这个代码可以运行得出来吗
回复

使用道具 举报

ID:1030245 发表于 2022-5-28 12:04 | 显示全部楼层
写的不错 对自己横有帮助
回复

使用道具 举报

ID:1028005 发表于 2022-5-28 12:42 | 显示全部楼层
繁星落叶 发表于 2022-5-23 16:51
只能用Proteus8.8这个版本

用8.9的版本可以吗
回复

使用道具 举报

ID:993268 发表于 2022-5-31 16:57 | 显示全部楼层
8.6版本可以用吗
回复

使用道具 举报

ID:543845 发表于 2022-6-23 14:04 | 显示全部楼层
运行后无反应。
回复

使用道具 举报

ID:262 发表于 2022-6-23 14:29 | 显示全部楼层

有反应,你看我运行的效果就知道了,你可能没有使用作者指定的Proteus8.8版本,或者你的安装有问题
51hei.gif
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表