目录

  • 一、所用到的软件和硬件
  • 二、硬件的用途
  • 三、代码的编写和整理
    • 主函数程序
    • 中断处理程序函数
    • 红外线感应到的处理函数
    • 关门断电函数
  • 四、后面的优化思路

一、所用到的软件和硬件

软件:
使用的KEIL 和STM32CUBE MX
STM32CUBE MX简直小白福音,如果对于STM32配置不是很清楚的话,又想尝试STM32芯片的开发的话,可以尝试使用这一个软件,这个可以想图形一样的点点就配置成功了。
硬件:
STM32F103ZET6的开发板、一个单刀单掷的继电器、一个双刀双掷的继电器、一个红外线感应模块、一个光电开关

上图少了红外线模块和光电开关

二、硬件的用途

单刀单掷的继电器:用来做一个电机电源的开关,电机一旦上电就会一直转,容易造成堵转,所以需要一个电源的开关
双刀双掷的继电器:用用来做一个电源的反转,达到电机反转的目的
红外线感应器:作为一个传感器,感应物体接近
开发板:作为处理器
电机:一上电就会一直转,所以需要断电,防止堵转太久,烧坏了

三、代码的编写和整理

引脚说明:
PA4 引脚输出 如果是高电平,单刀单掷的继电器闭合,电机电源导通
PA3 引脚输出 如果是高电平,双刀双掷的继电器闭合,电机电源反转
PA5 引脚中断 如果是高电平,进入中断
PA7 引脚中断 如果是高电平,进入中断

主函数程序

初始化完毕,在while(1)里,一直检测是否有信号输入,有信号,进入中断标志位置1。

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();while (1){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //程序运行,电源打开AMy_Delay_us(50);if(INR == 1) //判断有没有红外线感应,如果有,进入Deal_Infared函数,进行开关门动作{Deal_Infared();}if(SW_STA == 1) //判断有没有合上,如果合上,进去Deal_Switch,关闭电源{Deal_Switch();}}

中断处理程序函数

在中断处理函数里,尽量不要放太多语句处理,尽量简洁一点,我这边的话是设置一个标志位,如果有信号进入就把标志位置1 如果直接在处理函数处理开门关门的操作 有可能会错过一些传感器的信号

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //一接收到红外线感应,进入中断
{if(GPIO_Pin == GPIO_PIN_5) //判断是不是5口 红外线{My_Delay_us(10);  //延迟10usif(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == SET){INR = 1;}}if(GPIO_Pin == GPIO_PIN_7) //判断是不是7口  光电开关{My_Delay_us(10);  //延迟10usif(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7) == RESET){SW_STA = 1;}}
}

红外线感应到的处理函数

void Deal_Infared()          //处理红外线的函数
{//完成开门动作while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7) == RESET ) // 这个是防止门没开起来,因为光电开关检测到位就会断电{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); My_Delay_us(50);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //电源开启,一直开门}//    INR = 0; //标志位置0,等待下次进入中断HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //电源关闭My_Delay_us(50);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);    //如果收到红外线感应模块的反馈,就电机反转,打开垃圾桶My_Delay_us(50);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //电源开启HAL_Delay(3000);while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5) == SET)      //判断红外线有没有再次感应到,如果有,电源继续开着,直到没有感应到{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //电源开启          }//完成关门动作HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //电源关闭//My_Delay_us(50);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);     //完成关门动作INR = 0; //标志位置0,等待下次进入中断}

关门断电函数

void Deal_Switch(void) //定义开关函数
{while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7) == RESET & INR != 1) //这个是检测如果关门到位,就关闭电源,防止电机堵转烧坏{HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //电源开启,关门到位My_Delay_us(100);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //电源关闭}SW_STA = 0;}

四、后面的优化思路

1.这个电机正转反转是用继电器控制,接线十分繁琐,可以使用电机驱动器,使用PWM输出控制,能达到正反转的效果,也能达到控制电机的速度
2.这边的延时是HAL_DELAY,延迟就堵塞了,正常的代码一般不会使用这个,因为这样太消耗资源,如何达到延迟却不堵塞,再这个代码延迟的时候,可以去执行其他线程呢,可以加入freeRTOS系统,一般用在项目中的也是使用这个系统。
这两个我都有组装和写好代码,需要可以再发,很简易的电路,适合刚入门的人试试水。

如何使用STM32开发板做一个自动感应垃圾桶相关推荐

  1. 自动感应垃圾桶c语言,如何使用STM32开发板作一个自动感应垃圾桶

    1.所用到的软件和硬件 软件: 使用的KEIL 和STM32CUBE MX STM32CUBE MX简直小白福音,若是对于STM32配置不是很清楚的话,又想尝试STM32芯片的开发的话,能够尝试使用这 ...

  2. 野火stm32开发板给定一个脉冲程序_STM32开发板哪个好,推荐一款高性价比stm32MP157开发板...

    一款能跑Linux的STM32开发板: 一款既可以玩Linux又可以玩单片机的开发板: 一款可同时学习A7和M4的双核异构开发板: 一款支持最新的Linux 5.4.31系统和u-boot 20200 ...

  3. 用FPGA开发板做一个I2CEEPROM的烧写器

    1,主要目的是为了实验PENCORES上的两个开源的IP,UART2BUS和I2C. 2,在FPGA STARTER 开发板上进行实验. 3,速度不做要求. 4,UART2BUS提供了一个WINOWS ...

  4. 野火stm32开发板给定一个脉冲程序_STM32学习之旅~~~~~~~~~蜂鸣器实例

    在前面章节中我们已经介绍了如何控制 STM32 的 IO 口输出高低电平,本章我们通过另外一个实验来讲述 STM32 IO 口的输出.通过 STM32F1 芯片的一个 IO口控制板载有源/无源蜂鸣器, ...

  5. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    为了开发者能够快速入门BC28的开发,加快开发者的项目进度,开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手就可以玩 ...

  6. 判断按键值_「正点原子NANO STM32开发板资料连载」第十六章电容触摸按键实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十六章电容 ...

  7. 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三章 M ...

  8. 基于STM32开发板CAN总线通信协议浅析

    基于STM32开发板CAN总线通信协议浅析 一.前言 控制器局域网(Controller Area Network,CAN),是由德国BOSCH(博世)公司开发,是目前国际上应用最为广泛的现场总线之一 ...

  9. 大白NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    大白为了开发者能够快速入门BC28的开发,加快开发者的项目进度,大白开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手 ...

最新文章

  1. 用树莓派做一个alibaba-guest
  2. 酒店叫醒系统服务器,酒店叫醒服务的流程
  3. 教师管理系统设计报告java_教师办公管理系统的设计与实现
  4. 用scikit-learn进行LDA降维
  5. Ruby中的Mixin
  6. 笨办法学 Python · 续 练习 15:栈和队列
  7. 苹果新Mac Pro生产线将从美国转至中国 会更便宜吗?
  8. 解密flash播放器
  9. php开发当中遇到的各种问题,PHP项目开发中遇到过的问题
  10. Leetcode热门100之两数之和
  11. MySQL中的next-key lock
  12. 利用jsoup解析网站网页
  13. 字节跳动技术面都过了,结果还是被刷了,问HR原因竟是。。。
  14. Python tkinter的简单使用,在绘布上播放GIF和图片
  15. vue知识(四)生命周期、钩子函数、路由
  16. 阿里笔试模拟题-74.钱庄
  17. 【英语学习】【医学】生物化学(biochemistry)系统
  18. 自动还原魔方算法数据结构
  19. 【罗塞塔石碑】—My Lover(One.iso)
  20. 构建信用卡反欺诈预测模型——机器学习

热门文章

  1. 路由器mw320虚拟服务器,水星(MERCURY)MW320R路由器怎么设置 | 192路由网
  2. QQ黑名单发布-轻松屏蔽指定的QQ号在本机登陆采用驱动级进程保护
  3. 趣味算法-04-跟着作者读《趣味算法(第2版)》-贪心算法
  4. Promise的使用及用法详解
  5. 圆周率一千万亿位_“圆周率”已精确到60万亿位,算下去有何意义?专家告诉你真相!...
  6. 做自媒体的素材都是在哪里找的呢?
  7. 使用 k-means 聚类生成 SSD 锚框纵横比
  8. [CF1500B]Two chandeliers
  9. 如何编辑图片?几个图片编辑的简单方法
  10. 深度学习UFLDL教程翻译之自动编码器