243|0

22

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【2024 DigiKey创意大赛】+ 用于车速估算的空速表制作 [复制链接]

  本帖最后由 顺竿爬 于 2024-10-13 13:31 编辑

一、作品简介

2SMPP03是一款气压计,这款气压计在外接空速管的基础上,可以作为空速计来使用。一般此类应用都会被应用在航模上,而我想到这种用法其实在汽车工业上也可以大有作为。
汽车在隧道等GPS信号不佳的地方行驶时,对于里程和位置的估计,只能依靠转速表,陀螺仪,加速度计等传感器进行测量。这些传感器都有一个共同的问题,就是测不准,会受到其他因素干扰:比如里程表会受到胎压影响,惯性传感器会受到路面情况干扰等。因此需要多个传感器参与,使用不同的方法来测量,并将数据通过算法进行融合,以此减少误差。增加空速计,可以增加另一个观测速度及速度变化的途径,因此我们可以在极低成本的情况下,增加速度及位置估计的准确度。

 

整个项目的硬件部分展示:

 

二、系统框图

整个项目我使用购买的2SMPP03模组与自己设计的电路板制作出空速计模块,用ESP32-C6-DEVKITC-1-N8上的ADC外设读取空速计读数,并经过计算转换为车速,最后再通过串口输出至使用树莓派zero2w制作的车载电脑,完成车速的图形化显示。

 

三、各部分功能说明

首先是硬件制作。2SMPP03空速计由于是最基础的电阻网络结构,因此还需要不少模拟电路外设才可以正常工作。

外设电路设计一共需要三个运放。首先是仪表放大器,需要把2SMPP03输出的差分电压进行放大:

 

电阻R8的作用是用来调节放大倍数。

 

另外还需要一个电压跟随器,用来给仪表放大器提供参考电压。参考电压我设置为1/2*vcc,这样可以做到正负压双向测量。

最后一个运放是用来做一个恒流源,给2SMPP03提供恒流供电。这两个运放我使用一个双运放来完成。

 

 

在2SMPP03电源回路上也接一个变阻器,用来调整恒流值大小:

 

这样电路原理图部分设计就完成了,绘制成电路板如下:

 

 

下面开始写ESP32-C6-DEVKITC-1-N8上的代码。代码读取ADC数据,进行计算后通过串口发送出去。这里主要需要注意的是计算方法。

首先根据2SMPP03规格书,可以找到电阻与气压的关系:

 

 

通过调整横流电阻,把电流调整到100uA,就可以得到上面的线性关系。

接着再通过调整仪表放大器的放大倍率,来使得输出电压匹配ESP32-C6-DEVKITC-1-N8的ADC量程范围。

最后我们找到风压与风速的关系:

wp = 0.5*r*(v^2)*1000/g

其中wp是风压,r是空气重度,g是重力加速度,v是风速。调整一下公式,就可以得到风速的计算公式:

v = (wp / 1000 / (0.5 * r / g))^0.5

使用这个公式,就可以完成代码编写:

void setup() {
  Serial.begin(115200);
}

void loop() {
  unsigned int sensorValue = analogRead(4);
  if (sensorValue < 920) {
    sensorValue = 920;
  } else if (sensorValue > 1500) {
    sensorValue = 1500;
  }
  unsigned int pressure = map(sensorValue, 920, 1500, 0, 390);
  float volecity = sqrt((float)pressure / 1000 / (0.5 * 0.01225 / 9.8));

  // print the results to the Serial Monitor:
  // Serial.print("sensor = ");
  Serial.println(volecity);


  // wait 2 milliseconds before the next loop for the analog-to-digital
  // converter to settle after the last reading:
  delay(100);
}

 

按照设计焊接好电路板:

 

 

我使用的是4号引脚,属于ADC1外设。因此接线时注意把信号线接到4号脚上

 

最后是树莓派上位机的图形化显示源码。使用python自带的库就可以完成全部设计。

import tkinter as tk
from tkinter import Canvas
import serial
import math


root = tk.Tk()
root.title("SPEED")


ser = serial.Serial("/dev/ttyUSB0", 115200, timeout=1)


canvas = Canvas(root, width=400, height=400)
canvas.pack()


canvas.create_arc(
    50, 50, 350, 350, start=225, extent=-270, outline="lightgrey", width=10
)


for i in range(0, 26, 5):
    angle = 225 - (i / 25) * 270
    x = 200 + 140 * math.cos(math.radians(angle))
    y = 200 - 140 * math.sin(math.radians(angle))
    canvas.create_text(x, y, text=str(i), font=("Arial", 10))


needle_length = 100
needle = canvas.create_line(200, 200, 200, 100, fill="red", width=3)



def update_gauge(speed):
    angle = 225 - (speed / 25) * 270
    x = 200 + needle_length * math.cos(math.radians(angle))
    y = 200 - needle_length * math.sin(math.radians(angle))
    canvas.coords(needle, 200, 200, x, y)



def read_serial():
    try:
        line = ser.readline().decode("utf-8").strip()
        if line:
            speed = float(line)
            if 0 <= speed <= 25:
                update_gauge(speed)
    except Exception as e:
        print(f"Error reading serial: {e}")

    
    root.after(50, read_serial)



read_serial()


root.mainloop()

 

将C6和树莓派的TX/RX交叉连接,并连接地线后,在树莓派上运行程序,最终显示效果如下:

 

四、作品源码

PCB设计文件: ProDoc_2SMPP03_2024-10-13.epro (48 KB, 下载次数: 0)
ESP32-C6-DEVKITC-1-N8代码: AnalogOutSerial.ino (620 Bytes, 下载次数: 0)
树莓派zero2W代码: speed.py (1.25 KB, 下载次数: 0)

 

五、作品功能演示视频

10月13日

 

六、项目总结

项目的所有代码及设计文件均已在上面上传,所有的细节都写在本文中,下面附上word版的项目报告。

DigiKey_contest_2024_word.doc (570.5 KB, 下载次数: 0)

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
Luminary系列所有型号的选型工具

Luminary的函数库和图形库,上面集成的东西很丰富,很多工程师都会喜欢。 可以按着对外设的需求,来选。想要USB,就点“USB ...

单片机操作2.4寸TFT彩屏的源码与大家共享!含SD驱动!

元旦在淘宝上,花39个银子,淘了块2.4寸的TFT彩屏模块,,用店主提供的代码,用STC的51单片机,驱动起来,也显示图片了,发帖庆祝 ...

[Open Source]YS18-3荧光管电子时钟100%开源放送(软件源工程及代码.硬件原理图)

YS18-3的荧光管电子时钟曾是饱含了我所有期待的完美的荧光管电子时钟,它的功能比较完备,也受到了很多DIYer的关注与支持。 ...

Helper2416开发板移植ucgui(嵌入式linux运行ucgui)

本帖最后由 Gyroxp 于 2015-1-30 17:28 编辑 一些简单的应用,使用ucgui作为图形界面可能更加方便快捷。得益于ucgui良好 ...

求推荐:想买本C8051F单片机的书!

需要用C8051F580单片机开发产品。我做软件,C语言。 想买本 这方面的书。求推荐! 谢谢!

MSP430F149 I/O口控制

所谓IO口控制就是控制单片机的端口输出0或1,或者读出端口的状态,也就是输入和输出。 先说输出。想让MSP430单片机的端口 ...

无线连接技术选择指南

选择合适的无线连接技术从一开始就是一个关键的设计决策。这决定了应用的协议互操作性、距离、稳健性和用例。本选择指南将引导 ...

【花雕动手做】有趣好玩的音乐可视化系列小项目(16)--热干胶棒棒灯

偶然心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不 ...

颁奖:是德科技感恩月—遇见KeysightCare - 贵重仪器安全避坑指南

颁奖:是德科技感恩月—遇见KeysightCare - 贵重仪器安全避坑指南 名单详见下方列表。本颁奖贴只公布获奖名单,礼品 ...

【STM32U5A5ZJ开发板】USB设备及VCP通讯测试

STM32U5A5ZJ 上的USB是自带PHY的OTG USB设备,不但具有电源管理还具有设备管理功能,使用的接口也是Type C接口。 794377 ...

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表