Servo Motore e YUN

Ciao a Tutti.

Sto utilizzando una YUN rev. 2 appena comprata.

Ho già una UNO con cui sono riuscito a realizzare alla (quasi) perfezione un prototipo e ora sto cercando di trasferire il tutto sulla YUN per poter utilizzare internet.

Il mio problema (e penso che sarà il primo di mille) è con un micro servo SG90:
Con la UNO (ma anche con la YUN) il comando via seriale:

if (comando == 'a') {
   apri ();
  }

void apri() {

 for (int i = 90; i >= 0; i--) { //apertura servo
      servo1.write(i);
      delay(5);
    }

}

funziona alla perfezione, spostando il tutto sulla barra del browser non va nulla.

Provando una semplice lettura di sensore funziona, con il servo no:

void loop() {   
  BridgeClient client = server.accept();
  Bridge.begin();
  myservo.attach(4);
  Servo myservo;

  if (client) {
    String command = client.readString();
    command.trim();

    if (command == "temperatura") {
      int val = analogRead(A0);
      client.print(val);  
    }

    if (command == "apri") {

      for (int i = 0; i < 90; i++) { // chiude il vetro
      myservo.write(i);
      delay(5);
      client.print(i);
    }
    
  }
    
    client.stop();
}

  delay(50);
}

Ho provato a stampare “i” sia su console che su client e i valori escono (1-89).

Perdonatemi se la mia è una domanda stupida!
Vi super mega ringrazio in anticipo!

EDIT: il servo è alimentato da un power supply esterno

Non mettere MAI spezzoni troncati di codice perché ... quello che tu credi non possa sarvire invece è magari fondamentale ... ad esempio, che ne sappiamo di quali pin hai usato se elimini tutta la parte iniziale?

Altra cosa, .. è buona norma stampare quello che si pensa di aver ricevuto così da poter verificare se quello che si pensa corrisponde alla realtà ... ::slight_smile:

Guglielmo

Temo che esistano due oggetti servo

Dato che fa attach del servo prima di dichiararlo e sembra compilare

Penso che ci siano due oggetti servo con lo stesso nome, uno globale e uno locale

Vi ringrazio innanzitutto per le risposte tempestive.

Fortunatamente sono riuscito a farlo funzionare modificando il ciclo for con un semplice:

servo1.write(90);

il tempo di passare al modulo RFID (che ovviamente non funziona) e, tornato al servo per evitare la defenestrazione dello YUN, scopro che è tornato a non andare (stesso identico sketch)

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
#include <Servo.h>


BridgeServer server;
Servo servo1;

void setup() {
  
  servo1.attach(12);
  Bridge.begin();
  Serial.begin(9600);

  server.listenOnLocalhost();
  server.begin();
}


void loop() {

   BridgeClient client = server.accept();
 

     if (client) {
    String command = client.readString();
    command.trim();

    if (command == "temperatura") {
      int val = analogRead(A0);
      client.print(val);  
    }

    if (command == "servo") {
     servo();
    }

     if (command == "servo2") {
     servo2();
    }

  }
    
client.stop();
delay(50);

}

void servo() {

  servo1.write(90);
  Serial.println ("Mi sono abbassato");
}

void servo2() {

servo1.write(0);
Serial.println ("Mi sono alzato");
}

Ora il servo emette rumori ma non fa nulla. Con una piccola spinta si muove, poi si blocca e non si muove più. Un disastro insomma sia con il vecchio sketch e con la seriale, sia con wi-fi.

Mi chiedo se non sia il caso di mollare YUN e passare a UNO Wi-Fi. Cosa mi consigliate?

Grazie mille ancora!

Ma la massa dell'alimentatore del Servo e quella di Arduino, le hai messe in comune (... visto che hai due alimentazioni separate) ? ? ?

Guglielmo

In che senso scusami?

Ho utilizzato un alimentatore MB V2 Elegoo per la breadboard a cui è attaccato tutto il resto (tra cui il servo). Ho fatto qualche cavolata?

scanzifarm:
EDIT: il servo è alimentato da un power supply esterno

Mi riferisco a questa tua frase … cosa significa? Sembrerebbe che hai un alimentatore per Arduino ed uno per il Servo … se non è così spiega meglio … ::slight_smile:

Guglielmo

scanzifarm:
Vi ringrazio innanzitutto per le risposte tempestive.

Fortunatamente sono riuscito a farlo funzionare modificando il ciclo for con un semplice:

servo1.write(90);

Io vedo invece che hai cambiato la dichiarazione del servo, lo dicevo io che il problema era li...

gpb01:
Mi riferisco a questa tua frase ... cosa significa? Sembrerebbe che hai un alimentatore per Arduino ed uno per il Servo ... se non è così spiega meglio ... ::slight_smile:

Guglielmo

Esatto. Arduino è alimentato da cavo

Standardoil:
Io vedo invece che hai cambiato la dichiarazione del servo, lo dicevo io che il problema era li...

In effetti la dichiarazione è cambiata :smiley: quindi grazie!

Il motivo per cui non ho caricato tutto lo sketch prima è che sono molto, molto disordinato e finisco per non capirci più nulla nemmeno io :sob: :sob: :sob:

scanzifarm:
Esatto. Arduino è alimentato da cavo

Quindi, Arduino ha una sua alimentazione (cosa è, il cavo USB ?) ed il servo ha un suo alimentatore … giusto?

SE è così il GND di Arduino DEVE essere collegato al GND dell’alimentatore dei servo!

Guglielmo

gpb01:
Quindi, Arduino ha una sua alimentazione (cosa è, il cavo USB ?) ed il servo ha un suo alimentatore … giusto?

SE è così il GND di Arduino DEVE essere collegato al GND dell’alimentatore dei servo!

Guglielmo

Esatto è USB!
Grazie mille!!! Ho fatto dei test con la UNO e il servo va ma, se il GND è attaccato alla breadboard, con alimentazione esterna, non fa nulla :smiley:

Il fatto è che avevo letto che la YUN se ha il WiFi attivo non ha molta potenza. Certo per un microservo… Intanto grazie mille!!! Mi chiedo perchè prima andasse. Chissà cosa ho combinato! :blush:

Grazie ancora, INTANTO <3

DEVE andare anche con l'alimentazione esterna, ma, come ti ho già ripetuto per tre volte, il GND di Arduino ed il GND dell'alimentazione esterna, li DEVI unire tra di loro con un filo !

Altrimenti il servo NON potrà mai andare con un alimentatore separato ... che, se l'assorbimento del/dei servo supera i 150 mA, diventa obbligatorio

Guglielmo

>scanzifarm: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce, inoltre, se si risponde al post immediatamente precedente, normalmente NON è necessario alcun "quote" dato che è sottinteso. :slight_smile:

Gli utenti da device "mobile" (piccoli schermi) ringrazieranno per la cortesia :wink:

Guglielmo

P.S.: Ho eliminato io il "quote" dal tuo post qui sopra :wink: