17浏览
查看: 17|回复: 0

[M10项目] 行空板M10扩展板——行空AI体重秤

[复制链接]
本帖最后由 云天 于 2025-6-25 16:40 编辑

【项目背景】
  • 在当今这个注重健康与形象的时代,体重管理成为许多人尤其是爱美的女士们关注的焦点。她们通过严格控制饮食、坚持锻炼来维持理想的身材。每次站在体重秤上,数字的变化都会带来不同的情绪:体重增加时,难免感到沮丧,此时一句幽默的提醒和贴心的健康建议能带来安慰;体重下降时,一句真诚的表扬和鼓励则会让人充满动力,继续努力。因此,一个能够根据体重变化给予个性化反馈的智能体重秤,无疑是人们健康管理的好帮手。
【项目设计】
  • 本项目旨在通过技术手段,为传统体重秤赋予智能互动功能。我们将采用行空板M10、电池扩展板以及I2C重量传感器模块进行硬件搭建,并结合Kimi大语言模型和讯飞语音合成功能,实现一个智能体重秤系统。
  • 当使用者踏上体重秤时,I2C重量传感器模块会精准地获取体重数值,并通过行空板进行平均值运算,以确保数据的准确性。随后,系统将体重值上传至Kimi大语言模型,通过以下提示词获取反馈:
  1. {
  2.   "role": "system",
  3.   "content": """
  4.   你是一位专业的体重管理师。当用户称得的体重比之前增加时,首行请给出幽默的提醒,然后提供实用的健康建议;如果体重比之前减少了,请及时给予真诚的表扬和鼓励。请尽量将回答控制在100字以内,无需添加时效性说明或其他额外内容。
  5.   """
  6. }
复制代码
  • Kimi大语言模型会根据体重变化情况,生成针对性的文字反馈。随后,系统将该反馈文本上传至讯飞语音合成平台,生成语音音频。音频文件将通过行空板M10连接的蓝牙音箱播放,同时,反馈文本也会在行空板的屏幕上同步显示,为用户提供视觉与听觉的双重互动体验。
  • 通过这种创新的改造,智能体重秤不仅能够提供精准的体重数据,还能给予用户情感上的支持和健康管理建议,让每一次称重都成为一次积极的体验。
【硬件改造】
原体重秤四根数据线与I2C重量传感器模块的E+、E-、S+、S-引脚相连,I2C重量传感器模块与行空板M10的I2C引脚连接。
行空板M10扩展板——行空AI体重秤图1
【程序代码】
本代码是一个基于Python的智能体重秤项目,结合了硬件(行空板、重量传感器模块)和软件(OpenAI语言模型、讯飞语音合成)功能,用于测量体重并根据体重变化提供语音和文本反馈。
  • OpenAI语言模型(Kimi模型):根据体重变化生成个性化的文本反馈。
  • 讯飞语音合成(XfTts):将文本反馈转换为语音。
  • Pygame:用于播放语音文件。
______________________________________________________________________
#  -*- coding: UTF-8 -*-

# MindPlus
# Python
import openai
import json
import time
from df_xfyun_speech import XfTts
import pygame
import sys
sys.path.append("/root/mindplus/.lib/thirdExtension/nick-dfrobot_hx711_i2c-thirdex")
import time
from unihiker import GUI
from pinpong.board import Board
from DFRobot_HX711_I2C import *
import math
Board().begin()
u_gui=GUI()
hx711 = DFRobot_HX711_I2C(0x64)
while(hx711.begin()==0):
    print("Init faild!!")
appId = "*********"
apiKey ="************************************"
apiSecret = "*****************************************"
options = {}
tts = XfTts(appId, apiKey, apiSecret, options)
pygame.init()
pygame.mixer.init()
client = openai.OpenAI(api_key="sk-*****************************************", base_url="https://api.moonshot.cn/v1")
kimi_model = "moonshot-v1-8k"
kimi_temperature = 0.3
kimi_history = [
    {"role": "system", "content": """你是一位专业的体重管理师。当用户称得的体重比之前增加时,首行请给出幽默的提醒,然后提供实用的健康建议;如果体重比之前减少了,请及时给予真诚的表扬和鼓励。请尽量将回答控制在100字以内,无需添加时效性说明或其他额外内容。"""}
]

def kimi_chat(query, kimi_history, kimi_model, kimi_temperature):
    kimi_history.append({
        "role": "user",
        "content": query
    })
    completion = client.chat.completions.create(
        model=kimi_model,
        messages=kimi_history,
        temperature=kimi_temperature,
    )
    result = completion.choices[0].message.content
    kimi_history.append({
        "role": "assistant",
        "content": result
    })
    return result
def WaitPlayEnd():
    while pygame.mixer.get_busy():
       pass
    return   
# 自定义函数
textlen=18
def XianShi(WenBen):
    XinWenBen = ""
    XingShu = (math.floor((len(WenBen) / textlen)))
    XingHao=1
    for XingHao in range(1, XingShu+1, 1):
        print(XingHao)
        XinWenBen = XinWenBen + WenBen[((XingHao - 1) * textlen):(XingHao * textlen)] + "\n"
    print(XingHao)
    XinWenBen = XinWenBen + WenBen[(XingHao * textlen):len(WenBen)] +"\n"
    显示.config(text=XinWenBen)

标题=u_gui.draw_text(text="行空板AI体重称",x=20,y=30,font_size=20, color="#0000FF")
体重=u_gui.draw_digit(text="00.00",x=35,y=100,font_size=40, color="#0000FF")
显示=u_gui.draw_text(text="",x=0,y=150,font_size=10, color="#FF0000")
LeiJia = 0
JiShu = 0
bs=0
bs3=0
while True:
    if (LeiJia == 0):
        ZhongLiang = (hx711.read_weight(10))
    if (ZhongLiang > 500):
        if (LeiJia == 0):
            for i in range(10):
              ZhongLiang = (hx711.read_weight(10))
              体重.config(text=round(ZhongLiang / 10,2))
              time.sleep(0.2)
        ZhongLiang = (hx711.read_weight(10))
        if (JiShu < 10):
            JiShu = (JiShu + 1)
            print(JiShu)
            LeiJia = LeiJia + ZhongLiang / 10
            体重.config(text=round(ZhongLiang / 10,2))
            time.sleep(0.2)
        else:
            if bs==0:
               体重.config(text=round(LeiJia / 10,2))
               if bs3==0:
                   bs3=1
                   AIcontent=kimi_chat("这是第一次测体重,重量是"+str(round(LeiJia / 10,2))+"KG",kimi_history, kimi_model, kimi_temperature)
               else:
                   AIcontent=kimi_chat("本次体重"+str(round(LeiJia / 10,2))+"KG",kimi_history, kimi_model, kimi_temperature)
               XianShi(AIcontent)
               tts.synthesis(AIcontent, "speech.wav")
               pygame.mixer.Sound("speech.wav").play()
               WaitPlayEnd()
               bs=1
    else:
        if bs==1:
          bs=0
          JiShu = 0
          LeiJia = 0
          体重.config(text="0.0")
_________________________________________________________________________________________

代码逻辑流程
1.初始化硬件和软件
初始化行空板、重量传感器模块、语音合成模块、Pygame等。
设置OpenAI的API密钥和模型参数。
2.主循环
持续读取重量传感器的数值。
当检测到重量大于500时,开始测量体重。
计算10次测量的平均值,作为最终体重。
将体重值发送到OpenAI的Kimi模型,获取反馈文本。
使用讯飞语音合成将反馈文本转换为语音,并通过蓝牙音箱播放。
在行空板的屏幕上显示反馈文本。
3.体重变化处理
如果是第一次测量体重,调用Kimi模型生成初次反馈。
如果是后续测量,根据体重变化调用Kimi模型生成相应的鼓励或建议。
4.语音播放
使用Pygame播放语音文件,直到播放完成。
5.显示更新
在行空板的屏幕上实时显示当前体重和反馈文本。
6. 代码中的关键函数
kimi_chat:调用OpenAI的Kimi模型,根据体重变化生成反馈文本。
XfTts.synthesis:将文本转换为语音文件。
pygame.mixer.Sound:播放语音文件。
XianShi:将长文本分段显示在屏幕上。

【项目测试】
行空板M10扩展板——行空AI体重秤图2

行空板M10扩展板——行空AI体重秤图3

【演示视频】





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail