1338浏览
查看: 1338|回复: 1

[项目] 【行空板】运动小助手,行空板陪你一起记录运动次数

[复制链接]
本帖最后由 方老师好 于 2022-8-23 11:23 编辑

【行空板】运动小助手,行空板陪你一起记录运动次数

在日常锻炼过程中总是感觉很无聊,不能一直坚持下去?
在我运动的时候我经常在想,要是有一个机器人能够实时记录我的运动次数,在做完之后给我鼓励,还能根据我自己的需求调整运动目标那该多好啊!

行空板是一个非常强大的工具,我们可以通过其结合其他传感器实现日常生活中很多的创意作品,让我们一起来看一下吧。

我们通过一个行空板,碰撞模块,来实现一个运动记录屏。

任务目标

使用行空板来记录腹肌轮运动的次数,并可以设定运动次数,过程之中实时显示剩余次数,显示有趣的表情。完成之后给予提示和鼓励。
【行空板】运动小助手,行空板陪你一起记录运动次数图1【行空板】运动小助手,行空板陪你一起记录运动次数图2【行空板】运动小助手,行空板陪你一起记录运动次数图3



知识点

1、认识碰撞模块

2、学习使用Pinpong库控制碰撞模块

3、了解行空板GUI显示方法

4、学习使用行空板GUI制作界面

5、学习使用pingpong库初始化引脚

6、学习使用行空板自带按钮

7、学习if语句和循环语句进行实时显示运动次数

材料清单

硬件清单:



【行空板】运动小助手,行空板陪你一起记录运动次数图4

软件使用:Mind+编程软件x1


知识储备

1、什么是碰撞模块

是一款微动碰撞开关。该碰撞传感器采用惯性式机械结构,端口兼容传感器扩展板,用于碰撞检测、限位等。



2、Pinpong库连接引脚记录碰撞开关是否按下

Pinpong库
  1. from pinpong.board import Board,Pin # 导入Pinpong库
  2. Board("UNIHIKER").begin() #初始化,选择板型,不输入板型则进行自动识别
  3. pin1 = Pin(Pin.P24, Pin.IN)
  4. if pin1.read_digital()==0:
  5.     #这时碰撞模块已经按下,执行相应的操作
  6. else:
  7.     #这时没有按下,执行相应的操作
复制代码


其中“P24”指的是板子上碰撞版块所连接的引脚,“pin1=Pin(Pin.P24,Pin.In)”是将24号引脚以数字输入的方式输入,这时我们通过pin1.read_digital( )方法检测被按下的时候数字是多少(数字输入只有0和1)。


3、什么是行空板的GUI


行空板作为一个python学习工具,有一个专门的unhiker第三方库,自带了一套适配行空板显示界面的方法。具体教程可以参考以下链接:

https://mc.dfrobot.com.cn/thread-312557-1-1.html



4、如何设置运动目标、并实时更新运动数据


首先要根据实际运动设定目标值,比如在本项目中我设定了两个模式,简单模式(目标20个)和困难模式(目标50个),现在就可以用两个变量保存

首先要根据实际运动设定目标值,比如在本项目中我设定了两个模式,简单模式(目标20个)和困难模式(目标50个),现在就可以用两个变量保存。
sport_goal1=20
sport_goal2=50
在按下确认选择按钮之后,还需要一个变量
cur_sport #现在的运动目标

利用这三个现有的变量,就可以结合行空板自带的按钮实现之后的操作。

  1. if button_a.is_pressed()==True:
  2.         cur_sport=sport_goal1
  3.         text_sport.config(text ="开始")
复制代码
  1. if button_b.is_pressed()==True:
  2.         cur_sport=sport_goal2
  3.         text_sport.config(text ="开始")
复制代码

以上代码就可以实现按下A键,将当前的运动模式设定为goal1(简单模式),当按下B键,将当前的运动模式设定为goal2(复杂模式)
  1. if cur_sport-count==0:
  2.         text_sport.config(text = "恭喜你完成",font_size=20)
  3.         time.sleep(2)
  4.         break
复制代码


以上代码可以实现,当碰撞模块受到碰撞时,记录的变量增加1,并且把文本实时更新。当完成目标之后,就提示“恭喜你完成”。

5、完善程序,增加趣味性。
  •     if 0.6*cur_sport<=cur_sport-count<=0.8*cur_sport:
  •         emj1.config(emoji="Nerve")
  •     elif 0.4*cur_sport<=cur_sport-count<0.6*cur_sport:
  •         emj1.config(emoji="Sweat")
  •     elif 0<=cur_sport-count<0.4*cur_sport:
  •         emj1.config(emoji="Angry")

复制代码
以上程序可以根据完成总量,来变化显示的表情。

6、以下是完整的代码
  • from unihiker import GUI   # 导入unihiker库中的GUI模块
  • import time  # 导入time库
  • from pinpong.extension.unihiker import *
  • from pinpong.board import Board,Pin
  • Board().begin()
  • gui = GUI()  # 实例化GUI类,创建gui对象
  • # 显示填充矩形
  • gui.fill_rect(x=75, y=30, w=90, h=30, color="#00ff00") # 显示第一个填充矩形
  • gui.fill_rect(x=0, y=70, w=240, h=30, color="#00ff00") # 显示第二个填充矩形
  • gui.fill_rect(x=50, y=170, w=150, h=120, color="#00ff00") # 显示第二个填充矩形
  • # 显示文字
  • text1 = gui.draw_text(x=120, y=30, text='运动助手:', origin = 'top')
  • text2 = gui.draw_text(x=120, y=70, text='请按A\B选择模式', origin = 'top')
  • text3 = gui.draw_text(x=120, y=100, text='A简单,B困难', origin = 'top')
  • text_sport = gui.draw_text(x=120, y=180, text='', font_size=60, origin = 'top') # 显示此模式的次数
  • # 显示表情
  • emj1 = gui.draw_emoji(x=82, y=120, w=100, h=100, emoji="Smile", duration=0.1) # 显示初始表情
  • #运动次数
  • sport_goal1=20
  • sport_goal2=50
  • cur_sport=0
  • pin1 = Pin(Pin.P24, Pin.IN)
  • count = -1
  • while True:
  •     if button_a.is_pressed()==True:
  •         cur_sport=sport_goal1
  •         text_sport.config(text ="开始")
  •         time.sleep(0.5)
  •         text_sport.config(text = cur_sport)
  •     if button_b.is_pressed()==True:
  •         cur_sport=sport_goal2
  •         text_sport.config(text ="开始")
  •         time.sleep(0.5)
  •         text_sport.config(text = cur_sport)
  •     if (pin1.read_digital() == 0):
  •         count=count+1
  •         text_sport.config(text = cur_sport-count)
  •         time.sleep(0.5)
  •     if 0.6*cur_sport<=cur_sport-count<=0.8*cur_sport:
  •         emj1.config(emoji="Nerve")
  •     elif 0.4*cur_sport<=cur_sport-count<0.6*cur_sport:
  •         emj1.config(emoji="Sweat")
  •     elif 0<=cur_sport-count<0.4*cur_sport:
  •         emj1.config(emoji="Angry")
  •     if cur_sport-count==0:
  •         text_sport.config(text = "恭喜你完成",font_size=20)
  •         time.sleep(2)
  •         break
  •     time.sleep(0.1) # delay 0.1 秒

复制代码
7、视频演示








TueAugust-202208167959..png
TueAugust-202208161026..png

小企鹅  初级技匠

发表于 2022-8-23 15:46:31

厉害厉害
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail