ESP32图形化推力计
14272024/08/06原创 电子技术 IP:天津
关键词
推力计
Labview

主控ESP32-wroom-32 

大概的流程图 这里选择Labview因为后面板编程生成图形化的前面板

并且程序也好修改 用VISA串口和透传发送AT指令控制ESP32 用Labview的波形

图表来显示推力曲线,设置文件的保存路径记录推力数值和对应时间

流程.png

Labview VISA的链接,安装labview对应版本即可

XXXXXXXXXXXXXXXXXX/en/support/downloads/drivers/XXXXXXXXXXXXXXXXXXXml

需要的模块

1b80cadd1e0ecd8430a6bb90e2f744c.jpg

HX711 HC-12x2 ESP32 继电器x1

这是Labview的图形界面

IMG_20240805_220005.jpg

设置串口号, 波特率,点击连续运行,如果一切正常波形表会出现HX711采集的推力数据,左侧推力数值滚动,先设置保存推力数值的路径,按下点火按键记录发动机工作时间,并和推力记录在路径的文件中,默认记录20秒,记录完成按下终止按键

接下来是ESP32部分,我这里用的Thonny软件,程序大体流程 IMG_20240805_222712.jpg

HX711的DT接ESP32的GPIO13,SCK接GPIO4

HC-12模块的TXD接GPIO16,RXD接GPIO17

继电器模块接GPIO15(买的HX711据说采样可以到80HZ,实测到Labview只有20HZ了)

程序代码

attachment icon main.py 2.66KB PY 3次下载

Labview的代码

attachment icon Labview推力计V1.0.vi 53.09KB VI 3次下载

测试效果

连接ESP32和串口模块

c7c31f1fdbf7e602e3583563d59413b.jpg 7061cc044860a2606167b7d3b8e1f01.jpg

推力收集,点火

Continuous Serial Read 01.vi 2024-08-06 08-00-28.mp4  点击下载

保存的推力数据文件 推力数据文件.png

等我会熬KNSB后把用这个的试车视频补上

第一次写这种文章,感觉有很多不严谨的地方,有Bug还望各位指出

来自:电子信息 / 电子技术动手实践:实验报导
9
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
1427 作者
4个月11天前 IP:天津
935560

补充一下后面板程序 Labview.png

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1427作者
4个月11天前 修改于 4个月10天前 IP:天津
935561
from machine import Pin
import utime
from machine import UART

# Pin configuration
HX711_SCK = Pin(4, Pin.OUT)
HX711_DT = Pin(13, Pin.IN)
known_weight = 100  # Known weight in grams
uart = UART(2, 115200, rx=16, tx=17)
fire_struct = Pin(15, Pin.OUT, Pin.PULL_DOWN)

def HX711_Read():
    count = 0
    HX711_DT.init(Pin.IN)

    # Ensure DT line goes low
    timeout = utime.ticks_ms() + 1000  # 1 second timeout
    while HX711_DT.value() == 1:
        if utime.ticks_ms() > timeout:
            print("Timeout waiting for HX711 to go low")
            return None

    for _ in range(24):
        HX711_SCK.value(1)
        utime.sleep_us(1)
        count = count << 1
        HX711_SCK.value(0)
        utime.sleep_us(1)
        if HX711_DT.value() == 1:
            count += 1

    HX711_SCK.value(1)
    count = count ^ 0x800000  # Convert to signed integer
    utime.sleep_us(1)
    HX711_SCK.value(0)
    utime.sleep_us(1)

    return count

def HX711_Tare():
    tare_value = 0
    for _ in range(10):
        reading = HX711_Read()
        if reading is None:
            return None
        tare_value += reading
        utime.sleep(0.1)
    tare_value /= 10
    return tare_value

def Calibrate_Scale(tare_value, known_weight):
    raw_value = 0
    for _ in range(10):
        reading = HX711_Read()
        if reading is None:
            return None
        raw_value += reading
        utime.sleep(0.1)
    raw_value /= 10
    return (raw_value - tare_value) / known_weight

def Get_Weight(tare_value, calibration_factor):
    raw_value = HX711_Read()
    if raw_value is None:
        return None
    weight = (raw_value - tare_value) / calibration_factor
    return weight

if __name__ == "__main__":
    fire_struct.value(0)
    fire_Value=0
    tare_value = HX711_Tare()
    if tare_value is None:
        print("Failed to tare the scale")
    else:
        calibration_factor = Calibrate_Scale(tare_value, known_weight)
        if calibration_factor is None:
            print("Failed to calibrate the scale")
        else:
            print(f"Calibration Factor: {calibration_factor}")

            while True:
                weight = Get_Weight(tare_value, calibration_factor)
                if weight is not None:
                    uart.write(f"Weight: {weight:.2f} grams\n")
                else:
                    print("Failed to read weight")
                    
                # Check for UART data
                if uart.any():
                    state = uart.read().strip()
                    print(f"Received: {state}")
                    if state == b'1':
                        fire_Value = not fire_Value
                        fire_struct.value(fire_Value)
                utime.sleep(0.05)


引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
xljxlj
4个月17天前 IP:广东
935176

ESP32自身的FLASH可以用来记录数据从而省略无线通讯部分

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1427作者
4个月17天前 IP:天津
935184

我打算是实时采集推力曲线,翻了很久的发现论坛上没有人做labview的程序,顺手把这个补上了

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小叮当0312
4个月17天前 IP:河南
935186

有意思,支持 sticker

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
冇脖长颈鹿
4个月11天前 IP:江苏
935563

支持,不过科创的文章里是可以发代码的,不需要截图了

引用
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1427作者
4个月10天前 IP:天津
935604

有个问题,就是手机APP版看图片会很糊,保存到本地才清楚,电脑端就没这个问题 IMG_20240813_131935.jpg IMG_20240813_131946.jpg

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
helium
4个月8天前 修改于 4个月6天前 IP:广东
935758

哪天你试试写一个时间分辨率在微秒级别的计时器,加一个间距数据输入可以换算出速度值,兼顾通断电触发和高低电平触发的多功能(可以通过跳线帽去选择,可以兼顾测燃速、爆速、弹丸出膛速度(适合电炮、弹弓、弓箭一类),这个适用范围更广,受众面要大很多。

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1427作者
4个月8天前 IP:天津
935765
引用helium发表于8楼的内容
哪天你试试写一个时间分辨率在微秒级别的计时器,加一个间距数据输入可以换算出速度值,兼顾通断电触发和高...

目前实力不允许 sticker

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
1427
进士 机友 笔友
文章
6
回复
207
学术分
0
2022/11/05注册,16时14分前活动

高中牲不想上学

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:天津
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}