×

使用CircuitPython对Seeeduino Xiao进行编程上午开源项目

消耗积分:0 | 格式:zip | 大小:0.19 MB | 2022-11-18

王凯

分享资料个

描述

想成为一只绝望的霸王龙,准备好带着喜悦和兴奋去​​探索奇妙的 2-D、8 位、二进制彩色谷歌浏览器世界吗?因此,请确保您每天锻炼膝盖以跟上高分。

该项目在MLH组织的Who Wants to be Hackionaire黑客马拉松中获得了 Digi-Key 颁发的最佳硬件黑客类别奖

第一步:零件

我使用 CircuitPython 对 Seeeduino Xiao 进行了编程,但它也与 Arduino 兼容。您可以选择任何支持 CircuitPython 的 ATSAMD21 微控制器板来完成这个项目。我选择Xiao是因为它的体积很小,适合可穿戴项目。

注:对于通用 I/O 引脚:MCU 的工作电压为 3.3V。连接到通用 I/O 引脚的电压输入高于 3.3V 可能会导致芯片损坏。
对于电源引脚:内置的DC-DC转换器电路能够将5V电压变为3.3V,允许通过VIN-PIN和5V-PIN为设备提供5V电源。

Adafruit LIS3DH 是一款三轴加速度计,其库支持 I2C 和 SPI,但我们将在此项目中使用 SPI 接口。该板的更新版本是黑色的, 两侧都有 STEMMA QT 连接器SparkFun Qwiic I2C 连接器。

我最初在面包板上制作了我的项目,然后我焊接在 PCB 上的母头上以改善外形。如果你愿意,你可以直接焊接电路板,因为它有齿形引脚并且不会太突出。

第二步:概念

所以这个项目主要包括3个部分:

  • 传感器(LIS3DH 加速度计)
  • 逻辑单元(ATSAMD21)
  • 输出单元(LED 和键盘)

加速度计用于检测由于运动引起的人的加速度变化。当一个人跳起来或蹲下时,他/她会产生相对加速度来这样做。我们通过取 X、Y 和 Z 轴的绝对值来测量加速度的变化,因为无论我们向上还是向下,变化都是正的。

项目的输出单元发送命令按下向上箭头键,红色 LED 亮 500 毫秒。同样,如果它检测到一只鸭子,板子按下向下箭头键并打开蓝色 LED 500 毫秒。print在两者之间添加了一些语句,但这仅用于调试目的,可以忽略。由于Seeeduino Xiao 在撰写本文时不支持 Mu 的串行控制台,因此您可以使用PuTTY或 Arduino 的串行监视器之类的应用程序来查看 X、Y 和 Z 轴的值。

第三步:理解代码

# code.py
"""
Project Name: Jump Yo' Rex
Author: Advik Singhania
Created On: 28th November, 2020; 07:48 PM IST

Make sure to copy the adafruit_hid library folder and
adafruit_lis3dh to the /lib folder of your CIRCUITPY drive.
I've connected a red LED to pin D4 to indicate jumps and
a blue LED to pin D0 to indicate ducks.
This source code has been tested for Seeeduino Xiao and can also work on CircuitPython supported boards.
"""

import time
import board
import digitalio
import busio
import adafruit_lis3dh
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
from adafruit_hid.keycode import Keycode

# Configurnig pins for the SPI connection:
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
cs = digitalio.DigitalInOut(board.D5)  # Set to appropriate CS pin!
int1 = digitalio.DigitalInOut(board.D6)  # Set to correct pin for interrupt!
lis3dh = adafruit_lis3dh.LIS3DH_SPI(spi, cs, int1=int1)

# Initializing Keyboard:
keyboard = Keyboard(usb_hid.devices)
keyboard_layout = KeyboardLayoutUS(keyboard)

time.sleep(1)

# Setting up LEDs for Jump(ledj) and Duck(ledd)
ledj = digitalio.DigitalInOut(board.D4)
ledj.direction = digitalio.Direction.OUTPUT
ledd = digitalio.DigitalInOut(board.D0)
ledd.direction = digitalio.Direction.OUTPUT

# Printing is for debugging, you can comment the print statements if you want.
print("Waiting for action...")
while True:
    ledj.value = False  # Turning Off LEDs
    ledd.value = False

    x, y, z = lis3dh.acceleration  # Getting values for the acceleration in x, y and z axes
    x, y, z = abs(x), abs(y), abs(z)  # Taking the absolute of the values since the change in relative acceleration will always be positive
    # print(x, y, z)

    # Setting up default position:
    if 8 < x < 10:
        pos = x
    elif 8 < z < 10:
        pos = z
    else:
        pos = y

    # Detecting jumps and ducks:
    if pos > 11:  # You can change these values according to your sensitivity
        print(x, y, z)
        keyboard.press(Keycode.UP_ARROW)  # "Press"...
        keyboard.release_all()
        print('Jumped')
        ledj.value = True
        time.sleep(0.5)
    elif pos < 8:  # You can change these values according to your sensitivity
        print(x, y, z)
        keyboard.press(Keycode.DOWN_ARROW)  # "Press"...
        print('Ducked')
        ledd.value = True
        time.sleep(0.5)
        keyboard.release_all()
        time.sleep(0.5)

    time.sleep(0.05)

在源代码中,我们首先导入板子内置的必要的标准库,如time、 。然后要使用其他硬件,我们手动添加和库以使功能正常工作。我们使用串行外设接口(SPI)连接在加速度计和微控制器板之间进行通信,因此我为此设置了引脚配置。boarddigitalioadafruit_bus_deviceadafruit_hidadafruit_lis3dh

然后我们初始化我们将使用什么样的键盘,这是美国标准布局。有 1 秒的延迟,以便在程序开始进一步执行之前准备好。ledj(红色 LED)用于指示何时发生跳跃,而ledd(蓝色 LED)用于指示何时发生鸭子。

while循环由需要连续运行的所有逻辑组成。该板通过检查哪个轴的值在重力常数(g ~ 9.8 m/s²)范围内来检查默认位置。然后它计算加速度的变化是否大于 10(大约 g)。此时,您可以根据自己的要求查看和校准 if 条件下的值。如果pos值大于 11,则执行跳转(向上箭头和红色 LED),如果小于 8,则执行鸭子(向下箭头和蓝色 LED)。

如果您还没有,请开始使用CircuitPython 。您需要在 PC 上安装Mu (CircuitPython 的首选编辑器),并确保您正在使用的板上运行最新版本的 CircuitPython。更多信息可以在这里、那里任何地方找到。

现在从 GitHub 存储库下载 code.py 和 lib.zip 后,解压缩 lib.zip 并将 lib 文件夹复制到电路板的 CIRCUITPY 驱动器中。断开 Internet 并打开 Google Chrome T-Rex 游戏。

现在将code.py复制到驱动器的父目录中。

注意:一旦您将 code.py 复制到 CIRCUITPY 驱动器中,代码就会开始执行,因此请关闭您认为重要的窗口,否则它们可能会损坏。因为项目将控制向上和向下箭头键。

第四步:接线

 
 
 
pYYBAGN17WyAT6cfAAF4UmUT5Ds262.png
 
1 / 2示意图
 

上传代码后,断开电路板并将组件连接到面包板上,如上图所示。Xiao 和 LIS3DH 之间的连接非常简单:

  • 板 3V传感器 Vin
  • 板 GND传感器 GND
  • 板 SCK传感器 SCL
  • 板 MOSI传感器 SDA
  • 板 MISO传感器 SDO
  • 板 D5传感器 CS
  • 板 D6传感器 INT

将红色 LED ( ledj) 的正极引线通过 220 欧姆电阻连接到引脚 D4,蓝色 LED ( ledd) 的正极引线通过 220 欧姆电阻连接到引脚 D0。将 LED 的接地线连接到公共 GND。

你完成了!

pYYBAGN17XKAA5xuAA1z6-ui5c430.jpeg
焊接 PCB 连接
 

第五步:完成。下一步是什么?

 

您可以将此设备佩戴在腰部或腰部以上,以便 T-Rex 跟踪您的动作。您还可以像我一样将组件焊接在通用 PCB 上以改善外形尺寸并为其制作一个案例。该项目仍然使用 USB 数据线为计算机供电并与计算机交互,因此我计划改用蓝牙,并会尝试改善交互超时。很快,里面的霸王龙就会摆脱束缚,四处游荡,跳跃并发疯。

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !