回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

#决赛#+城市寻宝ONE PIECE!! 简单

头像 小含糊online 2023.08.23 919 10

这次想要用行空板、sci数据采集模块,再加上北斗定位模块制作一个小游戏——城市寻宝。

image.png

材料清单

  • 行空板 X
  • SCI数据采集模块 X
  • 北斗定位模块 X
  • Arduino主控板 X
  • AD按键面板 X
  • 蓝牙音箱 X
  • 电磁锁 X
  • 云雀气象仪 X
  • 小盒子 X
  • 继电器 X

步骤1 Arduino部分(宝箱)

这里使用一个小盒子+电磁锁,用AD按键面板来触发解锁。

好玩之处在于AD按键面板有10个按键,需要根据行空板的提示找到对应的“钥匙”才可以打开宝箱。(后续设置自毁程序)

首先测试AD面板对应按键输出的模拟数值,然后根据需要,设置对应的“密码”(后续添加多位密码)

image.png

然后安装电磁锁、继电器、AD面板,这里我选用的是5v电磁锁,直接使用Arduino主控板的电,用充电宝供电。

程序很简单,如图所示

image.png

实物如图(时间紧迫,制作简陋……)

83ead9a33ddcf0b476bdac7b9c50438.jpg
937b5ebc6f48a8b815bb24c0d3ce566.jpg

步骤2 行空板部分

行空板作为寻找宝藏的助手,可以在显示屏显示当前位置在宝箱的哪个方位,应该朝哪个方向走,本来想加入距离的测算,但是使用经纬度测算距离,公式比较复杂,我又不想凑合着用两点距离公式,所以改成了方向。下面从程序开始、宝箱侦测和密码提示三个方面来展示程序。

一、程序开始

寻找宝箱,我一下子就想到了 ONE PIECE 所以在程序开始,我让画面展示出 ONE PIECE 的图片和音乐,按下A键,则开启寻宝模式。

image.png

(这里注意:如果使用SCI的数据,则不需要初始化北斗模块)

二、宝箱侦测

在寻宝模式下,接入的北斗定位模块会告诉玩家,想要找到宝藏,应该朝哪个方向走,根据经纬度关系,会在屏幕有两行,分别提示东南方向和西北方向,并且在靠近宝箱之后会发出响声提醒。

image.png

实物如图:

a7ea23f76e131d386403004c452c5cc.jpg

三、密码提示

在宝箱附近,行空板会给出密码的提醒,但是想要获得这个提醒本身,需要玩家,根据屏幕提示,进行解密!

image.png

实物如图:

60a0e099670f72ac431173559191d99.jpg

四、关于北斗定位模块与经纬度

实际操作中,有几点需要注意,以及我自己的一些思考:

1.北斗定位模块需要在户外开阔的地方才可以搜索到卫星信号;

2.宝箱和玩家的位置都可以通过北斗定位模块获取,但是两点间的距离不能简单地使用两点距离公式进行计算

3.我使用腾讯的位置服务,分别获取了工作单位和居住小区的经纬度,再使用在线经纬度距离计算工具得知:家距离学校大致0.35km,这个距离经度差值在0.001个单位,纬度在0.0001个单位,如下图所示:

image.png

所以我在程序中设定“如果玩家出现在宝箱附近经度±0.005且纬度±0.0005时,播放提示音与音乐”

image.png

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

# MindPlus
# Python
import sys
sys.path.append("/root/mindplus/.lib/thirdExtension/liliang-gravitysci-thirdex")
from dfrobot_rp2040_sci import *
from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from pinpong.board import Board
from unihiker import Audio
from unihiker import GUI
import math
import time

# 自定义函数
def XunZhaoBaoCang():
    DangQianJingDu = (float(SCI1.get_valueFloat0("Lon")))
    DangQianWeiDu = (float(SCI1.get_valueFloat0("Lat")))
    if ((DangQianJingDu - BaoCangJingDu) > 0):
        东西.config(text="东西方向:向西")
    else:
        东西.config(text="东西方向:向东")
    if ((DangQianWeiDu - BaoCangWeiDu) > 0):
        南北.config(text="南北方向:向南")
    else:
        南北.config(text="南北方向:向北")


Board().begin()
u_gui=GUI()
u_audio = Audio()
SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
    print("Initialization Sensor Universal Adapter Board failed.")
    time.sleep(1)
print("Initialization Sensor Universal Adapter Board done.")
背景=u_gui.draw_image(image="封面.png",x=0,y=0)
u_audio.start_play("onepiece.mp3")
u_gui.wait_a_click()
背景.config(image="背景2.jpg")
u_audio.stop_play()
buzzer.play(buzzer.JUMP_UP,buzzer.Once)
BaoCangJingDu = (float(108.894076))
BaoCangWeiDu = (float(34.165289))
DangQianJingDu = SCI1.get_valueFloat0("Lon")
DangQianWeiDu = SCI1.get_valueFloat0("Lat")
提示=u_gui.draw_text(text="注意看方向提示",x=0,y=0,font_size=20, color="#0000FF")
东西=u_gui.draw_text(text=(str("东西方向:") + str(" ")),x=0,y=140,font_size=20, color="#FF6600")
南北=u_gui.draw_text(text=(str("南北方向:") + str(" ")),x=0,y=180,font_size=20, color="#33FF33")
while not ((((-0.005 <= (DangQianJingDu - BaoCangJingDu)) and ((DangQianJingDu - BaoCangJingDu) <= 0.005)) and ((-0.0005 <= (DangQianWeiDu - BaoCangWeiDu)) and ((DangQianWeiDu - BaoCangWeiDu) <= 0.0005)))):
    XunZhaoBaoCang()
buzzer.pitch(523,2)
提示.config(text="ONE PIECE!!")
case=u_gui.draw_image(image="宝箱1.png",x=70,y=50)
东西.config(text="距离ONE PIECE")
南北.config(text="仅一步之遥")
提示2=u_gui.draw_text(text="提示:",x=0,y=210,font_size=20, color="#000099")
提示3=u_gui.draw_text(text="计算机世界不止有1",x=0,y=240,font_size=20, color="#000099")
u_audio.play("永久指针.mp3")

这两天下大雨,抽空补视频~

评论

user-avatar
  • 伦**

    伦**2024.03.19

    666

    1
    • 小含糊online

      小含糊online2024.03.19

      666

  • 小含糊online

    小含糊online2023.11.26

    补充一下,腾讯定位服务用的是“坐标拾取”功能https://lbs.qq.com/getPoint/

    0
    • 柳春晓

      柳春晓2023.09.04

      寻宝的时候不准,是因为拿在手里的时候定位模块的天线是垂在下面的,没有面向天空,所以精度会变差

      1
      • 小含糊online

        小含糊online2023.09.05

        原来如此!一开始设想加上一个电机,模拟雷达,把扫描宝箱位置的画面展现在行空板来着,受限于能力和精力,惭愧……

    • 恩果

      恩果2023.08.29

      增加一个标记宝藏位置的功能

      1
      • 小含糊online

        小含糊online2023.09.02

        是啊,如果能让行空板展示一个微型地图就更好了

    • hacker_

      hacker_2023.08.28

      666

      1
      • 小含糊online

        小含糊online2023.09.05

        666

    • 匿名

      匿名

      该评论已删除

      1
      • 小含糊online

        小含糊online2023.09.05

        okk