基于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进行处理,非常感谢!