所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

#宅家#行空板行车记速仪

云天 云天 2022-06-05 16:52:55
projectImage
projectImage

【项目背景】

可以在小区内活动时,我们一定要出去锻炼,小区的活动范围小,一圈的距离短,骑车比较枯燥。自己做了一个“行车记速仪”。

【项目设计】

使用“行空板”加上“霍尔传感器”,记录骑行速度、骑行里程、完成设定里程进度、骑行时间。

【硬件安装】

1、安装永磁铁

projectImage

2、安装霍尔传感器

projectImage

3、布线

projectImage

4、安装行空板

projectImage
projectImage
projectImage
projectImage

【编写程序】

使用Mind+行空板专用版。

1、行空板界面初始化

projectImage
projectImage
projectImage

2、设定初始值

projectImage
projectImage

根据车轮半径计算车轮周长,以此值来计算骑行里程和骑行速度。

3、使用中断来判断转圈数和转一圈的时间

使用引脚24连接霍尔传感器,利用上升沿引发中断。

projectImage
projectImage

4、A、B键设置预设里程数

projectImage

4、点击按钮启动

projectImage

5、时钟计时

projectImage

6、实时更新数据

projectImage

7、完整程序

projectImage

【实地测试】

projectImage
projectImage
projectImage

【测试视频】

【Python代码】

代码 代码
	                    					#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI
import pygame
import time

# 事件回调函数
def button_click1():
  global JiSuBiaoShi
  if (JiSuBiaoShi == 0):
    JiSuBiaoShi = 1
    开始按钮.config(text="停止计速")
  else:
    QuanShu = 0
    JiSuBiaoShi = 0
    开始按钮.config(text="开始计速")
def on_buttona_click_callback():
  buzzer.play(buzzer.BA_DING,buzzer.Once)
  global SheDingLiCheng
  SheDingLiCheng = (SheDingLiCheng + 1)
  里程设定值.config(text=SheDingLiCheng)
def on_buttonb_click_callback():
  buzzer.play(buzzer.BA_DING,buzzer.Once)
  global SheDingLiCheng
  if (SheDingLiCheng > 0):
    SheDingLiCheng = (SheDingLiCheng - 1)
    里程设定值.config(text=SheDingLiCheng)
def event(pin):
  global QuanShu
  global CheSu
  global QuanZhouChang
  global JinXingShiJian
  global LiCheng
  QuanShu = (QuanShu + 1)
  CheSu = round(((QuanZhouChang / (pygame.time.get_ticks() - JinXingShiJian)) * 3600),2)
  LiCheng = round(((QuanZhouChang * QuanShu) / 1000),2)
  JinXingShiJian = pygame.time.get_ticks()


Board().begin()
u_gui=GUI()
pygame.init()
u_gui.on_a_click(on_buttona_click_callback)
u_gui.on_b_click(on_buttonb_click_callback)
HuoEr = Pin((Pin.P24))
HuoEr.irq(trigger=Pin.IRQ_RISING, handler=event)
JiSuBiaoShi = 0
CheSu = 0
LiCheng = 0
SheDingLiCheng = 0
QuanZhouChang = ((2 * 3.1415926) * 0.25)
QuanShu = 0
里程标签=u_gui.draw_text(text="里程:",x=0,y=0,font_size=20, color="#0000FF")
里程显示=u_gui.draw_digit(text="",x=120,y=10,font_size=20, color="#FF6600")
车速标签=u_gui.draw_text(text="车速:",x=0,y=45,font_size=20, color="#0000FF")
车速显示=u_gui.draw_digit(text="",x=120,y=55,font_size=20, color="#FF0000")
里程进度=u_gui.fill_rect(x=0,y=110,w=0,h=10,color="#FFFF00")
里程设定值=u_gui.draw_text(text="0",x=115,y=105,font_size=20, color="#CC33CC")
开始按钮=u_gui.add_button(text="开始计速",x=70,y=150,w=100,h=45,onclick=button_click1)
时钟=u_gui.fill_clock(x=120,y=260,r=50,color="#00FF00",fill_color="#0000FF")
开始按钮.config(onclick=button_click1)
JinXingShiJian = 0
Shi = 0
Fen = 0
Miao = 0

while True:
  time.sleep(1)
  时钟.config(h=Shi,m=Fen,s=Miao)
  Miao = (Miao + 1)
  if (Miao == 60):
    Miao = 0
    Fen = (Fen + 1)
    if (Fen == 60):
      Fen = 0
      Shi = (Shi + 1)
      if (Shi == 24):
        Shi = 0
  if (JiSuBiaoShi == 1):
    if (LiCheng > SheDingLiCheng):
      里程进度.config(w=240)
    else:
      里程进度.config(w=((LiCheng / SheDingLiCheng) * 240))
    里程显示.config(text=LiCheng)
    车速显示.config(text=CheSu)

	                    				
Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]