从玩具车到传送带:5个Arduino+MG995/996R的实用小项目源码分享

发布时间:2026/6/11 4:50:29

从玩具车到传送带:5个Arduino+MG995/996R的实用小项目源码分享 从玩具车到传送带5个ArduinoMG995/996R的实用小项目源码分享当你手里拿着一台MG995或MG996R连续旋转舵机时是否曾想过这个看似简单的元件能玩出多少花样不同于普通舵机的角度定位功能连续旋转舵机更像是一个可调速的小马达这恰恰为创客们打开了无限可能。本文将带你跳出传统教程框架直接进入五个真实可落地的项目实践每个项目都配有核心代码和关键实现思路。1. 简易循线小车驱动系统连续旋转舵机在机器人领域最常见的应用就是作为移动平台的动力源。相比直流电机它自带减速箱和驱动电路省去了额外的电机驱动模块。材料清单Arduino Uno ×1MG996R舵机 ×2红外循线传感器 ×3小车底盘套件 ×118650电池 ×2接线示意图// 引脚定义 #define LEFT_MOTOR 9 #define RIGHT_MOTOR 10 #define SENSOR_L A0 #define SENSOR_M A1 #define SENSOR_R A2核心控制逻辑采用经典的PID算法#include Servo.h Servo leftWheel, rightWheel; void setup() { leftWheel.attach(LEFT_MOTOR); rightWheel.attach(RIGHT_MOTOR); // 初始化传感器引脚为输入 pinMode(SENSOR_L, INPUT); pinMode(SENSOR_M, INPUT); pinMode(SENSOR_R, INPUT); } void loop() { int sensorValues[3] { digitalRead(SENSOR_L), digitalRead(SENSOR_M), digitalRead(SENSOR_R) }; // PID计算误差值 float error sensorValues[0]*0.5 sensorValues[1]*0 - sensorValues[2]*0.5; // 基础速度纠偏输出 int baseSpeed 1600; // 基础前进速度 leftWheel.writeMicroseconds(baseSpeed error*50); rightWheel.writeMicroseconds(baseSpeed - error*50); delay(10); }调试技巧实际运行时可能需要根据地面反光情况调整红外传感器的阈值可通过串口监视器实时观察传感器读数。2. 迷你物流传送带模型利用舵机的持续旋转特性配合3D打印的传送带轮和硅胶皮带可以搭建一个微型物流分拣系统原型。关键参数计算项目参数值说明传送带长度30cm硅胶带周长运行速度5cm/s对应舵机1600μs脉冲最大载重200g需考虑舵机扭矩电机控制代码特别添加了软启动功能void gradualStart(Servo motor, int targetSpeed) { int current 1500; // 停止状态 while(current ! targetSpeed) { current (targetSpeed current) ? 10 : -10; motor.writeMicroseconds(current); delay(50); } } void setup() { Servo conveyorMotor; conveyorMotor.attach(6); // 启动传送带 gradualStart(conveyorMotor, 1600); // 运行30秒后停止 delay(30000); gradualStart(conveyorMotor, 1500); }传送带结构设计要点主动轮直径需与从动轮保持一致皮带张力要适中过紧会增加负载可在框架加装轴承减少摩擦3. 智能宠物喂食器旋转机构将舵机与螺旋送料机构结合可以制作定时定量的自动喂食装置。MG996R的金属齿轮能承受饲料的轻微反作用力。核心功能实现#include RTClib.h RTC_DS3231 rtc; void dispenseFood(int seconds) { Servo feeder; feeder.attach(5); // 正向旋转出料 feeder.writeMicroseconds(1300); delay(seconds * 1000); // 短暂反转防止卡料 feeder.writeMicroseconds(1700); delay(300); feeder.writeMicroseconds(1500); } void setup() { rtc.begin(); // 设置每天08:00和18:00自动喂食 DateTime now rtc.now(); DateTime nextMorning DateTime(now.year(), now.month(), now.day(), 8, 0, 0); DateTime nextEvening DateTime(now.year(), now.month(), now.day(), 18, 0, 0); } void loop() { DateTime now rtc.now(); if(now.hour() 8 now.minute() 0) { dispenseFood(3); // 出料3秒 delay(61000); // 防止重复触发 } if(now.hour() 18 now.minute() 0) { dispenseFood(3); delay(61000); } }机械结构制作建议使用PVC管作为储料仓3D打印螺旋推料杆出料口加装挡板防止潮湿整体结构要便于拆卸清洗4. 旋转展示平台控制系统博物馆或商场常见的展品旋转台用ArduinoMG995就能低成本实现。通过电位器可手动调节转速和方向。电路连接方式舵机信号线 → Arduino D910K电位器 → Arduino A3交互控制代码void setup() { Serial.begin(9600); servo.attach(9); } void loop() { int potValue analogRead(A3); int speed map(potValue, 0, 1023, 1300, 1700); // 死区过滤 if(abs(speed - 1500) 50) speed 1500; servo.writeMicroseconds(speed); // 调试输出 Serial.print(Pot: ); Serial.print(potValue); Serial.print( → Speed: ); Serial.println(speed); delay(100); }转速校准方法将电位器旋至中间位置微调代码中的map()参数用秒表测量实际转速重复调整直到符合要求5. 雷达扫描模拟器结合超声波传感器和连续旋转舵机可以制作有趣的雷达扫描演示装置。舵机带动传感器匀速旋转实时显示障碍物分布。系统架构[超声波传感器] ←I2C→ [Arduino] →PWM→ [MG995舵机] ↓ [OLED显示屏]核心扫描算法#include Wire.h #include Servo.h #include Adafruit_SSD1306.h Servo scanner; Adafruit_SSD1306 display(128, 64, Wire); void setup() { scanner.attach(9); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { for(int angle 0; angle 180; angle 5) { // 控制舵机转到指定角度 int pulse map(angle, 0, 180, 1000, 2000); scanner.writeMicroseconds(pulse); // 获取距离数据 float distance getSonarDistance(); // 极坐标转直角坐标 int x 64 distance * cos(radians(angle)); int y 32 - distance * sin(radians(angle)); // OLED显示 display.drawPixel(x, y, WHITE); display.display(); delay(50); } } float getSonarDistance() { // 模拟超声波测距代码 return random(10, 100); }性能优化建议实际应用时可考虑添加滑动平均滤波算法处理距离数据减少误报。扫描速度不宜过快建议每度间隔不小于30ms。

相关新闻