sto cercando di realizzare un gripper meccanico con apre e chiude la "pinza" tramite servo azionato da un pulsante, questo il codice:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
#define servoPin 3 //~
#define pushButtonPin 2
int angle =90; // initial angle for servo
int angleStep =5;
const int minAngle = 50;
const int maxAngle = 110;
int buttonPushed =0;
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 3 to the servo object
pinMode(pushButtonPin,INPUT_PULLUP);
Serial.println("Robojax Servo Button ");
}
void loop() {
if(digitalRead(pushButtonPin) == LOW){
buttonPushed = 1;
}
if( buttonPushed ){
// change the angle for next time through the loop:
angle = angle + angleStep;
// reverse the direction of the moving at the ends of the angle:
if (angle <= minAngle || angle >= maxAngle) {
angleStep = -angleStep;
buttonPushed = 0;
}
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
delay(100); // waits for the servo to get there
}
}
Quando spingo il pulsante sento che il servo prova a girare ma senza rotazioni si sentono tipo degli scatti ma non ruota!
Il servo è connesso con arancio sul pin arduino, rosso ad alimentazione esterna +5, marrone gnd alimentazione esterna e gnd arudino.
Dove sta il problema?
Sul progetto c'era scritto di mettere una resistenza da 10, cmq si sente il rumore di movimento del motore ma non ruota. Al monitor seriale le rotazioni vengono scritte
correttamente
la resistenza credo che sia per il pulsante non per il servo...
Il cavo arancio non era collegato al servo?
Prova a postare una foto completa del cablaggio (servo + pulsante), magari il problema è li
Sei sicuro che non si muove...
Premi il pulsante e l'angolo cambia di 5 gradi, da seriale si vede l'incremento dell'angolo.
Il fatto è che uno spostamento di 5 gradi del servo non è visibile.
Fai una prova invece di incrementare la variabile di 5, incrementa di 30-40, e vedi se il servo si muove, se fosse vuol dire semplicemente che 5 gradi sono troppo pochi per percepire il movimento
In realtà quello è solo l'incremento.
Il servo dovrebbe arrivare al limite massimo o minimo, una volta raggiunto azzera la variabile buttonPushed e interrompe il comando in quanto questo
Errore mio nell' interpretazione, premi pulsante e la variabile diventa uno ma resta uno fino a posizione zero o max
Poi un programma del genere usato al posto di un semplice servo.write(), serve solo per rallentare il movimento con un delay(), se necessaria lo sa solo l'autore.
Allora si in effetti impostando delay a 10 e angleStep a 10 adesso funziona perfettamente!
Ora però vorrei ad esempio stoppare la rotazione quando il grip afferra un oggetto.... che tipo di sensore mi servirebbe?
Se vuoi esercitare pressione diverse allora un sensore di pressione.
Ma spesso in robot amatoriali non abbiamo un sistema del genere, allora possiamo usare un pulsante con accorgimenti "meccanici", esempio una gomma sulla pinza che solo dopo essere compressa attiva il pulsante.Ma lavora dove ti è più congegnale, la meccanica o elettronica e programma.