本帖最后由 jerry_jn 于 2025-7-17 09:55 编辑
作为一个玩了几年单片机的,最近发现很多新手小伙伴总觉得 “做硬件” 是遥不可及的事。其实真不是!今天就带大家从零开始,用单片机做一个能用机械臂按电灯开关的无线控制器,材料好找、步骤简单,手残党也能轻松拿捏~
先说说为啥要做这个?
你有没有过这种经历:冬天窝在被窝里不想动,却要爬起来关灯;或者手里拿着东西腾不出手按开关?这个四轴飞行器械臂开关就能完美解决!它不用改装家里的电路,直接用两个小机械臂模拟人手按开关,安全性拉满,租房党也能放心用。
材料清单(附采购小技巧)
做这个项目不用花大价钱,我列的都是性价比高的基础款:
主控:STM32F103C8T6 最小系统板(新手选这个准没错,资料多到用不完)
无线模块:NRF24L01(几十块钱就能搞定双向通信,稳定性远超蓝牙模块)
机械臂:SG90 舵机 ×2(别看它小,力气大到能轻松按动开关,重量还轻)
电源:18650 锂电池 + 充电模块(续航超给力,充一次能用半个月)
其他:杜邦线、面包板、小木板(用来固定机械臂,快递盒剪一块也能凑合用)
采购小技巧:某多多搜 “单片机新手套装”,经常能捡到带全部零件的套餐,比单买便宜 30%!
制作步骤(全程无难点,跟着做就行)
第一步:组装机械臂
把两个 SG90 舵机用热熔胶固定在小木板上,角度调整成能正好碰到开关按钮(这里可以多试几次,别急着粘死)。记得给舵机臂装上调焦用的小拨片,增加接触面积,按开关更稳。
第二步:搭建电路
这一步别怕,照着接线图来就行,错了也不会烧零件(单片机没那么娇气):
STM32 的 5V 引脚接 NRF24L01 的 VCC
舵机的信号线分别接 PA0 和 PA1
无线模块的 SCK 接 PB13,MISO 接 PB14(具体看 datasheet,记错了也能调)
实在不会接线的小伙伴,评论区扣 1,我发你带标注的实物图~
第三步:写代码(附关键片段)
不用自己从头写,我把代码精简到了 200 行,新手也能看懂:
// 舵机转动函数,angle是角度(0-180)
void Servo_SetAngle(u8 servo, u16 angle){
if(servo==1) TIM_SetCompare1(TIM2, angle+500);
else TIM_SetCompare2(TIM2, angle+500);
}
// 无线接收函数,收到指令就动机械臂
void NRF24L01_RxHandle(){
if(NRF24L01_RxData(rxbuf,32)){
if(rxbuf[0]=='1'){ // 开电灯指令
Servo_SetAngle(1, 90); // 机械臂1转动90度
delay_ms(200);
Servo_SetAngle(1, 0); // 复位
}
}
}
完整代码我放在文末的网盘链接里了,直接下载烧录就行,还带详细注释。
第四步:调试优化
烧录完代码后先别急着固定,用遥控器(可以用另一个 NRF 模块做个小遥控器,或者直接用手机 APP)测试一下:按 “开” 键时,机械臂能不能准确碰到开关?力度够不够?如果按不动,就把舵机位置再调低 2 毫米,保证一次成功。
避坑指南(这些错我全踩过)
舵机抖动?把电源换成锂电池,USB 供电容易因为电流不稳导致抖动
无线距离近?给 NRF24L01 加个小天线,用铜丝弯一个就能增强信号
机械臂错位?在开关旁边贴一小块海绵,增加缓冲,再也不怕按不准
成品效果
做好后你会发现,这小东西简直太香了!躺在床上用遥控器一按,机械臂 “咔哒” 一声就开灯,朋友来家里看到都问在哪买的~ 关键是全程自己动手,成就感直接拉满! |