基于STM32F103c8t6的智能垃圾桶项目

基于STM32F103c8t6的智能垃圾桶项目

  • 写在前头
  • 软件配置
  • 硬件部分
    • 1. 主控芯片
    • 2. HC-SR04超声波模块
      • 模块简介
      • 模块参数
      • 工作原理
      • GPIO配置
    • 3. SG90舵机
      • 模块简介
      • 模块参数
      • 工作原理
      • GPIO配置
    • 3. OLED显示屏
      • 模块简介
      • 模块参数
      • 工作原理
      • GPIO配置
  • 软件部分
    • HC-SR04超声波代码
    • SG90舵机代码
    • 显示屏代码
    • 其余代码
  • 过程中遇到的问题

写在前头

本人新手小白,写这个文章完全是纪念自己第一个小项目,如有不足之处还请多多指教,谢谢!
先上图。

软件配置

硬件部分

STM32F103c8t6的最小系统板为核心,配合HC-SR04超声波模块、SG90舵机以及一个0.96寸的IIC接口的OLED显示屏。当然还有若干的杜邦线及一个垃圾桶模型,模块固定部分可自行发挥。

1. 主控芯片

模块参数

1) 模块主要参数
① 使用电压:DC—5V
② 静态电流:小于2mA
③ 电平输出:高5V
④ 电平输出:底0V
⑤ 感应角度:不大于15度
⑥ 探测距离:2cm-450cm
⑦ 高精度 可达0.2cm

2) 模块引脚
超声波模块有4个引脚,分别为Vcc(电源+)、GND(接地)、 Trig(控制端)、 Echo(接收端);其中Vcc接上5V电源,GND接地, Trig(控制端)控制发出的超声波信 ,Echo(接收端)接收反射回来的超声波信 。

工作原理

a.单片机引脚触发Trig测距,给至少 10us 的高电平信 ;
b.模块自动发送 8 个 40khz 的方波,自动检测是否有信 返回;
c.有信 返回,通过 IO 输出一高电平,并单片机定时器计算高电平持续的时间;
d.超声波从发射到返回的时间.
计算公式:测试距离=(高电平时间*声速(340M/S))/2;

模块参数

1) 模块主要参数
① 死区设定:7us (7MHZ)
② 工作电压:4.8V-6V
③ 位置等级:1024级
④ 脉冲控制精度为2us
⑤ 尺寸:21.5mmX11.8mmX22.7mm
⑥ 重量:9克 (1kg=1公斤=2斤)
⑦ 无负载速度:0.12秒/60度(4.8V) 0.002s/度
⑧ 堵转扭矩:1.2-1.4公斤/厘米(4.8V)
⑨ 使用温度:-30~~+60摄氏度

2) 模块引脚
SG90模块有三个引脚,信 引脚(橙色)、Vcc(红色)及GND(棕色);在使用过程中,信 引脚与单片机输出PWM信 的引脚相连接,Vcc与电源+5V相连接,GND接地。

工作原理

SG90的工作原理是采用PWM控制的方式来进行舵机的操纵,主要是让板子产生一个20ms的脉冲信 ,以0.5ms到2.5ms的高电平来控制舵机的角度。以180度角度伺服为例,那么对应的控制关系如下:
0.5ms————-0度; 2.5% 对应函数中占空比为250
1.0ms————45度; 5.0% 对应函数中占空比为500
1.5ms————90度; 7.5% 对应函数中占空比为750
2.0ms———–135度; 10.0% 对应函数中占空比为1000
2.5ms———–180度; 12.5% 对应函数中占空比为1250
详细的舵机使用原理可参考《舵机使用基础(SG90模拟舵机和MG90S数字舵机为例)》

GPIO配置

SG90舵机 C8T6芯片引脚
GND(棕色) GND
Vcc(红色) 5V
信 线(橙色) PA1

3. OLED显示屏

模块简介

OLED,即有机发光二极管( Organic Light Emitting Diode)。 OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。如图:

SG90舵机代码

#include "sg90.h"void SG90_pwm_init(void){	GPIO_InitTypeDef GPIO_InitStructure;   	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;	TIM_OCInitTypeDef TIM_OCInitStructure;		/* 开启时钟 */	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	/*  配置GPIO 选择GPIOA_1 */	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;// PA1	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//推挽输出	GPIO_Init(GPIOA,&GPIO_InitStructure);		//TIM2定时初始化	TIM_TimeBaseInitStructure.TIM_Period = 199; //PWM 频率=72000/(199+1)=36Khz 	TIM_TimeBaseInitStructure.TIM_Prescaler = 7199;//设置TIM2预分频	TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//时钟分割:TDTS = Tck_tim	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//TIM2向上计数	TIM_TimeBaseInit(TIM2, & TIM_TimeBaseInitStructure)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月14日
下一篇 2021年4月15日

相关推荐