【STM32项目】基于Stm32搞怪盒子的设计(完整工程资料)

news2024/12/25 0:35:00

基于stm32搞怪的盒子设计

前言:

最近我看到一个极具创意的搞怪盒子,设计得相当有意思。作为一个热衷于电子DIY的狂热爱好者,怎能错过这样一个有趣的项目呢?于是,我决定亲自动手,设计一个属于自己的、独一无二的搞怪盒子。下面是我设计的详细过程和思路,希望能够为你带来一些启发。

动手DIY一个搞怪盒子不仅能满足我的创作欲望,还能在家中增添一抹乐趣。每当看到家人或朋友因为它的搞怪动作而哈哈大笑,我就感到无比的满足和成就感。如果你也对电子DIY感兴趣,不妨动手试试,说不定你会发现更多有趣的创意呢!

一、设计目的:

以上设计目的是创造一个能够吸引人们注意并带来乐趣的互动设备,通过集成多种传感器和输出设备,如舵机、OLED屏幕和拨动开关,实现多种搞怪效果。设计中包含了六种不同的搞怪模式,每种模式都有独特的机械动作和屏幕显示,为大家提供多样化的娱乐体验。此外,设备还具备休眠功能,以节省能源,同时设计时也考虑了设备的稳定性和耐用性,确保长期可靠运行。整体设计旨在通过互动性和趣味性,为用户带来轻松愉快的体验。

 

二、实现功能:

这个基于STM32的搞怪盒子设计通过使用STM32F103C6T6微控制器、MG995舵机、0.96英寸OLED屏幕、拨动开关等组件,实现了多种有趣的互动功能。主要功能包括:1. 通过舵机控制机械动作,如打开/关闭盖子、移动物体等,以实现不同的搞怪效果2. 利用OLED屏幕显示文字、图像或动画,增加互动性和视觉效果。3. 通过拨动开关控制设备的电源或切换不同的搞怪模式。4. 设计了六种不同的搞怪模式(type_1到type_6),每种模式都有独特的动作和屏幕显示,如直接开、快开、挨打、偷看、调戏和快速开关等,为用户带来多样化的娱乐体验。此外,设备还具备休眠功能,通过OLED_OFF()和OLED_ON()函数实现屏幕的开关,以节省能源。整体设计注重互动性和趣味性,同时考虑了设备的稳定性和耐用性。

 

2.1 机械动作控制:

利用MG995舵机来控制盒子的机械动作,例如打开和关闭盖子,或者移动盒子内部的物体。通过编写代码,我们可以让这些动作变得更加生动和搞怪,让人捧腹大笑。

2.2 显示界面:

使用0.96英寸OLED屏幕显示文字、图像或动画。屏幕的内容可以与机械动作相呼应,比如打开盖子时显示“Surprise!”的文字,或者做出一些搞怪的表情。

2.3 电源和模式控制:

通过拨动开关,不仅可以控制整个设备的电源,还能在不同的搞怪模式之间切换。每种模式都有其独特的魅力和互动效果。

2.4 多种搞怪模式:

我设计了六种不同的搞怪模式(type_1到type_6),每种模式都有独特的动作和屏幕显示。例如:

type_1(直接开):舵机直接打开盖子,屏幕显示“Hello!”。

type_2(快开):舵机快速打开盖子,屏幕显示快速变化的动画。

type_3(挨打):模拟被打击的动作,屏幕显示“别打我!”。

type_4(偷看):盖子缓慢打开一点,屏幕显示“偷看中…”。

type_5(调戏):盖子反复开关,屏幕显示“调戏模式启动!”。

type_6(快速开关):盖子快速多次开关,屏幕显示“快开快关!”。

2.5 节能休眠功能:

考虑到节能环保,我还加入了休眠功能。通过OLED_OFF()和OLED_ON()函数,实现屏幕的开关功能。当盒子不使用时,屏幕会自动关闭,进入休眠状态,减少能源消耗。

 

整个设计过程中,我非常注重互动性和趣味性,力求每个细节都能给用户带来愉快的体验。同时,也考虑到了设备的稳定性和耐用性,确保在长期使用中依然能保持良好的性能。 

三、项目概述

这个搞怪盒子的核心在于STM32F103C6T6微控制器,它是整个项目的“大脑”。除此之外,还需要一些关键组件:MG995舵机、0.96英寸OLED屏幕、拨动开关等。通过这些组件的组合,我们可以实现多种有趣的互动功能。

3.1 MG995舵机(2个):

每个12元,共24元。

这些舵机是机械动作的核心,它们能够精确控制盒子的开合和内部物体的移动。通过编程,我们可以让它们执行各种搞怪动作,如快速开关、缓慢移动等,为盒子增添生动的互动性。

3.2 0.96英寸OLED屏幕:

10元。

这款小巧的OLED屏幕是展示搞怪内容的关键。它能够显示文字、图像和简单的动画,与舵机的动作同步,为用户带来视觉上的惊喜和乐趣。屏幕虽小,但足以传达丰富的信息和表情。

3.3 拨动开关:

5元。

这个简单的拨动开关不仅控制电源,还允许用户在不同的搞怪模式之间轻松切换。它的存在使得操作更加直观和便捷,让用户能够随时选择自己喜欢的互动方式。

3.4 C6T6核心板:

6元。

作为整个项目的大脑,STM32F103C6T6核心板负责处理所有的逻辑和控制任务。尽管价格亲民,但它提供了足够的性能和灵活性,确保盒子能够稳定运行并实现各种创意功能。

3.5 3D打印:

180元。

3D打印部分是盒子的外壳和结构支撑。通过定制设计,我们可以打造出独一无二的外观和内部布局,使盒子不仅实用,还具有个性化的外观。虽然这部分成本较高,但它为整个项目增添了独特的质感和视觉吸引力。

部件数量单价(元)总价(元)
MG995舵机21224
0.96 OLED屏幕11010
拨动开关155
C6T6核心板166
3D打印1180180
总计235

 尽管这些硬件看似简单,但正是它们的巧妙组合和应用,使得这个搞怪盒子充满了趣味和创意。通过合理的设计和编程,我们能够将这些基础组件转化为一个充满互动性和娱乐性的设备,为用户带来无尽的欢乐。这种“以简驭繁”的设计理念,正是电子DIY的魅力所在。

这个搞怪盒子的硬件配置并不复杂,没有使用特别高端或昂贵的材料,但这正是其魅力所在。通过巧妙地组合和利用这些基础组件,我们能够创造出意想不到的互动效果和乐趣。

四、电路接线设计

括电源、控制信号和数据传输线路的连接方式。这些接线设计确保了STM32F103C6T6微控制器与各个外设(如MG995舵机、OLED屏幕、拨动开关等)之间的正确通信和功能实现。

4.1 电源输入:

        使用外部5V电源适配器,通过电源插座连接到电路板上。

        电源正极(VCC)连接到电路板的5V引脚。

        电源负极(GND)连接到电路板的GND引脚。

4.2  舵机电源:

        两个MG995舵机的电源线(红色线)连接到电路板的5V引脚。

        两个MG995舵机的地线(棕色线)连接到电路板的GND引脚。

4.3  控制信号接线

        舵机控制信号:

        第一个MG995舵机的信号线(橙色线)连接到STM32F103C6T6的TIM1_CH1(PA8)引脚

        第二个MG995舵机的信号线(橙色线)连接到STM32F103C6T6的TIM1_CH2(PA9)引脚。

4.4 拨动开关:

        拨动开关的一端连接到STM32F103C6T6的GPIO引脚(例如PA0)。

        拨动开关的另一端连接到电路板的GND引脚。

        在GPIO引脚和GND之间连接一个10kΩ的上拉电阻,确保在开关断开时GPIO引脚为高电平。

4.5 数据传输接线:

        OLED屏幕:

        OLED屏幕的VCC引脚连接到电路板的5V引脚。

        OLED屏幕的GND引脚连接到电路板的GND引脚。

        OLED屏幕的SCL引脚连接到STM32F103C6T6的I2C1_SCL(PB6)引脚。

        OLED屏幕的SDA引脚连接到STM32F103C6T6的I2C1_SDA(PB7)引脚。

4.6 其他接线

        LED指示灯:

        LED的正极连接到STM32F103C6T6的GPIO引脚(例如PA1)。

        LED的负极通过一个220Ω的限流电阻连接到电路板的GND引脚。

4.7 按键:

        按键的一端连接到STM32F103C6T6的GPIO引脚(例如PA2)。

        按键的另一端连接到电路板的GND引脚。

        在GPIO引脚和GND之间连接一个10kΩ的上拉电阻,确保在按键未按下时GPIO引脚为高电平。

在实际布线和焊接过程中,为了确保STM32F103C6T6微控制器与各个外设之间的稳定连接和高效通信,我们应当采取一系列细致的措施。首先,所有连接点都应进行牢固的焊接,确保电气接触良好,避免因接触不良导致的信号丢失或不稳定。其次,为了避免短路和虚焊现象,我们应当在焊接前仔细检查电路设计图,确保每个元件的引脚都正确无误地连接到相应的电路节点上。

考虑到长期使用的稳定性和可靠性,设计并制作一块定制的PCB(Printed Circuit Board,印刷电路板)是一个极佳的选择。PCB不仅能够提供更加整洁和紧凑的电路布局,还能够通过其精密的制造工艺,确保每个连接点的稳定性和耐久性。在PCB设计过程中,我们应当充分考虑信号的完整性和抗干扰能力,合理规划电源和地线的布局,以及信号线的走线方式,从而最大限度地减少电磁干扰和信号衰减。

在PCB的制作过程中,选择高质量的材料和先进的制造工艺也是至关重要的。例如,使用FR-4等级的玻璃纤维增强环氧树脂板作为基材,能够提供良好的机械强度和电气绝缘性能。同时,采用精细的铜箔走线和精确的孔位加工,可以确保每个元件的引脚都能够准确无误地插入到PCB的焊盘上,从而实现稳固的电气连接。

通过精心设计的接线方案和高质量的PCB制作,我们不仅能够确保STM32F103C6T6微控制器与各个外设之间的正确连接和通信,还能够提升整个系统的稳定性和可靠性,为后续的功能实现和性能优化奠定坚实的基础。

五、软件设计

5.1 初始化阶段:

        初始化延时函数 `DelayInit()`。

        配置I2C接口 `I2C_Configuration()`。

        初始化OLED屏幕 `OLED_Init()`。

        配置LED GPIO `LED_GPIO_Config()`。

        初始化PWM定时器 `TIM1_PWM_Init(199, 7199)`,设置PWM周期为20ms。

        配置按键 `KEY_Config()`。

        点亮LED `LED(ON)`。

5.2 主循环:

        关闭OLED屏幕 `OLED_OFF()`。

        点亮LED `LED(ON)`。

        设置等待标志 `wait=1`。

        延时1500ms `SysTick_Delay_Ms(1500)`。

        检查等待标志 `if(wait==0)`。

        打开OLED屏幕 `OLED_ON()`。

        根据变量 `a` 选择不同的动作类型 `switch(a)`。

        执行相应的动作函数 `type_1()` 到 `type_6()`

        重置等待标志 `wait=1`。

        关闭OLED屏幕 `OLED_OFF()`。

        递增变量 `a`,并在达到7时重置为1。

5.3  动作类型函数设计

(1). 设置舵机角度:通过 `TIM_SetCompare1(TIM1, value)` 和 `TIM_SetCompare2(TIM1, value)` 设置舵机的PWM占空比,从而控制舵机的角度。
(2). 显示OLED图像:通过 `OLED_DrawBMP(0, 0, 128, 8, (unsigned char *)BMPx)` 在OLED屏幕上显示相应的位图。
(3). 延时:通过 `SysTick_Delay_Ms(duration)` 进行延时,控制动作的持续时间。

5.4 具体动作类型函数

(1). type_1() - 直接开:

        设置舵机角度并显示OLED图像。

        通过一系列的延时和角度调整,模拟舵机的运动。

(2). type_2() - 快开:

        设置舵机角度并显示OLED图像。

        通过较短的延时和快速的角度调整,模拟快速运动。

(3). type_3() - 挨打:

        设置舵机角度并显示OLED图像。

        通过多次快速的角度调整和图像切换,模拟被打击的效果。

(4). type_4() - 偷看:

        设置舵机角度并显示OLED图像。

        通过较长的延时和缓慢的角度调整,模拟偷看的行为。

(5). type_5() - 调戏:

        设置舵机角度并显示OLED图像。

        通过多次快速的角度调整和图像切换,模拟调戏的行为。

(6). type_6() - 其他动作:

        设置舵机角度并显示OLED图像。

        通过一系列的延时和角度调整,模拟其他特定的动作。

5.5 main函数代码实现:

#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_SysTick.h"
#include "bsp_pwm.h"
#include "bsp_key.h"
#include "OLED_I2C.h"
#include "delay.h"

void type_1(void);
void type_2(void);
void type_3(void);
void type_4(void);
void type_5(void);
void type_6(void);

extern const unsigned char BMP1[];
extern const unsigned char BMP2[];
extern const unsigned char BMP3[];
extern const unsigned char BMP4[];
extern const unsigned char BMP5[];
extern unsigned char wait;

int main(void)
{ 		
		unsigned char a=0;	
	
		DelayInit();
		I2C_Configuration();
		OLED_Init();
		LED_GPIO_Config();
		TIM1_PWM_Init(199,7199);//(7200*200)/72000000=0.02=20ms
		
		KEY_Config();
		LED(ON);

		while(1)
		{   
			OLED_OFF();//测试OLED休眠
			LED(ON);
			wait=1;
			SysTick_Delay_Ms(1500);
			if(wait==0)
			{
				OLED_ON();
				switch(a)
				{
					case 1:type_1();break;
					case 2:type_2();break;
					case 3:type_3();break;
					case 4:type_4();break;
					case 5:type_5();break;
					case 6:type_6();break;
				}
				wait=1;
				OLED_OFF();
				a++;
				if(a==7)
				{
					a=1;
				}
			}
			
		}
			
			
}


//直接开
void type_1(void)
{
			TIM_SetCompare1(TIM1,184); //45度,1ms
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP3);//测试BMP位图显示
			SysTick_Delay_Ms(1500);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(1000);
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(200);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(800);
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(1000); 
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(2000);  
}

//快开
void type_2(void)
{
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP5);//测试BMP位图显示
			TIM_SetCompare1(TIM1,183); //45度,1ms
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(1000);
			
			
			TIM_SetCompare2(TIM1,174);
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(500); 
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			SysTick_Delay_Ms(2000);          
}

//挨打

void type_3(void)
{
			TIM_SetCompare1(TIM1,184); //45度,1ms
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP3);//测试BMP位图显示
			SysTick_Delay_Ms(700);
			
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(700);

			TIM_SetCompare1(TIM1,184);
			SysTick_Delay_Ms(200);
			TIM_SetCompare1(TIM1,182);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//测试BMP位图显示
			SysTick_Delay_Ms(170);
			TIM_SetCompare1(TIM1,184);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP5);//测试BMP位图显示
			SysTick_Delay_Ms(200);
			TIM_SetCompare1(TIM1,182);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//测试BMP位图显示
			SysTick_Delay_Ms(170);
			TIM_SetCompare1(TIM1,184);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP2);//测试BMP位图显示
			SysTick_Delay_Ms(200);
			TIM_SetCompare1(TIM1,182);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//测试BMP位图显示
			SysTick_Delay_Ms(170);
			TIM_SetCompare1(TIM1,184);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP2);//测试BMP位图显示
			SysTick_Delay_Ms(200);
			TIM_SetCompare1(TIM1,182);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//测试BMP位图显示
			SysTick_Delay_Ms(170);
			TIM_SetCompare1(TIM1,184);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP2);//测试BMP位图显示
			SysTick_Delay_Ms(200);
			TIM_SetCompare1(TIM1,182);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP1);//测试BMP位图显示
			SysTick_Delay_Ms(170);
			
			
			TIM_SetCompare1(TIM1,184);
			TIM_SetCompare2(TIM1,186);
			SysTick_Delay_Ms(1500);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP4);//测试BMP位图显示
			TIM_SetCompare2(TIM1,186);
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(600);
			TIM_SetCompare2(TIM1,186);
			SysTick_Delay_Ms(500);
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(300);
			TIM_SetCompare2(TIM1,186);
			SysTick_Delay_Ms(500);
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(300);
			TIM_SetCompare2(TIM1,186);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP5);//测试BMP位图显示
			SysTick_Delay_Ms(500);
			
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(300);
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(600); 
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			SysTick_Delay_Ms(2000); 
}

//偷看

void type_4(void)
{
			TIM_SetCompare1(TIM1,182); //45度,1ms
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP4);//测试BMP位图显示
			SysTick_Delay_Ms(2000);
			TIM_SetCompare1(TIM1,184);
			SysTick_Delay_Ms(1000);
			TIM_SetCompare1(TIM1,179);
			TIM_SetCompare2(TIM1,176);
			SysTick_Delay_Ms(1500);
			
			TIM_SetCompare1(TIM1,183);
			TIM_SetCompare2(TIM1,190);
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP3);//测试BMP位图显示
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(700);
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(600);
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			SysTick_Delay_Ms(5000);
}

//调戏
void type_5(void)
{
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP3);//测试BMP位图显示
			TIM_SetCompare1(TIM1,183); //45度,1ms
			SysTick_Delay_Ms(1500);
			TIM_SetCompare2(TIM1,187);
			SysTick_Delay_Ms(1500);
			
			OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP4);//测试BMP位图显示
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(500);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(300);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(100);
			TIM_SetCompare2(TIM1,190);
			SysTick_Delay_Ms(100);
			
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(1300);
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(400);
			
	
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(600);
			TIM_SetCompare1(TIM1,177);
			SysTick_Delay_Ms(2000);
	}

void type_6(void)
{
				OLED_DrawBMP(0,0,128,8,(unsigned char *)BMP5);//测试BMP位图显示
			TIM_SetCompare1(TIM1,183); //45度,1ms
			TIM_SetCompare2(TIM1,192);
			SysTick_Delay_Ms(1000);
			
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(500); 
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			SysTick_Delay_Ms(2000);    
			TIM_SetCompare1(TIM1,183); //45度,1ms
			
			TIM_SetCompare2(TIM1,191);
			SysTick_Delay_Ms(500); 
			
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,189);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,188);
			SysTick_Delay_Ms(200); 
			TIM_SetCompare2(TIM1,187);
			SysTick_Delay_Ms(500); 
			
			TIM_SetCompare2(TIM1,174);
			SysTick_Delay_Ms(500); 
			TIM_SetCompare1(TIM1,177); //90,1.5ms
			SysTick_Delay_Ms(2000);    
}
	

整个软件设计的核心是通过PWM控制舵机的角度,结合OLED屏幕的图像显示和延时函数,实现一系列预定义的动作。通过主循环中的变量 `a` 来切换不同的动作类型,使得系统能够循环执行不同的动作序列。每个动作类型函数都精心设计了舵机的运动轨迹和OLED图像的显示。

六、3D模型的设计

对于3D模型ice.stl触手.STL触手辅助.stl舵机支架x2.STL合叶.stl盒子.stl盒子盖子.stl的设计,首先需要明确每个模型的用途和功能,然后根据实际需求选择合适的3D打印材料,如PLA、ABS、PETG等。对于ice.stl,确保尺寸符合需求并设计必要的支撑结构;触手.STL触手辅助.stl应考虑功能性、灵活性和稳固的连接点;舵机支架x2.STL需确保兼容性、稳定性和合适的安装孔;合叶.stl要考虑承重、活动范围和耐用性;盒子.stl盒子盖子.stl则需确保尺寸匹配、密封性和美观性。此外,所有STL文件应确保格式正确无误,打印前进行小批量测试以验证设计的可行性和打印质量。

6.1 ice.stl

在设计ice.stl时,作为底部零件。根据用途选择合适的3D打印材料,如PLA、ABS、PETG等,这些材料各有特点,适用于不同的环境和需求。确保模型的尺寸精确,符合实际应用的要求。如果模型包含悬空或复杂的几何结构,需要设计支撑结构以确保打印过程中的稳定性和最终的打印质量。

6.2 触手.STL

`触手.STL`是一个3D模型文件,设计用于实现类似触手的功能,用于机器人的手臂,在设计`触手.STL`时,需要考虑其功能性,如移动、抓取或其他特定动作,并确保模型能够实现这些功能。为了增加触手的灵活性,可以考虑使用柔性材料或设计可活动的关节,以便于触手在不同方向和角度上的运动。同时,设计稳固的连接点是关键,以确保触手能够与其他部件(如舵机支架)牢固连接,从而保证整个系统的稳定性和可靠性。在选择材料和打印设置时,应考虑到触手的使用环境和预期寿命,以选择最合适的3D打印材料和参数。

6.3 触手辅助.stl

触手辅助.stl是一个3D模型文件,作为触手.STL的辅助部件,增强触手的功能性或稳定性。在设计触手辅助.stl时,与主触手模型的兼容性和协同工作能力,包括额外的支撑结构、连接件或功能性组件,以提升触手的整体性能。例如,如果主触手需要额外的支撑以防止弯曲或断裂,辅助部件可以提供这种支持。或者,如果触手需要执行特定任务,如抓取或旋转,辅助部件可以包含相应的机械接口或传感器安装点。选择合适的材料和打印参数对于确保辅助部件的耐用性和功能性至关重要,同时也要确保其设计能够适应主触手的运动范围和操作需求。 

6.4 舵机支架x2.STL

舵机支架x2.STL是一个包含两个舵机支架的3D模型文件,设计用于固定和支撑两个舵机,以便它们可以安装在机器人、模型或其他自动化设备上。确保支架的尺寸和形状与所使用的舵机型号相匹配,以提供稳固的安装基础。支架应具备足够的强度和刚性,以承受舵机运转时的扭矩和振动。同时,设计应考虑到易于安装和拆卸,可能包括螺丝孔、定位销或其他固定机制。为了确保支架与设备的其他部分协调工作,可能需要进行精确的对齐和调整。选择合适的3D打印材料和参数对于确保支架的耐用性和可靠性至关重要,同时也要考虑到支架的重量和成本效益。

6.5 合叶.stl

合叶.stl是一个设计用于3D打印的模型文件,它代表了一个合页,即两个物体连接并允许它们之间进行旋转的机械装置。在3D建模过程中,这个文件会详细描绘合页的各个组成部分,如销钉、连接臂和安装座,保证它们协同工作来实现平滑的开合动作。合页设计需要确保足够的强度以承受反复运动导致的磨损,并考虑如何通过螺丝或其他方式将其固定在两个旋转相连的表面上。此外,设计还应该考虑3D打印过程中材料的选择和打印方向,以确保合页的耐久性和功能性

6.6  盒子.stl

盒子.stl是一个专为3D打印设计的模型文件,制作一个用于容纳和保护搞怪机器人的外壳。这个盒子设计考虑了机器人的尺寸、形状和功能需求,确保其内部空间足以容纳所有必要的电子元件和机械结构,同时提供足够的保护和美观的外观。设计中可能包括开口、切口或盖子,以便于访问机器人的控制面板、传感器和其他组件。此外,盒子可能还具备创意的外观设计,以增强搞怪机器人的趣味性和吸引力。在3D打印时,选择合适的材料和打印参数对于确保盒子的结构强度和耐用性至关重要,同时也要考虑到打印成本和时间效率。

6.7盒子盖子.stl

盖子.stl是一个为3D打印定制的模型文件,它设计用于覆盖和封闭一个盒子或其他容器,以保护内部物品免受外部环境的影响。这个盖子模型考虑了与盒子的精确匹配,确保紧密贴合以防止灰尘、水分或其他污染物进入。设计中可能包括把手、扣环或磁铁等固定机制,以便于打开和关闭盖子。此外,盖子可能还具有装饰性元素,以提升整体外观和用户体验。在3D打印过程中,选择适当的材料和打印设置对于确保盖子的密封性、耐用性和美观性至关重要。

详细资料:基于stm32单片机搞怪盒子设计.zip资源-CSDN文库

资料详情 :

code

models  

README.md

 材料清单:
 
 mg995舵机x2 ,12*2元
 
 0.96oled屏幕,10元
 
 拨动开关,5元
 
 c6t6核心板,6元
 
 3d打印,180元
 
 总计,235元

 待优化点:
 
 1.电池供电 
 
 2.板子整合,后面画个板子集成电路
 
 视频地址:基于stm32搞怪的盒子设计_哔哩哔哩_bilibili
 
 参考资料:https://www.bilibili.com/video/BV18h411d74v

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1905915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录——单调递增的数字(Leetcode738)

题目链接 贪心 class Solution {public int monotoneIncreasingDigits(int n) {char[] digits String.valueOf(n).toCharArray();int flag digits.length;for (int i digits.length - 1; i > 0; i--) {if (digits[i] < digits[i - 1]) {flag i;digits[i - 1]--;}}…

KVM把新添加的磁盘扩容到根目录

1、对新增的磁盘进行分区&#xff08;注&#xff1a;可省略&#xff09; PS&#xff1a;使用fdisk或gdisk&#xff08;大于2T时使用&#xff09;对新增磁盘进行分区。 [rootkvm-clinet ~]# fdisk/dev/sdb Welcome to fdisk (util‐linux 2.23.2).4 Changes will remain in …

GISSERVER 管理器发布切片服务

GISSERVER 管理器 1.0(私有化地图离线部署)可以为您发布切片服务&#xff0c;切片服务的概念可以见我以前的文章&#xff1a;如何生成像谷歌高德一样的切片地图。除了我们自己制作的切片外&#xff0c;我们最常见的是利用各类地图下载器下载的在线地图的切片。见&#xff1a;栅…

Qt文档阅读笔记-Queued Custom Type Example

此篇展示了使用Qt编写多线程程序。 概述 此案例创建一Block类&#xff0c;用于存储数据&#xff0c;并且在元对象系统中注册后&#xff0c;在多线程中进行信号与槽函数的连接中充当参数。 Block类 在元对象系统中&#xff0c;注册类&#xff0c;需要类在public部分提供默认构…

56、最近邻向量量化(LVQ) 网络训练对输入向量进行分类

1、LVQ 网络训练对输入向量进行分类简介 1&#xff09;简介 LVQ&#xff08;最近邻向量量化&#xff09;是一种简单而有效的神经网络模型&#xff0c;用于对输入向量进行分类。LVQ网络通过学习一组原型向量&#xff08;也称为代码矢量或参考向量&#xff09;&#xff0c;来表…

如何恢复已删除的音频文件

设备中文件被意外删除并不是什么新鲜事。但是&#xff0c;如果文件是你最喜欢的 MP3 歌曲&#xff0c;那就太令人沮丧了。但你知道吗&#xff0c;有一种方法可以从 Windows 机器中恢复已删除的音乐文件。尝试奇客数据恢复并检索已删除的音频文件。虽然产品名称听起来不像可以帮…

HTML5使用<blockquote>标签:段落缩进

使用<blockquote>标签可以实现页面文字的段落缩进。这一标签也是每使用一次&#xff0c;段落就缩进一次&#xff0c;并且可以嵌套使用&#xff0c;以达到不同的缩进效果。语法如下&#xff1a; <blockquote>文字</blockquote> 【实例】使用<blockquote&…

DC/AC电源模块的节能特点与环保优势

BOSHIDA DC/AC电源模块的节能特点与环保优势 在过去的几十年里&#xff0c;人们对电力的需求不断增加&#xff0c;这导致了电力系统的扩展和增加&#xff0c;为了满足这些需求&#xff0c;传统的交流&#xff08;AC&#xff09;电源系统在全球范围内广泛使用。然而&#xff0c…

8.1 栅格图层符号化整体说明

文章目录 前言栅格图层符号化总结 前言 地图制图是QGIS的优势所在&#xff0c;QGIS包含完整的地图制图功能&#xff0c;如标注与注记、符号化与地图综合等多种功能。 在地图制图过程中&#xff0c;必须经过符号化和地图综合两个最基本的操作。符号化&#xff08;Symbolization&…

《Nature》文章:ChatGPT帮助我学术写作的三种方式

图片翻译 ** 文章内容** 忏悔时间&#xff1a;我使用生成式人工智能&#xff08;AI&#xff09;。尽管在学术界关于聊天机器人是积极力量还是消极力量的争论不休&#xff0c;但我几乎每天都使用这些工具来完善我所写论文中的措辞&#xff0c;并寻求对我被要求评估的工作进行替…

MySQL性能优化 一、系统配置优化

数据库优化纬度有四个&#xff1a; 硬件升级、系统配置、表结构设计、SQL语句及索引。 优化选择&#xff1a; 优化成本&#xff1a;硬件升级 > 系统配置 > 表结构设计 > SQL语句及索引优化效果&#xff1a;硬件升级 < 系统配置 < 标结果设计 < SQL语句及索…

初中物理知识点总结(人教版)

初中物理知识点大全 声现象知识归纳 1 .声音的发生&#xff1a;由物体的振动而产生。振动停止&#xff0c;发声也停止。 2.声音的传播&#xff1a;声音靠介质传播。真空不能传声。通常我们听到的声音是靠空气传来的。 3.声速&#xff1a;在空气中传播速度是&#xff1a;340…

微服务-初级篇

微服务-初级篇 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务 SpringCloud2.1 了解2.2 服务拆分原则2.3 服务拆分效果 Nacos注册中心3.1 认识和安装Nacos3.1.1 Nacos下载3.1.2 Nacos安装 3.2 服务注册到Nacos Feign远程调用4.1 Feign引入4.2 Feign配置 认识微服务 1.1 单体…

Java-01-源码篇-04集合-05-SortedMap NavigableMap TreeMap

目录 一&#xff0c;SortedMap 二&#xff0c;NavigableMap 三&#xff0c;TreeMap 3.1 TreeMap 继承结构 3.2 TreeMap 属性 3.3 TreeMap 构造器 3.4 TreeMap 内部类 3.4.1 Values 3.4.2 KeySet 3.4.3 EntrySet 3.4.5 相关集合迭代器 3.4.5.1 PrivateEntryIterato…

RAID 冗余磁盘阵列

RAID也是Linux操作系统中管理磁盘的一种方式。 只有Linux操作系统才支持LVM的磁盘管理方式。 而RAID是一种通用的管理磁盘的技术&#xff0c;使用于多种操作系统。 优势&#xff1a;提升数据的读写速度&#xff0c;提升数据的可靠性。具体实现哪什么功能&#xff0c;要看你所…

开源六轴协作机械臂myCobot280实现交互式乘法!让学习充满乐趣

本文经作者Fumitaka Kimizuka 授权我们翻译和转载。 原文链接&#xff1a;myCobotに「頷き」「首振り」「首傾げ」をしてもらう &#x1f916; - みかづきブログ・カスタム 引言 Fumitaka Kimizuka 创造了一个乘法表系统&#xff0c;帮助他的女儿享受学习乘法表的乐趣。她可以…

【open3d专栏】利用PCA计算狭长点云的主方向

在点云处理中&#xff0c;PCA通常用于识别数据集中的主要方向&#xff0c;从而帮助理解数据的几何结构。 使用工具&#xff1a;python&#xff0c;open3d库 目的&#xff1a;计算狭长型点云的主方向 # -*- coding: utf-8 -*- """ Created on Sun Jul 7 11:50…

vb.netcad二开自学笔记9:界面之ribbon

一个成熟的软件怎么能没有ribbon呢&#xff0c;在前面的框架基础上再加个命令AddRibbon <CommandMethod("AddRibbon")> Public Sub AddRibbon() Dim ribbonControl As RibbonControl ComponentManager.Ribbon Dim tab As RibbonTab New RibbonTab() tab.Tit…

二手闲置平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;商品购买管理&#xff0c;商品配送管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&a…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器&#xff0c;专为低压和中压应用而设计&#xff0c;尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造&#xff0c;采用专利设计&#xff0c;将电阻元件与水基冷却液封装并完全分离&#xff0c;为水冷应用提供模块化、轻量级、小容量、高功率解…