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

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

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

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

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

一、應用背景


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

魔方競賽也成為國際比賽項目,通過世界魔方協(xié)會比賽的認證成績甚至可以記載入世界紀錄當中。

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

二、實現(xiàn)功能


本設計分為兩個部分:電子魔方和GUI。

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


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


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

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

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

a75300f8-0365-11ed-ba43-dac502259ad0.jpg
圖五 N32G45XVL-STB開發(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,采用購買的88模塊成品,自己拼裝成立方體,考慮到底面沒有人會去看,因此直接空出來。


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


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

四、硬件框架

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


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


五、軟件框架


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


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


六、軟件模塊說明


1、定義

由于本項目使用pin資源較少,因此沒有修改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

如之前所述,魔方最重要的就是色塊的變化,各個時期和地方的版本雖然有所區(qū)別,但主流采用紅、黃、藍、綠、白、橙六種顏色,目前主要有兩種配色:世界版(WCA大賽所用配色)和日版(Rubik教授最初研發(fā)時的配色)。
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格式儲存,每個數(shù)只使用其中24位,高8位空閑。


static uint32_t face[384]={0};


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

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


點燈功能實現(xiàn)主要包括:
1)初始化SPI接口函數(shù)int rt_hw_spi_config(void),并使用INIT_DEVICE_EXPORT(rt_hw_spi_config);將其加入板卡初始化中。在這個函數(shù)中,將SPI0速率初始為13.333MHz。
2)修改單個node的buff函數(shù)void reflush_one_node(uint16_t node),該函數(shù)的功能就是在旋轉(zhuǎn)時,修改對應的buff值,每次修改48個uint8_t,使其輸出與WS2812的單顆燈珠相符合。
3)通過SPI寫WS2812燈函數(shù)void draw_face2(void),實際上是調(diào)用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>);

分別用于調(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

原文標題:【N32G457】基于RT-Thread和N32G457的高階魔方

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

審核編輯:彭靜

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

    關(guān)注

    0

    文章

    4

    瀏覽量

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

    關(guān)注

    31

    文章

    1289

    瀏覽量

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

    關(guān)注

    3

    文章

    252

    瀏覽量

    11464
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

    RT-Thread編程指南

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

    RT-Thread開發(fā),如何有效學習RT-Thread的五個步驟

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

    RT-Thread Studio 主要亮點功能

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

    嵌入式RT-Thread應用與開發(fā)

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

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

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

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

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

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

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

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

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

    RT-Thread文檔_RT-Thread 簡介

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

    機智云設備移植RT-Thread

    程中,通常會有多個功能,這個時候就需要用到實時系統(tǒng),比如FreeRTOS,AzureRTOSThreadX,RT-Thread等,筆者這里推薦RT-threadRT-Thread是一
    的頭像 發(fā)表于 04-19 18:39 ?975次閱讀
    機智云設備移植<b class='flag-5'>RT-Thread</b>