controllare la posizione di un servomotore

ciao a tutti sono un ragazzo di 14 anni appassionato di elettronica
volevo costruire un braccio elettronico che scrive la aprola ciao ho gia il progrtto in mente ma non riesco a far funzionare un servomotore.
vorrei far andare avanti il servomotore di 3 millimetri come faccio?

void loop() 
{ 
  myservo.write(0);
  delay(1000);

  myservo.write(90);
  delay(1000);

  myservo.write(180);
  delay(1000);
}

ho provato cosi ma mi da errore

ciao Andrea
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

Se vuoi scrivere in lingua italiana devi farlo nella parte italiana del Forum.

Come alimenti i servo? Con un alimentatore esterno? Hai collegasto il polo negativo alla massa (GND) di Arduino.
Che mesaggi di errore Ti da?
Copiaci lo sketch intero.
Ciao Uwe

Salve,
sono un neofita di arduino e purtroppo ho anche io questo problema (riprendo questo post per non aprirne di nuovi).
Il mio progettino prevede la rotazione di un servo (MicroServo 9G) di 90 gradi, quando la temperatura letta da un termistore supera i 50 gradi Centigradi.
Ho notato che quando si raggiunge tale temperatura, il servo effettivamente gira ma poi giunto a in posizione inizia a vibrare, come se sforzasse.
Non so da cosa possa dipendere questo comportamento, forse dal fatto che il comando del servo è nel loop? Quindi riaggiorna sempre la stessa posizione? Come potrei risolvere il problema?
Vi ringrazio anticipatamente per la risposta

#include <LiquidCrystal.h>
 #include <DHT11.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 #include <Servo.h>
Servo myservo;
#define ONE_WIRE_BUS 13 
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  
void setup() {
 myservo.attach(9);
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("- - - TEST - - -");
  lcd.setCursor(0, 1);
  lcd.setCursor(1, 1);
   lcd.print("by Roberto");
  Serial.begin(9600);
  sensors.begin();
 }
 
void loop() {
  lcd.setCursor(0, 0);
       sensors.requestTemperatures() ;
       lcd.print("Temp. OUT:");
         lcd.print(sensors.getTempCByIndex(0));
      Serial.println(sensors.getTempCByIndex(0));
         lcd.setCursor(0, 1);
         lcd.print("                       ");
     delay(1000);
      if (sensors.getTempCByIndex(0)>50){
      myservo.write(0);
        delay(1000);
 }else{
    myservo.write(90);
  delay(1000);
}
}

rosco28:
Ho notato che quando si raggiunge tale temperatura, il servo effettivamente gira ma poi giunto a in posizione inizia a vibrare, come se sforzasse.

Vibra perché non tutti i servo possono ruotare di +/-90, riduci leggermente l'angolo e vedrai che non vibra più.

Ciao astrobeed,
purtroppo vibra sempre anche da 10 a 15 gradi :~

rosco28:
purtroppo vibra sempre anche da 10 a 15 gradi :~

Se è sotto carico meccanico costante può essere normale che vibra, sopratutto se il servo è sottodimensionato, se lo fa a vuoto allora o è difettoso oppure è una cineseria.

Il motorino gira libero, non l'ho caricato. Sono riuscito a trovare un modo per risolvere il problema disattivando e riattivando il pin in PWM. Riporto il codice del loop, grazie comunque per l'aiuto :slight_smile:

void loop() {
    int pos = 0;
       sensors.requestTemperatures() ;
         Serial.println(sensors.getTempCByIndex(0));
      if ((sensors.getTempCByIndex(0)>31) && (pos!=myservo.read())){
      myservo.attach(9);    
      myservo.write(0);
        delay(100);
 }else{
  myservo.detach();
  delay(100);
}
 if ((sensors.getTempCByIndex(0)<31) && (pos==myservo.read())){
       myservo.attach(9);    
      myservo.write(90);
        delay(100);
 }else{
  myservo.detach();
  delay(100);
}
}

rosco28:
Il motorino gira libero, non l'ho caricato. Sono riuscito a trovare un modo per risolvere il problema disattivando e riattivando il pin in PWM. Riporto il codice del loop, grazie comunque per l'aiuto :slight_smile:

Questa non è una soluzione, è solo un palliativo, il servo richiede costantemente la presenza del segnale PPM di controllo.

Secondo me la causa del tremore é la qualitá del servo. Cosa Ti aspetti da un pezzo da 3?
Ciao Uwe

Sono d'accordo, magari non è un modo elegante per risolvere il problema ma le mie conoscenze su Arduino portano a questo, magari con un pò di esperienza riuscirò a diminuire le "toppe" presenti nel codice :slight_smile: