Salve a tutti,
ho un piccolo (per voi) problema che mi crea un grande (per me) disagio.
premesso che di elettronica ne so praticamente 0 e d'informatica forse tocchiamo 1 (scala 1:100)
mi spiego:
ho aquistato un servo motore da sparkfun
e gli ho implementato un semplice codice che collega il servo motore al pin 9 PWM e lo fa ruotare di 90 e 180° con un delay di 2 secondi.
il servomotore ha 3 fili rosso, nero e blu
il rosso l'ho collegato al 5v di arduino (tester 4v46), il nero su GND
il blu al pin 9 PWM
MA:
Quando collego il servomotore (indipendentemente dal pin9) all'alimentazione il servo effettua 2 rotazioni (in tutto saranno 20 gradi) con un'intervallo di tempo di 1 secondo circa dopodichè sembra non funzionare più
ho pensato, visto che i big dicono sempre che arduino non è una centrale elettrica, di collegare una batteria di 6v (tester 5v58) direttamente al servo ed il blu sul pin9
adesso mi chiedo... ci va qualche resistenza aggiuntiva?
ho sbagliato a collegare i cavi?
dovrò gettarlo?
perchè piove sempre nello stesso istante ijn cui stacco da lavorare ?
vi ringrazio dell'attenzione e scusandomi ancora spero facciate una buona serata
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
non so cosa sia un PPM (e sinceramente ne so poco anche dei PWM) e mi piacerebbe molto saperne di più.
sono entrato da pochissimo (1 mesetto circa) nel mondo di arduino riuscendo a far accendere ben 10 led in vari modi differenti
ho semplicemente alcune conoscenze nei linguaggi di codice (ma veramente alcune ).
per favore aiutatemi, riuscirei a far esplodere casa con l'arduino...
... io mi ci voglio divertire, mica ammazzare
Salve, con i servi a rotazione continua la variabile che imposti non dà al servo l'angolo di rotazione del suo alberino, bensì il verso di rotazione e la velocità. Ora non ricordo molto bene i valori di riferimento quindi potrei sbagliare: prova a passargli prima 0 come valore e lo vedrai girare a massima velocità in senso antiorario; poi prova con 180 come valore e girerà in senso orario sempre a massima velocità. Più ci si avvicina a 90 quindi un valore intermedio, la velocità del servo diminuisce fino a fermarsi.
Saluti.
Pelletta:
Salve, con i servi a rotazione continua la variabile che imposti non dà al servo l'angolo di rotazione del suo alberino, bensì il verso di rotazione e la velocità. Ora non ricordo molto bene i valori di riferimento quindi potrei sbagliare: prova a passargli prima 0 come valore e lo vedrai girare a massima velocità in senso antiorario; poi prova con 180 come valore e girerà in senso orario sempre a massima velocità. Più ci si avvicina a 90 quindi un valore intermedio, la velocità del servo diminuisce fino a fermarsi.
Saluti.
ho riscontrato un'altro problema nell'utilizzo della seriale di comunicazione.
se inizializzo la seriale mi scrive quest'errore:
inizialmente mi da quest'errore:
processing.app.SerialException: Serial port 'COM4' not found. Did you select the right one from the Tools > Serial Port menu?
at processing.app.Serial.(Unknown Source)
at processing.app.Serial.(Unknown Source)
at processing.app.debug.Uploader.flushSerialBuffer(Unknown Source)
at processing.app.debug.AvrdudeUploader.uploadViaBootloader(Unknown Source)
at processing.app.debug.AvrdudeUploader.uploadUsingPreferences(Unknown Source)
at processing.app.Sketch.upload(Unknown Source)
at processing.app.Sketch.exportApplet(Unknown Source)
at processing.app.Sketch.exportApplet(Unknown Source)
at processing.app.Editor$DefaultExportHandler.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
ma la porta com4 è settata, quindi salvo e riavvio
ci riprovo e questa volta l'errore è:
Error inside Serial.serialEvent()
java.io.IOException: Bad file descriptor in nativeavailable
at gnu.io.RXTXPort.nativeavailable(Native Method)
at gnu.io.RXTXPort$SerialInputStream.available(RXTXPort.java:1532)
at processing.app.Serial.serialEvent(Unknown Source)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
Codice utilizzato
int Pin =9;
void setup() {
Serial.begin(9600);
Serial.println("Pronto!");
}
void loop() {
analogWrite(9,0);
if (Serial.available()>0) {
delay(500);
int Valore =Serial.read();
analogWrite(9,Valore);
Serial.println(Valore);
}
}
con analogWrite(Pin,0) il servo si ferma... ma l'arduino va in tilt comunque... dovrei aggiungerci qualche componente fisica?
una resistenza, una bomba!!!
già fatto, il problema è a monte...
sia con analogWrite che con la libreria (sketch preso dagli esempi di arduino knob e sweep) mi nascono quegli errori
ho pensato che il problema fosse il codice e son partito dal principio (azzerare l'analogWrite) e lì ho notato che se implemento il seriale mi genera quel codice.
l'errore che descrivi è dell'ide di arduino... che versione usi? è un problema con rxtx.jar, ovvero le librerie java per comunicare in seriale.
l'errore "not found" di solito compare quando:
usb non collegata
usb appena collegata e non ancora riconosciuta dal SO
altro programma sta usando quella porta seriale
il secondo errore invece sembra indicare il fatto che la libreria NON è integra... prova a scaricare di nuovo l'IDE
continuo a ringraziare tutti per i vostri suggerimenti.
lesto, ho cambiato l'ide scaricando la 22 e tentando di far funzionare ancora questo motore servo "rotativo" mi imbatto in una novità.
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
Serial.println("incremento");
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos);
Serial.println(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
Serial.println("decremento");
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
Serial.println(pos);
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
l'arduino non carica lo sketch se il servo è collegato, ho scollegato il componente ed uppato lo sketch.
a sketch caricato la seriale funziona normalmente (vedo i numerini salire e scendere) ma come ricollego il servo...
BOOM!!!
mi si riblocca tutto dandomi l'errore della seriale.
servo che ciuccia troppa corrente, probabilmente. alimenta il servo con una batteria esterna, ricorda che il gnd va messo in comune con l'arduindo e la batteria (il -)
Guarda il datasheet del servo, se ti dice che puoi alimentarlo anche a 6V lo colleghi diretto alla batteria. Il negativo della batteria deve anche esso essere collegato sul GND di arduino altrimenti non funziona.
Se il servo non può sostenere 6V occorre mettere un regolatore di tensione; se ad esempio il servo funziona con 5V massimi devi usare un regolatore a basso drop out oppure mettere una batteria più grande (il comune lm7805 non va bene con 6V in ingresso).
Saluti
Tranquillo, ci siamo passati tutti.
Il positivo della batteria va sul positivo del servo, il negativo della batteria va sul negativo del servo E sul GND di arduino, infine sul pin di segnale del servo va un pin pwm di arduino.
Se la batteria non è maggiore di 6V stando al datasheet non corri nessun rischio.
Ciao.