news 2026/7/17 5:39:27

单舵机+压力传感器 控制接线方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单舵机+压力传感器 控制接线方案

一动一定」结构

  • 定刀片:固定在舵机机身侧面、或末端执行器的固定支架上,全程保持不动;
  • 动刀片:牢牢固定在舵机的输出舵盘上,跟随舵机轴做 0°~ 指定角度的往复旋转;
  • 舵机归零时,两刀片完全张开,形成足够的开口容纳葡萄果梗;舵机旋转到目标角度时,两刀刃重合交错,剪断果梗。
  • 适配硬件:Arduino Uno + MG996R 金属舵机
  • 接线对应:舵机信号线 → D9
  • 依赖库:Arduino 官方Servo.h
  • 标准动作时序:上电归零 → 待机检测→到位触发→剪切→复位回归

舵机线序定义

  • 红色线:电源正极(VCC,MG996R 支持 4.8V~7.2V,推荐 6V)
  • 棕色 / 黑色线:电源负极(GND)
  • 橙色 / 黄色 / 白色线:信号控制线(接收 PWM 脉冲信号,控制角度)

FSR 压力传感器

FSR 是压敏电阻型器件,本身不能直接输出可检测的电压,必须串联定值电阻组成分压电路,才能被 Arduino 模拟口正确读取。

  • 标准接法:FSR 一端接 5V,另一端同时接 A0 模拟口和 10kΩ 电阻,电阻另一端接 GND
  • 工作原理:FSR 受压后阻值降低,分压点电压升高,analogRead()读取的数值随之变大
  • 灵敏度调节:如果果梗压力很小、读数变化不明显,可将分压电阻换成 20kΩ~100kΩ 提升检测灵敏度

运行代码

1.压力校准调试版

先通过串口监视器读取实时压力值,确定触发阈值

#define FSR_PIN A0 void setup() { Serial.begin(9600); Serial.println("=== FSR压力校准模式 ==="); Serial.println("请观察数值:空载时数值小,按压时数值变大"); } void loop() { int pressureValue = analogRead(FSR_PIN); Serial.print("当前压力值:"); Serial.println(pressureValue); delay(200); // 每200ms刷新一次 }

校准方法

  1. 空载(刀片无接触)时,记录基础数值(通常为 0~50);
  2. 手动将葡萄果梗放到剪切位轻轻顶住,记录此时的压力数值;
  3. 取「空载值 + 果梗值」的中间值作为触发阈值,例如空载 30、果梗顶住 280,阈值可设为150

2.正式触发运行版

#include <Servo.h> Servo cutterServo; // 引脚定义 #define CUTTER_PIN 9 #define FSR_PIN A0 // 舵机角度参数 #define CUTTER_OPEN 10 // 张开位(留余量,避开0°死区) #define CUTTER_CLOSE 110 // 剪切闭合位(根据机械校准) // 时间参数(单位:ms) #define MOVE_TIME 600 // 舵机转动到位时间 #define HOLD_TIME 200 // 剪切保压时间 #define SHIELD_TIME 1000 // 剪切后屏蔽时间 #define CALI_TIME 2000 // 上电校准时长 // 压力参数 #define CHECK_TIMES 3 // 连续确认次数 #define PRESSURE_OFFSET 100 // 触发偏移量(基准值+偏移量=阈值) // 状态机状态 enum CutterState { STATE_IDLE, // 待机检测 STATE_CLOSING, // 闭合中 STATE_HOLDING, // 保压中 STATE_OPENING, // 复位张开中 STATE_SHIELD // 屏蔽期 }; CutterState currentState = STATE_IDLE; unsigned long stateTimer = 0; // 压力基准值 int basePressure = 0; void setup() { Serial.begin(9600); cutterServo.attach(CUTTER_PIN); // 上电归零张开 cutterServo.write(CUTTER_OPEN); delay(MOVE_TIME); // 自动校准空载基准 Serial.println("=== 正在自动校准空载压力 ==="); long sum = 0; int count = 0; unsigned long caliStart = millis(); while (millis() - caliStart < CALI_TIME) { sum += analogRead(FSR_PIN); count++; delay(10); } basePressure = sum / count; Serial.print("空载基准值:"); Serial.println(basePressure); Serial.print("触发阈值:"); Serial.println(basePressure + PRESSURE_OFFSET); Serial.println("系统就绪,等待果梗触发..."); } void loop() { unsigned long now = millis(); switch (currentState) { case STATE_IDLE: // 连续检测防抖 if (checkPressureTrigger()) { Serial.println("果梗到位,开始剪切"); cutterServo.write(CUTTER_CLOSE); stateTimer = now; currentState = STATE_CLOSING; } break; case STATE_CLOSING: if (now - stateTimer >= MOVE_TIME) { stateTimer = now; currentState = STATE_HOLDING; } break; case STATE_HOLDING: if (now - stateTimer >= HOLD_TIME) { cutterServo.write(CUTTER_OPEN); stateTimer = now; currentState = STATE_OPENING; } break; case STATE_OPENING: if (now - stateTimer >= MOVE_TIME) { stateTimer = now; currentState = STATE_SHIELD; Serial.println("剪切完成,进入屏蔽期"); } break; case STATE_SHIELD: if (now - stateTimer >= SHIELD_TIME) { currentState = STATE_IDLE; Serial.println("回到待机状态"); } break; } } // 压力触发检测(防抖) bool checkPressureTrigger() { int threshold = basePressure + PRESSURE_OFFSET; for (int i = 0; i < CHECK_TIMES; i++) { int val = analogRead(FSR_PIN); if (val < threshold) { return false; } delay(5); } return true; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 5:38:54

Mac浏览器频繁崩溃的六大原因与终极解决方案

1. Mac浏览器意外退出的常见现象与影响范围最近半年&#xff0c;我的M1 MacBook Pro频繁出现浏览器闪退问题。最严重时&#xff0c;一天内Chrome崩溃7次&#xff0c;Edge崩溃4次&#xff0c;Safari相对稳定但也有2次意外退出。这种情况不仅发生在浏览复杂网页时&#xff0c;有时…

作者头像 李华
网站建设 2026/7/17 5:37:12

C++二维数组内存布局与性能优化实战指南

1. 项目概述&#xff1a;为什么二维数组值得你花时间&#xff1f;如果你正在学习C&#xff0c;或者已经写过一些代码&#xff0c;二维数组这个概念你肯定不陌生。它看起来就是一个表格&#xff0c;有行有列&#xff0c;用来存个矩阵、地图或者游戏棋盘&#xff0c;似乎没什么特…

作者头像 李华
网站建设 2026/7/17 5:37:03

Python agent-coder 包详解:功能、安装、语法与实战案例

1. 引言在 AI 编程助手快速发展的今天&#xff0c;agent-coder 作为一款专注于代码生成的 Python 包&#xff0c;为开发者提供了从自然语言描述到可运行代码的端到端解决方案。本文将全面介绍 agent-coder 的核心功能、安装配置、语法参数&#xff0c;并通过 8 个实际案例展示其…

作者头像 李华
网站建设 2026/7/17 5:30:45

手机地图3D实景功能详解与应用技巧

1. 手机地图隐藏功能揭秘&#xff1a;家门口的上帝视角上周帮邻居王阿姨找走失的宠物时&#xff0c;意外发现手机地图里藏着个"望远镜"功能。打开特定开关后&#xff0c;连她家阳台花盆的摆放位置都看得一清二楚&#xff0c;最后在小区绿化带角落找到了那只胖橘猫。这…

作者头像 李华
网站建设 2026/7/17 5:30:04

电子电路滤波技术:从基础原理到工程实践

1. 滤波电路基础概念与分类在电子电路设计中&#xff0c;滤波电路扮演着至关重要的角色。简单来说&#xff0c;滤波电路就是能够允许特定频率范围内的信号通过&#xff0c;同时抑制其他频率信号的电子网络。这种频率选择特性使其成为电源设计、信号处理和通信系统中的核心组件。…

作者头像 李华