Arduino bruciato?

Ciao a tutti, apro un nuovo topic anche se la domanda che stò per fare è inerente ad un progetto che ho presentato in questo topic (http://arduino.cc/forum/index.php/topic,72060.0.html)

Il mese scorso ho realizzato un dispenser di cibo per il mio gatto, che ad una certa ora del giorno eroga cibo, quindi resta sempre collegato, ha funzionato per 4 giorni con questo codice:

#include <MsTimer2.h>
#include <Servo.h>
Servo myservo;

// ora che si collega il dispenser alla corrente la prima volta
byte secondi=0;
byte minuti=0;
byte ore=12;

void attivaServo() {
//funzione che attiva il servo, i vari gradi servono ad evitare blocchi
  myservo.write(152);
  delay(4000);
  myservo.write(0);
  delay(1000);
  myservo.write(35);
  delay(1000);
  myservo.write(10);
  delay(1000);
  myservo.write(35);
  delay(10000);

}

void setup() {
  myservo.attach(2);
  MsTimer2::set(1000, funzioneOrologio);
  MsTimer2::start();
  // posiziona il servo in modo chiuso per consentire il riempimento
  myservo.write(0);
  delay(1000);
  myservo.write(35);
  delay(1000);
}


void funzioneOrologio() {
    secondi++;
    if (secondi>59) {
      secondi=0;
      minuti++;
      if (minuti>59) {
        minuti=0;
        ore++;
        if (ore>23) {
          ore=0;        
      }
    }
  }
}

void loop() {
  // ora al quale il dispenser eroga cibo
  if (ore == 12 && minuti == 30 && secondi == 10){
     attivaServo();
    }
    

  
}

alimentato in questo modo :
Trasformatore da rete elettrica (9v) —> entrata Jack (Vin) Arduino

Pila (9v) → adattatore USB con regolatore di tensione (5v) —> entrata USB dell’Arduino
questo è l’adattatore (http://www.instructables.com/id/9v-USB-charger)

in modo che se la rete elettrica fosse mancata la pila avrebbe continuato l’erogazione ed a mantenere il conto del timer.

Ho collegato questo servo: http://www.rcecho.com/mg995-rc-metal-gear-high-speed-torque-servo.html con alimentazione direttamente nel Vin dell’arduino, massa nel Gnd e cavo di “controllo” nel pin 2 dell’arduino.

Come detto per quattro giorni ha funzionato anche se ogni tanto sentivo i “piccolo colpi di assestamento del servo motore”, poi nulla, ho notato che staccando e riattancando l’alimentatore il motore dava segni di vita, così ho pensato che si fosse fermato per un problema nel codice(?) o perchè la batteria era morta (?).
Oggi ho provato a sistemare il codice usando la liberia swRTC do Leo72, ma con mio disappunto ho notato comporamenti anomali:
collegato tramite usb dal pc il servo motore gira decisamente lentissimo, collegando l’alimentatore da 9v al jack invece l’arduino sembra impazzire facendo fare piccole rotazioni al servo e lampeggiando ogni volta (credo che si riavvii di continuo in loop).

Ora non so se è l’arduino ad avere problemi (cosa considero + probabile) o il servo.
Da niubbo ho fatto collegamenti (o scritto codice) che possono averlo danneggiato?
C’è un modo per verificare?

Grazie a tutti.

Mi sembra di piú che hai rotto il servo dandogli una tensione troppo alta. Ciao Uwe

scusa uwe ma in che modo gli avrebbe dato una tensione piu’ aslta del normale ? lui gli ha dato sempre 5V, sia da arduino stesso, sia dalla pila9V con 7805

In effetti potrebbe avere ragione uwe,se ho collegato il servo direttamente alla Vin della'arduino a sua volta collegato ai 9 volt dall'alimentatore a rete. Così facendo non ho passato al servo 9v mentre ha una Vmax di 8,4v?

Ti faccio una domanda: hai provato a riutilizzare il tuo sketch originale, quello senza swRTC?

Potresti anche postare lo schema esatto dei collegamenti elettrici, per capire come hai strutturato il circuito?

non avevo fatto caso al Vin, quindi lo hai alimentato a 9V, anzi in genere, controlla con il tester, questi alimentatori esterni dicnono 9V ma possono essere di piu’

leo72: Ti faccio una domanda: hai provato a riutilizzare il tuo sketch originale, quello senza swRTC?

Si ho provato e non ha funzionato. Appena riesco posto il circuito. Grazie dei consigli :-)

Così almeno vediamo di metterci anche il partitore e l'optoisolatore come ti avevo consigliato nell'altro thread ;)

tu hai scritto che collegandolo alla usb del pc va piano, hai provato a connetterlo anche ai 5V derivanti dalla pila+7805? se si conferma che va piano semplicemente e' rotto il serv. ne compri un altro uguale e lasci tutto come e', semplicemente invece di attaccarlo a Vin, lo attaccherai a 5V di arduino. Col tester ti misuri la corrente assorbita dal servo per essere sicuri che non assorbi piu' di quanto il regolatore di arduino puo' gestire, cosa che puoi anche gestire empiricamente controlando la tmperatra dello stesso.

Oppure la cosa migliore cambia le tue alimentazioni, cioe' prendi un alimentatore5V e quindi torni ad usare Vin, e lato batterie prendi una 4,5V oltre a durarti molto di piu' della 9V non devi usare il 7805 che cmq te la scarica

Ti confermo che credo di aver bruciato il servo. Il mio dispositivo, molto rudimentale, al momento della "rottura" era questo:

Avevo collegato il servo alla Vin(9v) perchè con i soli 5 volt girava troppo piano e con poca forza per le mie esigenze (cadevano troppi croccantini e con troppo peso a volte si bloccava la rotazione), ma evidentemente 9 erano troppi, visto e considerato che il servo ha l'operation voltage: 3.5 - 8.4Volts e che con quel collegamento era costantemente alimentato a quella tensione anche da "fermo".

Prima di capire che il servo era rotto, ho preso un relè (che si eccita anche solo con i 5v dell'arduino) per alimentare il servo solo quando doveva erogare il cibo e su consiglio di Testato, la batteria da 4,5V. Alla luce, quindi, di quanto mi avete detto non potrei realizzare un cto di questo tipo:

usando una resistenza per abbassare la tensione della Vin a circa 8 volt per alimentare il servo? Questo perchè come detto ho necessità che il servo operi ad una tensione "alta" : superiore a 5 volt. Ps il mio alimentatore ha un output regolabile, quindi potrei anche abbassare quello, ma come detto dopo avrei il problema della poca tensione al servo.

La resistenza limita la corrente e la caduta di tensione l'avresti solo perché è naturale con una corrente che attraversa una resistenza, ma assolutamente non è un metodo per abbassare una tensione; quindi o usi na tensione idonea al servo o ci metti un riduttore di tensione serio e la porti a 5V o 8V. Non sono pratico di servi ma una tolleranza del 10% sull'alimentazione dovrebbe essere consentita, però se le prove che hai fatto ti conducono a pensare che il servo è rotto allora niente da dire.

Con la resistenza diminuisci la corrente, per abbassare la tensione potresti usare un normale diodo, che introduce una caduta di 0,7V per cui dalla batt da 9V otterresti 8,3V. Però io alimenterei l'Arduino ed il servo in parallelo, non prelevando la corrente dal pin Vin per il motore.

leo72: Con la resistenza diminuisci la corrente, per abbassare la tensione potresti usare un normale diodo, che introduce una caduta di 0,7V per cui dalla batt da 9V otterresti 8,3V. Però io alimenterei l'Arduino ed il servo in parallelo, non prelevando la corrente dal pin Vin per il motore.

Anche questa è una buona idea, a patto di sapere quanta corrente assorbe il servo in modo da usare un raddrizzatore adeguato, altrimenti gli piglia fuoco. Concordo sul fatto di non usare il Vin, le piste comunque non sono idonee per correnti troppo elevate ed in ogni caso è inutile far passare lì dentro una corrente quando si può tranquillamente prelevarla direttamente.

Proverò allora a prende l'alimentazione del servo direttamente dall'alimentatore, però non sono pratico di "raddrizzatori", lo dovrei mettere in serie tra l'alimentatore ed il servo? Come faccio a sapere il dimensionamento? Dovrei mettere in serie col servo un tester per vedere la corrente assorbita dal motore?

Ciao ed ancora grazie del supporto

Io a dire il vero i servi li ho sempre alimentati da un'alimentazione diversa da quella di arduino, per una questione di rumore e prestazioni. In particolare dovrebbe quantomeno funzionare prelevando l'alimentazione del servo non dal vin ma dal 5v. Pero' se non funziona mi sa che c'e' qualcosa di marcio...

l'idea del diodo e' una ottima idea, ma che il servo si sia rotto per 0,7V di differenza mi sembra esagerato. Hai misurato l'alimentatore come ti avevo detto ? e' veramente da 9V ? quelli cinesi da 9V ne sparano tranquillamente 12V.

Per i diodi prendi dei 1N4001 (fino a 4007 vanno tutti bene), e vai tranquillo, prova anche con due in serie ed abbatti di 1,4V, devi metterli al posto della resistenza con il catodo (linea bianca sul componente) a destra dell'immagine.

Ho misurato con il tester la tensione in uscita dall’alimentatore ed è circa 9,5 volt, però la tensione ai capi della Vin - Gnd dell’arduino è circa 8,8 volt ed è quella che in effetti arrivava al servo…strano che per 0,4 volt si sia danneggiato.

Cmq ho fatto delle prove caricando questo codice che usavo solo per regolare il servo con rotazioni continue:

#include <Servo.h>
Servo myservo;

void setup(){
myservo.attach(2);
}
 
void loop() {

myservo.write(0);
delay(1000);
myservo.write(35);
delay(1000);
myservo.write(10);
delay(1000);
myservo.write(35);
delay(10000);
myservo.write(152);
delay(10000);
}

ed ancora collegato via usb, il servo si muove lentissimo emettendo un costante rimuore “piiii” di fondo, mentre collegato con l’alimentatore si muove veloce a scatti fino alla posizione 0 dopo di che sembra riavviare di continuo l’arduino, passando in loop dalla posizione 0 alla 35.

Da bravo pollo mi sono anche accorto che l’alimentatore può essere regolato anche come 5 v - 6 v - 7,5 v quindi non dovrei avere problemi a fare tutto senza diodo.
Devo solo ricomprare il servo :slight_smile: