0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RT-Thread開(kāi)發(fā)電子魔方實(shí)現(xiàn)功能

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來(lái)源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:tobot ? 2022-07-15 11:31 ? 次閱讀

一、應(yīng)用背景


魔方,又叫魯比克方塊(Rubik’s Cube),是匈牙利布達(dá)佩斯建筑學(xué)院厄爾諾·魯比克教授發(fā)明的機(jī)械益智玩具,由若干個(gè)積木塊組成,積木塊之間通過(guò)卡榫契合,能做到“組”的相對(duì)位置改變,從而構(gòu)成各種形狀的花紋,基本的玩法就是通過(guò)旋轉(zhuǎn),打散各面色塊后用最快速度還原。魔方的設(shè)計(jì)初衷是用來(lái)認(rèn)識(shí)空間組成和結(jié)構(gòu)的教具,后來(lái)成為風(fēng)靡全球的玩具,形狀從原始的正方體發(fā)展出球型、鉆石型、粽子型等異形,階數(shù)從最早的三階擴(kuò)充到三十階以上。

魔方競(jìng)賽也成為國(guó)際比賽項(xiàng)目,通過(guò)世界魔方協(xié)會(huì)比賽的認(rèn)證成績(jī)甚至可以記載入世界紀(jì)錄當(dāng)中。

傳統(tǒng)魔方采用物理結(jié)構(gòu)契合,高階魔方使用時(shí)旋轉(zhuǎn)次數(shù)多,要求速度快、精度高,很容易磨損導(dǎo)致性能下降無(wú)法使用(我自己就有一天玩壞一個(gè)高階魔方的經(jīng)歷)。基于此,試圖將魔方功能“電子”化,減少機(jī)械磨損。

二、實(shí)現(xiàn)功能


本設(shè)計(jì)分為兩個(gè)部分:電子魔方和GUI。

電子魔方基于RT-Thread開(kāi)發(fā),使用N32G457驅(qū)動(dòng)WS2812板,通過(guò)點(diǎn)亮WS2812燈珠,實(shí)現(xiàn)魔方轉(zhuǎn)動(dòng)效果。本次開(kāi)發(fā)所用WS2812板為8*8的板卡,共用了5塊,搭成正方體形狀(留出底面),共計(jì)320顆燈珠,用于模擬一個(gè)8階魔方。


GUI為純軟件開(kāi)發(fā),在電腦上運(yùn)行,可以通過(guò)鼠標(biāo)或鍵盤操作,實(shí)現(xiàn)魔方的轉(zhuǎn)動(dòng)。為配合電子魔方,設(shè)計(jì)了界面,8階魔方共有24個(gè)方向可轉(zhuǎn)動(dòng)(反向可以通過(guò)旋轉(zhuǎn)3次實(shí)現(xiàn)),設(shè)計(jì)24個(gè)按鈕,由于高階魔方還原難度較高,因此還預(yù)留了“一鍵還原”功能。


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

三、開(kāi)發(fā)板和RT-Thread使用情況概述

使用N32G45XVL-STB開(kāi)發(fā)板,該開(kāi)發(fā)板MCU芯片型號(hào)為國(guó)民技術(shù)的N32G457VEL7,LQFP100管腳封裝,板卡把所有GPIO都引出連接到J1,J2和J12插針上,非常便于開(kāi)發(fā)和調(diào)試,但在本項(xiàng)目中,僅使用了PA7(SPI0的MOSI接口)。

a75300f8-0365-11ed-ba43-dac502259ad0.jpg
圖五 N32G45XVL-STB開(kāi)發(fā)板

安裝的RT-Thread Studio,版本: 2.1.5(構(gòu)建ID: 202201191915),其上已經(jīng)自帶了RT-Thread模塊,直接從SDK中拖取了Nations的n32g45xvl-stb板,并使能了其SPI功能,所用SPI為SPI0。


用于呈現(xiàn)的WS2812,采用購(gòu)買的88模塊成品,自己拼裝成立方體,考慮到底面沒(méi)有人會(huì)去看,因此直接空出來(lái)。


WS2812的實(shí)現(xiàn)原理比較簡(jiǎn)單,就是通過(guò)輸入特定長(zhǎng)度的高低電平,驅(qū)動(dòng)若干顆燈珠,每個(gè)顏色比特傳輸數(shù)據(jù)需要1.25us,可以略微超頻(甚至有的datasheet中表示可以超頻600ns,實(shí)測(cè)做不到的),在本項(xiàng)目中,采用的是SPI驅(qū)動(dòng),將其設(shè)置為1.2us/顏色比特使用,分別通過(guò)SPI傳輸ffc0、f000作為其0、1碼表示。


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

四、硬件框架

其硬件結(jié)構(gòu)非常簡(jiǎn)單,采用5塊88的WS2812燈板串接作為輸出,將其搭建成立體形狀,串接各面的板和板之間串接順序?yàn)轫?、前、右、后、左,在平面展開(kāi)圖中,每塊燈板上的燈珠的順序?yàn)閺淖蟮接?,從上到下依次遞增,共320顆,在最初設(shè)計(jì)和調(diào)試時(shí),使用了外部供電,后省略,直接由板上的5V從USB接口取電。大致框架如下:


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


五、軟件框架


由于上位機(jī)和下位機(jī)分別開(kāi)發(fā),上位機(jī)所用語(yǔ)言為python,基于windows環(huán)境運(yùn)行(理論上移植linux也很簡(jiǎn)單),下位機(jī)使用c開(kāi)發(fā),在N32開(kāi)發(fā)板上運(yùn)行,其操作/執(zhí)行流程如下:


a78400ae-0365-11ed-ba43-dac502259ad0.jpg
圖八 軟件業(yè)務(wù)流程


六、軟件模塊說(shuō)明


1、定義

由于本項(xiàng)目使用pin資源較少,因此沒(méi)有修改drv_gpio.c文件中的定義

define N32F10X_PIN_NUMBERS 64

而是直接在代碼中定義了所用的pin腳和相關(guān)資源

define SPI1_BUS_NAME “spi1”

define SPI1__DEVICE_NAME “spi10”

define SPI1_NCS_PIN 29 //PA4

如之前所述,魔方最重要的就是色塊的變化,各個(gè)時(shí)期和地方的版本雖然有所區(qū)別,但主流采用紅、黃、藍(lán)、綠、白、橙六種顏色,目前主要有兩種配色:世界版(WCA大賽所用配色)和日版(Rubik教授最初研發(fā)時(shí)的配色)。
a7944e28-0365-11ed-ba43-dac502259ad0.png
圖九 顏色要求


對(duì)于每個(gè)面具體的顏色,采用的是原色大辭典中標(biāo)準(zhǔn)色號(hào):


a7a175a8-0365-11ed-ba43-dac502259ad0.png
圖十 標(biāo)準(zhǔn)色表


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


WS2812點(diǎn)燈采用24位色,與標(biāo)準(zhǔn)RGB不同,為GRB,因此初始六個(gè)顏色如下:
const uint32_t rgbclr[]={0xffff00,0x800000,0xa5ff00,0x0000ff,0x00ff00,0xffffff};


對(duì)于點(diǎn)燈采用的六個(gè)面(底面雖然不用點(diǎn)燈,但仍然需要存儲(chǔ)顏色),共計(jì)384塊,使用uint32_t格式儲(chǔ)存,每個(gè)數(shù)只使用其中24位,高8位空閑。


static uint32_t face[384]={0};


在本項(xiàng)目的硬件結(jié)構(gòu)中,只需要輸出320塊(沒(méi)有底)顏色,共計(jì)15360,考慮到WS2812信號(hào)必須間隔低電平間隔,預(yù)留200個(gè)0,每次輸出的buff:
static uint8_t buff[15560]={0};

2、點(diǎn)燈實(shí)現(xiàn)函數(shù)


點(diǎn)燈功能實(shí)現(xiàn)主要包括:
1)初始化SPI接口函數(shù)int rt_hw_spi_config(void),并使用INIT_DEVICE_EXPORT(rt_hw_spi_config);將其加入板卡初始化中。在這個(gè)函數(shù)中,將SPI0速率初始為13.333MHz。
2)修改單個(gè)node的buff函數(shù)void reflush_one_node(uint16_t node),該函數(shù)的功能就是在旋轉(zhuǎn)時(shí),修改對(duì)應(yīng)的buff值,每次修改48個(gè)uint8_t,使其輸出與WS2812的單顆燈珠相符合。
3)通過(guò)SPI寫(xiě)WS2812燈函數(shù)void draw_face2(void),實(shí)際上是調(diào)用spi.c中的rt_spi_send(spi,buff,sizeof(buff));寫(xiě)入15560個(gè)uint8_t。

3、MSH交互功能

加入預(yù)留命令

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>);

分別用于調(diào)用初始化方塊函數(shù)void init_face(void)、旋轉(zhuǎn)x軸函數(shù)static void rotate_x_try(int argc, charargv)、旋轉(zhuǎn)y軸函數(shù)static void rotate_y_try(int argc, charargv)、旋轉(zhuǎn)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

原文標(biāo)題:【N32G457】基于RT-Thread和N32G457的高階魔方

文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭靜

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 魔方
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6022
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39430
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    242

    瀏覽量

    11254
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(一、版本開(kāi)發(fā)環(huán)境及配合CubeMX)

    RT-Thread 學(xué)習(xí)記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開(kāi)發(fā)環(huán)境 及
    的頭像 發(fā)表于 06-20 00:28 ?4925次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(一、版本<b class='flag-5'>開(kāi)發(fā)</b>環(huán)境及配合CubeMX)

    RT-Thread的C語(yǔ)言編碼規(guī)范

    這是一份 RT-Thread 開(kāi)發(fā)人員的開(kāi)發(fā)指引。RT-Thread 做為一份開(kāi)源軟件,它需要由不同的人采用合作的方式完成,這份文檔是開(kāi)發(fā)
    的頭像 發(fā)表于 02-21 16:50 ?2310次閱讀

    基于RT-Thread os實(shí)現(xiàn)混合定位介紹

    wayz_iotkit 是上海圖趣信息科技有限公司,針對(duì)RT-thread開(kāi)發(fā)的能夠實(shí)現(xiàn)定位功能的物聯(lián)網(wǎng)組件。
    的頭像 發(fā)表于 11-15 16:19 ?709次閱讀
    基于<b class='flag-5'>RT-Thread</b> os<b class='flag-5'>實(shí)現(xiàn)</b>混合定位介紹

    【開(kāi)源分享】基于RT-Thread和N32G457的電子魔方

    數(shù)從最早的三階擴(kuò)充到三十階以上。二、實(shí)現(xiàn)功能本設(shè)計(jì)分為兩個(gè)部分:電子魔方和GUI。電子魔方基于
    發(fā)表于 06-13 15:36

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開(kāi)發(fā)組(2015-03-31)。RT-Thread做為國(guó)內(nèi)有較大影響力的開(kāi)源實(shí)時(shí)操作系統(tǒng),本文是RT
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread開(kāi)發(fā),如何有效學(xué)習(xí)RT-Thread的五個(gè)步驟

    RT-Thread推出RT-Thread Inside戰(zhàn)略開(kāi)放RT-Thread開(kāi)發(fā)平臺(tái)授權(quán)合作,與硬件十萬(wàn)個(gè)為什么合作首次推出第一款RT-
    的頭像 發(fā)表于 09-25 09:55 ?3.4w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>開(kāi)發(fā)</b>,如何有效學(xué)習(xí)<b class='flag-5'>RT-Thread</b>的五個(gè)步驟

    RT-Thread軟件包定義和使用

    RT-Thread軟件包是運(yùn)行于RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)平臺(tái)上,面向不同應(yīng)用領(lǐng)域的通用軟件組件 。RT-Thread 同時(shí)提供了開(kāi)放的軟件包平臺(tái),為開(kāi)發(fā)者提供了眾多可重用軟件包
    的頭像 發(fā)表于 05-21 11:29 ?1w次閱讀
    <b class='flag-5'>RT-Thread</b>軟件包定義和使用

    RT-Thread Studio 主要亮點(diǎn)功能

    RT-Thread Studio V1.1.0 快速上手體驗(yàn) RT-Thread Studio 主要包括工程創(chuàng)建和管理,代碼編輯,SDK管理器,RT-Thread配置,構(gòu)建配置,調(diào)試配置,程序下載
    的頭像 發(fā)表于 06-19 11:45 ?5632次閱讀

    嵌入式RT-Thread應(yīng)用與開(kāi)發(fā)

    嵌入式RT-Thread應(yīng)用與開(kāi)發(fā)說(shuō)明。
    發(fā)表于 04-06 14:12 ?71次下載
    嵌入式<b class='flag-5'>RT-Thread</b>應(yīng)用與<b class='flag-5'>開(kāi)發(fā)</b>

    RT-Thread Studio驅(qū)動(dòng)SD卡

    總結(jié)前言硬件平臺(tái):RT-Thread ART-Pi STM32H750XBH6開(kāi)發(fā)板 H750開(kāi)發(fā)開(kāi)發(fā)軟件:RT-Thread Studi
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio驅(qū)動(dòng)SD卡

    RT-Thread AI kit開(kāi)源:輕松實(shí)現(xiàn)一鍵部署AI模型至 RT-Thread

    RT-AK 是 RT-Thread 團(tuán)隊(duì)為 RT-Thread 實(shí)時(shí)操作系統(tǒng)所開(kāi)發(fā)的 AI 套件,能夠一鍵將 AI 模型部署到 RT-Thread
    發(fā)表于 01-25 18:18 ?3次下載
    <b class='flag-5'>RT-Thread</b> AI kit開(kāi)源:輕松<b class='flag-5'>實(shí)現(xiàn)</b>一鍵部署AI模型至 <b class='flag-5'>RT-Thread</b>

    RT-Thread全球技術(shù)大會(huì):RT-Thread對(duì)POSIX的實(shí)現(xiàn)情況介紹

    RT-Thread全球技術(shù)大會(huì):RT-Thread對(duì)POSIX的實(shí)現(xiàn)情況介紹 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:52 ?1767次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>對(duì)POSIX的<b class='flag-5'>實(shí)現(xiàn)</b>情況介紹

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    的種種優(yōu)越之處。RT-Thread 是一款完全由國(guó)內(nèi)團(tuán)隊(duì)開(kāi)發(fā)維護(hù)的嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS),具有完全的自主知識(shí)產(chǎn)權(quán)。經(jīng)過(guò) 16 個(gè)年頭的沉淀,伴隨著物聯(lián)網(wǎng)的興起,它正演變成一個(gè)功能強(qiáng)大、組件豐富的物
    的頭像 發(fā)表于 07-09 11:27 ?4321次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植