当前位置: 首页 > article >正文

用HD-RK3506-MINI开发板和小米CyberGear电机做个桌面小摆件(附完整CAN通信代码)

用HD-RK3506-MINI开发板和小米CyberGear电机打造智能交互桌面摆件项目构思与硬件选型去年夏天我在整理工作室时发现角落里闲置的HD-RK3506-MINI开发板正巧手边还有几个从二手市场淘来的小米CyberGear电机。这些原本可能被遗忘的硬件突然让我萌生了一个想法何不将它们组合成一个会跳舞的桌面小摆件这个项目不仅能让硬件重新焕发生命力还能实践Linux环境下的CAN总线通信和GUI开发。核心硬件清单主控板HD-RK3506-MINIRockchip RK3506处理器执行器小米CyberGear微电机型号CMN01交互界面4.3寸电容触摸屏通过RGB接口连接通信接口CAN总线转换模块电源系统12V/3A直流电源适配器提示小米CyberGear电机原用于机器狗关节驱动其高扭矩特性峰值12N·m使其非常适合需要精确位置控制的小型机械结构。Linux系统下的CAN总线配置实战在RK3506开发板上运行的是基于Buildroot定制的Linux系统配置CAN接口需要几个关键步骤首先确认内核已启用CAN支持# 检查内核配置 zcat /proc/config.gz | grep CAN加载CAN相关内核模块# 加载CAN核心模块 modprobe can modprobe can_raw modprobe mttcan配置CAN接口参数# 设置CAN0接口波特率为1Mbps ip link set can0 type can bitrate 1000000 ip link set up can0常见问题排查表问题现象可能原因解决方案CAN接口无法启用内核未配置CAN支持重新编译内核或加载模块通信不稳定终端电阻未连接在CAN总线上添加120Ω终端电阻电机无响应CAN ID不匹配确认电机和主机的CAN ID设置正确电机控制API设计与实现为了让后续的GUI开发更高效我将电机控制功能封装成简洁的C语言API。这个设计采用了分层架构将底层通信与业务逻辑分离。核心API函数// 初始化CAN通信 int motor_init(const char *can_interface); // 设置电机工作模式 int motor_set_mode(int fd, uint8_t can_id, enum MotorMode mode); // 控制电机位置 int motor_set_position(int fd, uint8_t can_id, float position, float speed); // 读取电机状态 int motor_get_status(int fd, uint8_t can_id, struct MotorStatus *status);一个典型的位置控制实现示例void move_to_angle(int can_fd, uint8_t motor_id, float target_angle) { struct MotorStatus status; // 使能电机 motor_set_mode(can_fd, motor_id, MODE_ENABLE); // 设置目标位置单位弧度 motor_set_position(can_fd, motor_id, target_angle, 1.0); // 1.0 rad/s // 等待到达目标位置 do { motor_get_status(can_fd, motor_id, status); usleep(10000); } while (fabs(status.position - target_angle) 0.01); }LVGL交互界面开发技巧使用LVGL为这个小项目创建直观的控制界面远比想象中简单。我选择了最基础的滑块和按钮组合实现了对电机的精确控制。界面元素配置要点创建角度控制滑块lv_obj_t *slider lv_slider_create(lv_scr_act()); lv_obj_set_size(slider, 200, 20); lv_obj_align(slider, LV_ALIGN_CENTER, 0, 0); lv_slider_set_range(slider, -180, 180);添加控制按钮lv_obj_t *btn lv_btn_create(lv_scr_act()); lv_obj_align(btn, LV_ALIGN_CENTER, 0, 50); lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_ALL, NULL);性能优化技巧使用lv_timer_create替代直接循环避免阻塞UI线程对频繁更新的数据如电机位置启用缓存机制将界面样式定义放在初始化阶段完成机械结构与系统集成为了让这个电子项目真正活起来我设计了一个简单的机械结构——一个可以360度旋转的展示平台。使用3D打印的齿轮组将电机轴与平台连接减速比设置为5:1既保证了足够的扭矩又实现了平滑的运动。组装注意事项电机安装时要确保轴向负载均匀分布CAN总线布线远离电源线减少干扰开发板固定要考虑散热需求整体结构重心要低于旋转轴调试过程中发现一个有趣的现象当电机快速启停时整个结构会产生轻微振动。通过调整控制参数中的kd微分增益值有效抑制了这种振荡。最终采用的PID参数组合参数值作用Kp8.0比例增益决定响应速度Kd0.5微分增益抑制振荡Max Speed3.0 rad/s最大运动速度项目扩展与创意应用完成基础功能后这个小装置其实还有更多可能性。我尝试了几种有趣的扩展音乐可视化通过音频输入接口让摆件随音乐节奏摆动环境交互添加距离传感器当检测到有人靠近时自动旋转展示远程控制集成Wi-Fi模块支持手机APP控制其中一个特别受欢迎的变体是太阳花版本——在平台上安装光敏电阻让摆件像向日葵一样自动转向光源最强的方向。实现这个功能只需在原有代码基础上添加几行void light_follow_mode(int can_fd, uint8_t motor_id) { float light_values[4]; // 四个方向的光敏读数 float target_angle 0; while(1) { read_light_sensors(light_values); target_angle calculate_best_angle(light_values); motor_set_position(can_fd, motor_id, target_angle, 1.0); lv_timer_handler(); usleep(100000); } }这个项目最让我满意的不是技术实现本身而是看到非技术背景的朋友们也能通过简单的触摸操作享受与这个小装置互动的乐趣。有一次一位设计师朋友甚至把它当成了创意展示台用来动态展示她的珠宝设计作品。

相关文章:

用HD-RK3506-MINI开发板和小米CyberGear电机做个桌面小摆件(附完整CAN通信代码)

用HD-RK3506-MINI开发板和小米CyberGear电机打造智能交互桌面摆件 项目构思与硬件选型 去年夏天,我在整理工作室时发现角落里闲置的HD-RK3506-MINI开发板,正巧手边还有几个从二手市场淘来的小米CyberGear电机。这些原本可能被遗忘的硬件,突然…...

Win10 + CUDA12.3 + PyTorch 3.0 手动安装全攻略:从环境配置到实战验证

1. 环境准备:搭建深度学习开发基础 在开始安装之前,我们需要确保系统具备必要的硬件和软件基础。我遇到过不少新手直接跳过了这个环节,结果在后续安装过程中频繁报错。这里我会详细说明每个检查项的重要性,以及遇到问题时的解决方…...

计算机毕业设计springboot学生管理系统 基于SpringBoot框架的高校学生信息管理平台设计与实现 SpringBoot架构下的校园学生综合事务管理系统开发

计算机毕业设计springboot学生管理系统388eb9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着高等教育规模的持续扩大,学生群体呈现多元化、复杂化发展趋势&…...

【2025最新】基于SpringBoot+Vue的售楼管理系统管理系统源码+MyBatis+MySQL

摘要 随着房地产行业的快速发展,售楼管理系统的信息化需求日益增长。传统的售楼管理方式依赖人工操作,效率低下且容易出错,无法满足现代房地产企业的高效运营需求。数字化售楼管理系统能够整合客户信息、房源数据、交易记录等核心业务模块&am…...

计算机毕业设计springboot社区服务微信小程序 基于Spring Boot的智慧社区便民服务平台小程序 基于微信生态的社区生活综合服务管理系统

计算机毕业设计springboot社区服务微信小程序0ah5c9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着移动互联网技术的深度普及和智慧城市建设的持续推进,传统社区…...

从漏洞复现到原理剖析:FineReport/FineBI反序列化漏洞的完整攻击链解析

从漏洞复现到原理剖析:FineReport/FineBI反序列化漏洞的完整攻击链解析 在企业级报表工具领域,FineReport和FineBI凭借其强大的数据分析和可视化能力,已成为众多企业的首选解决方案。然而,2022年曝光的channel接口反序列化漏洞却给…...

鸿蒙开发实战:5分钟搞定本地HAR库的创建与日志工具封装

鸿蒙开发实战:从零构建高可用日志工具库的全流程指南 刚接触鸿蒙开发的开发者常会遇到一个矛盾:官方文档看似清晰,但实际动手时总被各种报错绊住脚步。本文将以日志工具库开发为例,带你完整走通HAR库的创建→编码→编译→引用全流…...

牛耕法vs神经网络:5种IPA覆盖算法实测对比(含OpenCV/Rviz可视化代码)

牛耕法vs神经网络:5种IPA覆盖算法实测对比与可视化实战 在移动机器人路径规划领域,全覆盖路径规划(Complete Coverage Path Planning, CCPP)算法是实现高效区域覆盖的核心技术。本文将深入对比分析5种主流IPA覆盖算法,包括经典牛耕法(Boustro…...

SpringBoot项目里RocketMQ日志把磁盘撑爆了?手把手教你用Logback配置滚动日志(附K8s容器内验证方法)

SpringBoot项目中RocketMQ日志磁盘占用问题解决方案 凌晨三点,手机突然响起刺耳的告警铃声——生产环境磁盘使用率超过95%。作为值班工程师的你瞬间清醒,迅速登录服务器排查。很快发现罪魁祸首是rocketmq_client.log文件,它已经膨胀到惊人的8…...

ESP32 DMX512与RDM协议栈开发指南

1. 项目概述esp_dmx是一款专为 Espressif ESP32 系列微控制器设计的高性能、高兼容性 DMX512-A 与 RDM(Remote Device Management)协议栈。它并非一个简单的 UART 驱动封装,而是一个完整的、符合 ANSI-ESTA E1.11 和 E1.20 标准的嵌入式通信子…...

Windows网络编程避坑:Pcap4j抓包前,如何快速识别并绑定正确的物理网卡?

Windows网络编程实战:精准识别物理网卡的高效方法论 每次在Windows环境下进行网络抓包时,你是否也经历过这样的挫败感?明明代码逻辑正确,过滤器设置无误,却始终捕获不到预期的数据包。问题的根源往往在于——选错了网卡…...

避开这些坑!Dify LLM参数配置中最容易犯的5个错误及解决方案

避开这些坑!Dify LLM参数配置中最容易犯的5个错误及解决方案 刚接触Dify LLM的技术人员常常会被其丰富的参数配置选项所吸引,但同时也容易陷入一些常见的误区。这些误区不仅会影响模型输出的质量,还可能导致资源浪费或无法达到预期效果。本文…...

纯电动汽车两档 ATM 变速箱 Simulink 模型探索

纯电动汽车两档ATM变速箱simulink模型,模型实现了两档AMT换挡策略和换挡过程仿真,内含详细文档和注释模型,可运行最近在研究纯电动汽车的动力系统,发现其中的两档 ATM 变速箱 Simulink 模型相当有趣,今天就来和大家唠唠…...

DolphinScheduler 3.1.8 资源中心(HDFS)与数据质量任务配置全攻略:告别“存储未启用”

DolphinScheduler 3.1.8 企业级数据治理实战:HDFS资源中心与Spark数据质量任务深度配置指南 1. 资源中心配置:解锁HDFS存储能力 在企业级数据调度场景中,资源中心的稳定运行直接影响工作流管理的效率。DolphinScheduler默认配置下&#xff0c…...

取证实战:当嫌疑人电脑已关机,如何利用EFDD从休眠文件提取BitLocker密钥?

休眠文件取证:从关机设备中提取BitLocker密钥的实战指南 当调查人员面对一台已经关机的加密设备时,传统的取证方法往往束手无策。但很少有人知道,即使电脑处于关机状态,硬盘上的休眠文件(hiberfil.sys)可能成为突破加密防线的关键…...

Arduino新手必看:用PS2摇杆控制舵机的完整接线与代码解析(附常见问题排查)

Arduino创意控制:PS2摇杆精准操控舵机的实战指南 从零开始的硬件交互之旅 记得第一次用Arduino让舵机随着摇杆摆动时,那种"魔法成真"的兴奋感至今难忘。作为硬件交互的经典入门项目,PS2摇杆控制舵机不仅能快速建立成就感&#xff0…...

Supervisorctl连接失败的5个常见原因及排查技巧(附真实案例)

Supervisorctl连接失败的深度排查指南:从原理到实战 引言 Supervisor作为进程管理工具中的瑞士军刀,在开发与运维工作中扮演着重要角色。然而,当熟悉的supervisorctl命令突然返回"connection refused"时,这种挫败感就像…...

Phi-3-Mini-128K一文详解:Phi-3系列tokenizer对中文长文本分词优势

Phi-3-Mini-128K一文详解:Phi-3系列tokenizer对中文长文本分词优势 1. 引言:当小模型遇上长文本 如果你用过一些开源大模型来处理长文档,可能会遇到这样的尴尬:模型要么“记性不好”,聊着聊着就忘了前面说了什么&…...

Ollama安全加固指南:从IP限制到API防护的实战策略

1. 为什么Ollama需要安全加固? 最近在本地部署大模型的热度越来越高,Ollama作为一款轻量级的本地大模型运行平台,确实给开发者带来了很多便利。但我在实际使用中发现,很多朋友安装完Ollama就直接开始用了,完全忽略了安…...

STM32固件烧录全攻略:ST-LINK Utility从安装到实战(附常见问题解决)

STM32固件烧录全攻略:ST-LINK Utility从安装到实战(附常见问题解决) 第一次接触STM32开发板时,最让人头疼的就是如何把写好的程序烧录到芯片里。作为ST官方推荐的烧录工具,ST-LINK Utility凭借其稳定性和易用性成为工程…...

STM32F4-正点原子探索者-SYSTEM文件夹下delay.c延时函数优化技巧与实践

1. 深入理解STM32F4的延时函数机制 在正点原子探索者开发板的SYSTEM文件夹中,delay.c文件承担着精确延时的重要任务。这个文件看似简单,但里面藏着不少值得深挖的技术细节。我第一次接触这个文件时,就被它的精妙设计所吸引。 delay.c的核心是…...

架构之构建高阶RAG系统的六种除幻方案

架构之构建高阶RAG系统的六种除幻方案详解 概述 RAG(Retrieval-Augmented Generation)系统在知识检索与生成过程中,常常面临幻觉问题——即模型生成的内容与事实不符或编造不存在的关联。本文档详细介绍了六种有效的除幻方案,从资…...

贝叶斯岭回归 vs 传统岭回归:5个真实数据集对比测试结果

贝叶斯岭回归与传统岭回归:5个真实数据集下的深度性能剖析 当数据科学家面对高维数据集时,正则化回归技术往往是工具箱中的首选武器。在众多选项中,岭回归因其稳定性和简单性长期占据主导地位,而贝叶斯岭回归则以其自动化特性逐渐…...

架构之构建高阶RAG系统的四大核心引擎模块

架构之构建高阶RAG系统的四大核心引擎模块详解 概述 Retrieval-Augmented Generation (RAG) 系统通过结合检索和生成能力,有效解决了大语言模型的知识局限性问题。本文档详细介绍了RAG系统的四个核心引擎模块,这些模块共同构成了RAG系统的技术架构基础。…...

Scifinder专利检索保姆级教程:从零开始掌握PatentPak的5个核心技巧

SciFinder专利检索全攻略:解锁PatentPak的5个高效工作流 当你在实验室合成一个新化合物时,专利检索往往成为最耗时的环节。传统方法需要逐页翻阅PDF文件寻找目标结构,而PatentPak的化学物质定位功能可以将这个过程缩短到几分钟。作为化学信息…...

【异常】Visual Studio Code Failed to install Visual Studio Code update. Updates may fail due to anti-vir

一、报错内容 Windows系统下VS Code自动更新时,弹出的完整报错信息(已脱敏)如下: Failed to install Visual Studio Code update. Updates may fail due to anti-virus software and/or runaway processes. Please try restarting your machine before attempting to upd…...

Qt语言家实战:从TS文件生成到多语言动态切换的完整指南

1. Qt国际化开发全景指南 第一次接触Qt多语言切换功能时,我被其优雅的设计所震撼——只需几个简单的步骤,就能让应用程序支持全球任意语言。记得2013年参与医疗设备项目时,我们仅用3天就完成了中英俄三语切换,这在传统开发中简直不…...

Footprint Expert Pro保姆级教程:5分钟搞定0805电阻封装(附Allegro环境配置避坑指南)

Footprint Expert Pro高效封装设计指南:0805电阻封装5分钟速成与Allegro环境深度优化 在电子设计自动化领域,封装设计往往是工程师最耗时却又无法回避的基础工作。传统手动绘制0805电阻封装需要经历焊盘设计、外形绘制、参数校对等十余个步骤&#xff0c…...

别再傻傻分不清了!ArcMap里要素类和要素数据集到底有啥区别?新手必看避坑指南

ArcGIS新手必读:要素类与要素数据集的本质区别与实战选择 第一次打开ArcMap时,面对"要素类"和"要素数据集"这两个看似相似的概念,大多数GIS初学者都会陷入困惑。这就像走进一家陌生的超市,面对琳琅满目的商品…...

FPGA新手必看:Vivado2014下用Verilog实现三位扭环计数器(附完整代码)

FPGA实战:从零构建三位扭环计数器的完整指南 在数字逻辑设计领域,扭环计数器作为一种特殊的移位寄存器,因其独特的反馈机制和简洁的状态循环,常被用于时序控制、状态机设计等场景。本文将带您从零开始,在Vivado2014环境…...