【项目复现】norkator/nano-l298n-gripper-driver

发布时间:2026/7/9 9:21:37
【项目复现】norkator/nano-l298n-gripper-driver Arduino Nano 控制夹爪的仓库包含 L298N 步进驱动、力敏电阻、限位开关和启动回零逻辑仓库https://github.com/norkator/nano-l298n-gripper-driver.git硬件复现清单Arduino Nano L298N 电机驱动模块 小型两相步进电机 薄膜压力传感器 FSR 限位开关 普通按键 电阻建议先用 10 kΩ 外部电机电源 杜邦线程序整体运行流程1. 上电 2. 执行 homing夹爪完全闭合直到碰到限位然后完全打开 3. 等待按钮按下控制夹爪开/合完整程序/* * L298N stepper driver gripper tester (Nano) ATmega328p * nano, gripper, film pressure sensor, homing switch, open close gipper push button */ // ## Libraries ## #include Stepper.h // ######################## // ## PIN CONFIGURATIONS ## // ######################## int motorA1 2; // stepper A1 int motorA2 3; // stepper A2 int motorB1 4; // stepper B1 int motorB2 5; // stepper B2 int endStopPin 7; // 回零限位开关 int toggleBtnPin 12; // 开合切换按钮 int firmPressurePin A0; // FSR压力传感器模拟输入 // Variables const int stepsPerRevolution 200; // 电机一圈 200 步 Stepper myStepper(stepsPerRevolution, motorA1, motorA2, motorB1, motorB2); // 直接用 Arduino 四个 IO 控制 L298N 的四个输入 const int stepperMotorSpeed 150; // 电机转速 rpm const int gripperStepsFullyOpen -1700; // 回零后全开需要反向1700步 boolean homingDone false; // 开机回零完成标志 boolean gripperOpen true; // 夹爪逻辑状态默认打开 boolean gripperClosed false; int gripPressureValue 0; // FSR实时压力读数 int currentStepPosition 0; // 当前夹爪相对全开位置的步数偏移 int gripPressureLimit 800; // 夹持压力上限超过停止夹紧 // SETUP void setup() { // Init serial Serial.begin(9600); //开启串口 9600 波特 // Init stepper myStepper.setSpeed(stepperMotorSpeed); // Pin modes 打印回零、调试信息 pinMode(endStopPin, INPUT_PULLUP); pinMode(toggleBtnPin, INPUT_PULLUP); } // LOOP void loop() { if (!homingDone) { homing(); } readGripperPressure(); // 按键按下翻转目标状态 int tInputVal digitalRead(toggleBtnPin); if (tInputVal LOW) { gripperOpen !gripperOpen; delay(1000); // wait so that toggle is not read again multiple times } // Gripper control 只有目标状态和当前实际状态不一致时才执行运动 if (gripperOpen) { if (gripperClosed true) { openGripper(); } } else { if (gripperClosed false) { closeGripper(); } } turnOffStepper(); } /** * Homing procedure * 1. close gripper more till hit estop * 2. open gripper fully * 3. set homing done */ void homing() { Serial.println(Homing gripper...); int steps 0; int eStopVal HIGH; while (eStopVal HIGH) { eStopVal digitalRead(endStopPin); myStepper.step(1); steps; } Serial.print(Gripper endstop hit at ); Serial.print(steps); Serial.println( steps.. gripper is fully closed); myStepper.step(gripperStepsFullyOpen); // open fully currentStepPosition gripperStepsFullyOpen; Serial.println(Gripper fully open, saving current position); homingDone true; } /** * */ void closeGripper() { int steps 0; int eStopVal HIGH; while (eStopVal HIGH gripPressureValue gripPressureLimit) { readGripperPressure(); eStopVal digitalRead(endStopPin); myStepper.step(1); steps; } currentStepPosition steps; gripperClosed true; } /** * */ void openGripper() { myStepper.step(-currentStepPosition); gripperClosed false; } /** * Turn off stepper driver * solves stepper driver overheating problem */ void turnOffStepper() { digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); } /** * */ void readGripperPressure() { // Read firm pressure sensor (force sensing resistor?) gripPressureValue analogRead(firmPressurePin); }项目启发夹持 步进电机闭合 力敏传感器判断复位 反向运动 限位开关判断停止 达到压力 / 限位后停止