0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread开发电子魔方实现功能

RTThread物联网操作系统 来源:RTThread物联网操作系统 作者:tobot 2022-07-15 11:31 次阅读

一、应用背景


魔方,又叫鲁比克方块(Rubik’s Cube),是匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授发明的机械益智玩具,由若干个积木块组成,积木块之间通过卡榫契合,能做到“组”的相对位置改变,从而构成各种形状的花纹,基本的玩法就是通过旋转,打散各面色块后用最快速度还原。魔方的设计初衷是用来认识空间组成和结构的教具,后来成为风靡全球的玩具,形状从原始的正方体发展出球型、钻石型、粽子型等异形,阶数从最早的三阶扩充到三十阶以上。

魔方竞赛也成为国际比赛项目,通过世界魔方协会比赛的认证成绩甚至可以记载入世界纪录当中。

传统魔方采用物理结构契合,高阶魔方使用时旋转次数多,要求速度快、精度高,很容易磨损导致性能下降无法使用(我自己就有一天玩坏一个高阶魔方的经历)。基于此,试图将魔方功能“电子”化,减少机械磨损。

二、实现功能


本设计分为两个部分:电子魔方和GUI。

电子魔方基于RT-Thread开发,使用N32G457驱动WS2812板,通过点亮WS2812灯珠,实现魔方转动效果。本次开发所用WS2812板为8*8的板卡,共用了5块,搭成正方体形状(留出底面),共计320颗灯珠,用于模拟一个8阶魔方。


GUI为纯软件开发,在电脑上运行,可以通过鼠标或键盘操作,实现魔方的转动。为配合电子魔方,设计了界面,8阶魔方共有24个方向可转动(反向可以通过旋转3次实现),设计24个按钮,由于高阶魔方还原难度较高,因此还预留了“一键还原”功能。


a744d104-0365-11ed-ba43-dac502259ad0.png
图四 GUI

三、开发板和RT-Thread使用情况概述

使用N32G45XVL-STB开发板,该开发板MCU芯片型号为国民技术的N32G457VEL7,LQFP100管脚封装,板卡把所有GPIO都引出连接到J1,J2和J12插针上,非常便于开发和调试,但在本项目中,仅使用了PA7(SPI0的MOSI接口)。

a75300f8-0365-11ed-ba43-dac502259ad0.jpg
图五 N32G45XVL-STB开发板

安装的RT-Thread Studio,版本: 2.1.5(构建ID: 202201191915),其上已经自带了RT-Thread模块,直接从SDK中拖取了Nations的n32g45xvl-stb板,并使能了其SPI功能,所用SPI为SPI0。


用于呈现的WS2812,采用购买的88模块成品,自己拼装成立方体,考虑到底面没有人会去看,因此直接空出来。


WS2812的实现原理比较简单,就是通过输入特定长度的高低电平,驱动若干颗灯珠,每个颜色比特传输数据需要1.25us,可以略微超频(甚至有的datasheet中表示可以超频600ns,实测做不到的),在本项目中,采用的是SPI驱动,将其设置为1.2us/颜色比特使用,分别通过SPI传输ffc0、f000作为其0、1码表示。


a75fff42-0365-11ed-ba43-dac502259ad0.jpg
图六 WS2812的datasheet

四、硬件框架

其硬件结构非常简单,采用5块88的WS2812灯板串接作为输出,将其搭建成立体形状,串接各面的板和板之间串接顺序为顶、前、右、后、左,在平面展开图中,每块灯板上的灯珠的顺序为从左到右,从上到下依次递增,共320颗,在最初设计和调试时,使用了外部供电,后省略,直接由板上的5V从USB接口取电。大致框架如下:


a774ad34-0365-11ed-ba43-dac502259ad0.jpg
图七 硬件框架示意图


五、软件框架


由于上位机和下位机分别开发,上位机所用语言为python,基于windows环境运行(理论上移植linux也很简单),下位机使用c开发,在N32开发板上运行,其操作/执行流程如下:


a78400ae-0365-11ed-ba43-dac502259ad0.jpg
图八 软件业务流程


六、软件模块说明


1、定义

由于本项目使用pin资源较少,因此没有修改drv_gpio.c文件中的定义

define N32F10X_PIN_NUMBERS 64

而是直接在代码中定义了所用的pin脚和相关资源

define SPI1_BUS_NAME “spi1”

define SPI1__DEVICE_NAME “spi10”

define SPI1_NCS_PIN 29 //PA4

如之前所述,魔方最重要的就是色块的变化,各个时期和地方的版本虽然有所区别,但主流采用红、黄、蓝、绿、白、橙六种颜色,目前主要有两种配色:世界版(WCA大赛所用配色)和日版(Rubik教授最初研发时的配色)。
a7944e28-0365-11ed-ba43-dac502259ad0.png
图九 颜色要求


对于每个面具体的颜色,采用的是原色大辞典中标准色号:


a7a175a8-0365-11ed-ba43-dac502259ad0.png
图十 标准色表


定义为:
Yellow:#ffff00
Green:#008000
Orange:#ffa500
Blue:#0000ff
Red:#ff0000
White:#ffffff


WS2812点灯采用24位色,与标准RGB不同,为GRB,因此初始六个颜色如下:
const uint32_t rgbclr[]={0xffff00,0x800000,0xa5ff00,0x0000ff,0x00ff00,0xffffff};


对于点灯采用的六个面(底面虽然不用点灯,但仍然需要存储颜色),共计384块,使用uint32_t格式储存,每个数只使用其中24位,高8位空闲。


static uint32_t face[384]={0};


在本项目的硬件结构中,只需要输出320块(没有底)颜色,共计15360,考虑到WS2812信号必须间隔低电平间隔,预留200个0,每次输出的buff:
static uint8_t buff[15560]={0};

2、点灯实现函数


点灯功能实现主要包括:
1)初始化SPI接口函数int rt_hw_spi_config(void),并使用INIT_DEVICE_EXPORT(rt_hw_spi_config);将其加入板卡初始化中。在这个函数中,将SPI0速率初始为13.333MHz。
2)修改单个node的buff函数void reflush_one_node(uint16_t node),该函数的功能就是在旋转时,修改对应的buff值,每次修改48个uint8_t,使其输出与WS2812的单颗灯珠相符合。
3)通过SPI写WS2812灯函数void draw_face2(void),实际上是调用spi.c中的rt_spi_send(spi,buff,sizeof(buff));写入15560个uint8_t。

3、MSH交互功能

加入预留命令

1MSH_CMD_EXPORT(init_face,init_face);
2MSH_CMD_EXPORT(rotate_x_try,rotate_x_try<0-7>);
3MSH_CMD_EXPORT(rotate_y_try,rotate_y_try<0-7>);
4MSH_CMD_EXPORT(rotate_z_try,rotate_z_try<0-7>);

分别用于调用初始化方块函数void init_face(void)、旋转x轴函数static void rotate_x_try(int argc, charargv)、旋转y轴函数static void rotate_y_try(int argc, charargv)、旋转z轴static void rotate_z_try(int argc, char**argv)。

七、其它

作品图片


a7b6dfba-0365-11ed-ba43-dac502259ad0.jpg
a7cc7208-0365-11ed-ba43-dac502259ad0.jpg

视频效果

https://v.youku.com/v_show/id_XNTg1MzE3NDQxMg==.html?spm=a2hcb.profile.app.5~5!2~5~5!3~5!2~5~5~A

代码地址

https://gitee.com/tobottest/rubiks-cube

原文标题:【N32G457】基于RT-Thread和N32G457的高阶魔方

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

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

    关注

    0

    文章

    4

    浏览量

    6026
  • RT-Thread
    +关注

    关注

    31

    文章

    1272

    浏览量

    39905
  • MCU芯片
    +关注

    关注

    3

    文章

    246

    浏览量

    11382
收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及
    的头像 发表于 06-20 00:28 5133次阅读
    <b class='flag-5'>RT-Thread</b>记录(一、版本<b class='flag-5'>开发</b>环境及配合CubeMX)

    RT-Thread的C语言编码规范

    这是一份 RT-Thread 开发人员的开发指引。RT-Thread 做为一份开源软件,它需要由不同的人采用合作的方式完成,这份文档是开发
    的头像 发表于 02-21 16:50 2405次阅读

    基于RT-Thread os实现混合定位介绍

    wayz_iotkit 是上海图趣信息科技有限公司,针对RT-thread开发的能够实现定位功能的物联网组件。
    的头像 发表于 11-15 16:19 796次阅读
    基于<b class='flag-5'>RT-Thread</b> os<b class='flag-5'>实现</b>混合定位介绍

    【开源分享】基于RT-Thread和N32G457的电子魔方

    数从最早的三阶扩充到三十阶以上。二、实现功能本设计分为两个部分:电子魔方和GUI。电子魔方基于
    发表于 06-13 15:36

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT
    发表于 11-26 16:06 0次下载

    RT-Thread开发,如何有效学习RT-Thread的五个步骤

    RT-Thread推出RT-Thread Inside战略开放RT-Thread开发平台授权合作,与硬件十万个为什么合作首次推出第一款RT-
    的头像 发表于 09-25 09:55 3.5w次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>开发</b>,如何有效学习<b class='flag-5'>RT-Thread</b>的五个步骤

    RT-Thread软件包定义和使用

    RT-Thread软件包是运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件 。RT-Thread 同时提供了开放的软件包平台,为开发者提供了众多可重用软件包
    的头像 发表于 05-21 11:29 1w次阅读
    <b class='flag-5'>RT-Thread</b>软件包定义和使用

    RT-Thread Studio 主要亮点功能

    RT-Thread Studio V1.1.0 快速上手体验 RT-Thread Studio 主要包括工程创建和管理,代码编辑,SDK管理器,RT-Thread配置,构建配置,调试配置,程序下载
    的头像 发表于 06-19 11:45 5811次阅读

    嵌入式RT-Thread应用与开发

    嵌入式RT-Thread应用与开发说明。
    发表于 04-06 14:12 72次下载
    嵌入式<b class='flag-5'>RT-Thread</b>应用与<b class='flag-5'>开发</b>

    RT-Thread Studio驱动SD卡

    总结前言硬件平台:RT-Thread ART-Pi STM32H750XBH6开发板 H750开发开发软件:RT-Thread Studi
    发表于 12-27 19:13 20次下载
    <b class='flag-5'>RT-Thread</b> Studio驱动SD卡

    RT-Thread AI kit开源:轻松实现一键部署AI模型至 RT-Thread

    RT-AK 是 RT-Thread 团队为 RT-Thread 实时操作系统所开发的 AI 套件,能够一键将 AI 模型部署到 RT-Thread
    发表于 01-25 18:18 3次下载
    <b class='flag-5'>RT-Thread</b> AI kit开源:轻松<b class='flag-5'>实现</b>一键部署AI模型至 <b class='flag-5'>RT-Thread</b>

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍

    RT-Thread全球技术大会:RT-Thread对POSIX的实现情况介绍             审核编辑:彭静
    的头像 发表于 05-27 16:52 1854次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>RT-Thread</b>对POSIX的<b class='flag-5'>实现</b>情况介绍

    RT-Thread学习笔记 RT-Thread的架构概述

    的种种优越之处。RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过 16 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物
    的头像 发表于 07-09 11:27 4478次阅读
    <b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植