当前位置:   article > 正文

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

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

目录

1、前言

2、仿真图

3、源程序 

资料下载地址:STM32自动光控窗帘程序+Proteus仿真图 H桥L298驱动电机

1、前言

基于STM32F103设计的智能光控窗帘,包含STM32芯片、光敏电阻、LCD1602显示屏、电机驱动控制模块等。
备注:通过ARM内部的ADC采集光敏电阻电压,判断电压值

光强检测模块:光敏电阻,对光照强度不同,阻值不同。并通过ARM内部的ADC采集光敏电阻电压,判断电压值。电压值低于设定的值,表示光强太弱,打开窗帘;电压大于设定的参考电压值,表示光强太强,关闭窗帘;光强合适,显示OK,电机不转,表示窗帘不动。
液晶显示模块:液晶显示High,表示光强太强;液晶显示OK,表示光强合适;液晶显示Low,表示光强太弱LCD1602显示光强度。
资料内部包含STM32程序和Proteus仿真。

2、仿真图

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

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

3、源程序 

  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. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  12. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  13. GPIO_Init(GPIOC, &GPIO_InitStructure);
  14. }
  15. void OPEN(void) //left moto is runing, but right moto is brake
  16. {
  17. GPIO_SetBits(GPIOC,GPIO_Pin_5);
  18. GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  19. GPIO_ResetBits(GPIOC,GPIO_Pin_3);
  20. GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  21. GPIO_SetBits(GPIOC,GPIO_Pin_1);
  22. GPIO_SetBits(GPIOC,GPIO_Pin_0);
  23. }
  24. void CLOSE(void) //right moto is runing, but left moto is brake
  25. {
  26. GPIO_ResetBits(GPIOC,GPIO_Pin_5);
  27. GPIO_ResetBits(GPIOC,GPIO_Pin_4);
  28. GPIO_SetBits(GPIOC,GPIO_Pin_3);
  29. GPIO_ResetBits(GPIOC,GPIO_Pin_2);
  30. GPIO_SetBits(GPIOC,GPIO_Pin_1);
  31. GPIO_SetBits(GPIOC,GPIO_Pin_0);
  32. }
  33. void STOP(void) //right moto is runing, but left moto is brake
  34. {
  35. GPIO_SetBits(GPIOC,GPIO_Pin_5);
  36. GPIO_SetBits(GPIOC,GPIO_Pin_4);
  37. GPIO_SetBits(GPIOC,GPIO_Pin_3);
  38. GPIO_SetBits(GPIOC,GPIO_Pin_2);
  39. GPIO_SetBits(GPIOC,GPIO_Pin_1);
  40. GPIO_SetBits(GPIOC,GPIO_Pin_0);
  41. }
  42. int main(void)
  43. {
  44. int a,b,c,d;
  45. float temp;
  46. delay_init(); //延时函数初始化
  47. LCD1602_Init();
  48. ADC1_GPIO_Config();
  49. L298_GPIO();
  50. ADC_Config();
  51. LCD1602_ShowStr(0,0," Auto curtain ",15);
  52. LCD1602_ShowStr(0,1,"Light:",6);
  53. while(1)
  54. {
  55. b=ADC_GetConversionValue(ADC1);
  56. temp=b*(3.4/4096)*10;
  57. //表示光线太弱
  58. if( temp < 8 )
  59. {
  60. LCD1602_ShowStr(7,1,"open ",4);
  61. OPEN();
  62. }
  63. else
  64. {
  65. if( temp < 25) //光线合适
  66. {
  67. LCD1602_ShowStr(7,1,"OK ",4);
  68. STOP();
  69. }
  70. else //光线太强
  71. {
  72. LCD1602_ShowStr(7,1,"close",4);
  73. CLOSE();
  74. }
  75. }
  76. // a=temp/1;
  77. // c=temp*10;
  78. // d=c%10;
  79. // LCD_ShowNum(11,0,a);
  80. // LCD_ShowNum(13,0,d);
  81. }
  82. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/473731
推荐阅读
相关标签
  

闽ICP备14008679号