7444ee029d4b2c7644424c60038bfa67.mp4

#include <Servo.h> Servo servoMotor; servoMotor.attach(9);

伺服电机需要引入Servo .h 库来设置舵机的控制信号,

int analogValue = analogRead(A0);

跟PWM脉冲调制相关,analogWrite将给伺服电机输出范围0-1023的数值,相当于0-3.3V的电压

servoMotor.write(servoAngle);

电机的输入角度

lastMove Time:

如果每毫秒FSR都有一个数值变化,这在伺服电机上毫无作用,会因为变化而产生抖动。

1秒钟调整50次没有任何意义,只需要20毫秒一次就可以了

这段代码中mills表示了开机到运行到此处的时间,全局时间

这段代码的解释是如果开机时间到上次电机移动时间之差大于20毫秒并且伺服电机最后一次角度小于0,或者更新角度与上一次角度之差的绝对值大于1的话,伺服电机更新角度,最后一次的角度变成当前角度,最后一次移动时间记录成当前全局时间。

if (millis() - lastMoveTime >= 20 && (lastAngle < 0 || abs(angle - lastAngle) > 1)) { servo.write(angle); lastAngle = angle; lastMoveTime = millis(); }

如果想要按压后电机角度不变直到下次按压时再更改角度则可以变成:(理论代码)

int fsrValue = analogRead(A0); if (fsrValue > threshold) { // 只有当用力超过阈值时才更新 servoAngle = map(fsrValue, threshold, 1023, 0, 179); servo.write(servoAngle); lastAngle = servoAngle; // 记住这个角度 } else { servo.write(lastAngle); // 松开时保持在上一次角度 }

关于加电容的原因:电容可以在Servo、DC Motor、Stepper Motor启动时稳定电路中的电流,

也可以在电路中没有上述电机时,在传感器和 Arduino 的输入端加一个 小电容 (0.1µF~1µF) 到 GND(当电路中传感器的值非常不稳定的时候)

电机启动/转动时会产生大电流冲击和电磁干扰,很容易导致 Arduino 重启、串口卡死、LED 闪烁异常。在电源两端加 大电解电容 (470µF~1000µF),吸收瞬间电流波动。在电机端子加 小陶瓷电容 (0.1µF~0.47µF),抑制电磁干扰。