Visualizzazione post con etichetta Servomotore. Mostra tutti i post
Visualizzazione post con etichetta Servomotore. Mostra tutti i post

lunedì 16 maggio 2022

Arduino N° 113 - Servomotori: pilotaggio corretto & favole metropolitane

 

< Arduino N° 112

 Achille De Santis

> Arduino N°  114



Servomotori. 

Parliamo prima delle "favole metropolitane". 

Molti pensano che si possa alimentare un servomotore, anche piccolo, direttamente da Arduino. 
Non c'è niente di più sbagliato!
Il singolo servo assorbe già di suo più di quanto possa fornire il povero Arduino.
Lo schema tipico errato è questo: 

Fig. 1: Servomotori: circuiteria ERRATA;


Ho esagerato a mettere quattro servo ma anche soltanto uno esce dai limiti di alimentazione di Arduino.

Risultato: 

comportamento molto instabile e rischio di bruciare lo stabilizzatore interno di Arduino.
L'aggiunta del gruppo di condensatori non basta alla bisogna (v. fig. 1). 

 
Fig. 2: Servo con alimentazione IDONEA;


Pilotaggio corretto: 

Una soluzione alle favole metropolitane potrebbe essere quella di fig. 2, dove si evidenzia il fatto che l'alimentazione dei servo è diversa (v. nota 1) da quella della scheda di controllo. In questo caso i gruppi di condensatori fanno egregiamente il loro lavoro; il funzionamento è corretto ed esente da incertezze, sempre che il firmware sia adatto.

A questo punto, se notate ancora piccolissimi movimenti indesiderati dei servo, modificate il 'firmware' introducendo, ove necessario, piccole "isteresi". Basta una isteresi di uno o due step. Il funzionamento sarà sicuro e preciso e i motori resteranno fermi, una volta raggiunto il "set-point".

Buona sperimentazione!


nota 1: 
non si tratta di alimentazione "galvanicamente separata" ma di semplice alimentazione "diversa" da quella dell'Arduino e con possibilità di erogare maggiore potenza. Una soluzione alternativa consiste nel prelevare l'alimentazione per Arduino direttamente dal robusto alimentatore aggiuntivo, massa comune.

venerdì 6 maggio 2022

Arduino N° 112 - Proximity Bot V2

< Arduino N° 111

 Achille De Santis

> Arduino N°  113



Base di lavoro per realizzare un piccolo robot con due servomotori in DC(v. Fig. 1).

Sono state impostate delle routines per la movimentazione dei motori.

Ognuno potrà adattarle alle proprie necessità.

Fig. 1: Layout del dispositivo;

In particolare, è possibile adattare le routines per la movimentazione destra e sinistra e richiamarle opportunamente nel programma.


 

mercoledì 4 maggio 2022

Arduino N° 107 - Servotest

 

< Arduino N° 106         

 Achille De Santis

> Arduino N°  108

Prova di funzionamento di un servomotore (v. fig.1). 

Considerato l'assorbimento di corrente di circa 100 mA, operativamente, il servomotore va collegato ad alimentazione separata, massa comune! Si veda, in proposito il post 

Arduino n° 113 -Servomotori: pilotaggio corretto & favole metropolitane


Fig. 1: circuito di test per servomotore.


Simulazione Servotest

Arduino N° 106 - Temperature and servomotor

< Arduino N° 105          

 Achille De Santis

> Arduino N°  107

    

Un sensore di temperatura provoca l'azionamento proporzionale di un servomotore, per lo spostamento angolare di una paratia ad esso collegata (v. fig. 1).

Il circuito è solo dimostrativo. Per il buon funzionamento il servomotore va collegato ad un'apposita alimentazione separata, con massa comune.
Basta scollegare il ponticello rosso tra l'alimentazione superiore ed inferiore, sulla breadboard, ed inserire in alto un alimentatore regolato a 5 volt.

 
Fig.1: sensore di temperatura per comando proporzionale di un servomotore;

Simulazione Temperature and servomotor


mercoledì 7 aprile 2021

Arduino N° 89 - Servomotore con abilitazione a BJT

< Arduino N° 88

 Achille De Santis

> Arduino N°  90




In questo post vi presento un dispositivo con servomotore, dotato di abilitazione a BJT e pilotato da Arduino.

Il funzionamento del servomotore è stato già descritto e trovate qualche collegamento in Argomenti correlati.

L'abilitazione del servomotore avviene cambiando stato al piedino digitale  D11 (PNP con uscita di collettore: OFF abilita; ON disabilita).

Ad evitare movimenti incontrollati del servomotore bisogna sempre leggere e partire dalle condizioni iniziali ed istantanee del motore, utilizzando oculatamente la temporizzazione.



Nota:

Il circuito è SOLO dimostrativo. L'uscita va ASSOLUTAMENTE collegata ad una sorgente di alimentazione separata. La figura la riporta collegata alla alimentazione di Arduino a puro titolo di esempio.


Simulazione: 

Servomotore con abilitazione a BJT


Argomenti correlati: 

mercoledì 10 giugno 2020

Arduino N° 53 - Modulo bluetooth 9 CH + 3 Servo

< Arduino N°  52

 Achille De Santis

 > Arduino N°  54




Foto 1: Il modulo bluetooth, su shield, e scheda Arduino;

Programma per la gestione con bluetooth di 9 canali digitali (ON/OFF) e di 3 canali per il comando di servomotori.



Le uscite digitali possono essere interfacciate con un modulo relais ad 8+1 canali, per il comando di altrettanti attuatori.








I tre canali "servo" possono comandare direttamente tre piccoli servomotori del tipo SG90 o similari, per un controllo a tre assi.

  1. Per il funzionamento con telefono Android occorre predisporre un modulo bluetooth ricevitore (HC06 o HC05) ed una opportuna APP sul telefono.
  2. Per il funzionamento con telefono IoS è consigliabile l'uso di un modulo bluetooth BLE 4.0 

Le uscite servo sono predisposte per effettuare una rotazione lenta di 90 gradi (in circa 10 secondi).

Foto 2: collaudo del comando servomotore;
In questo caso, dopo le prove operate su Arduino UNO, ho utilizzato una scheda Arduino Pro-Mini, sulla quale ho caricato lo sketch, una volta per tutte. 

Si tratta, quindi, di un modulo che può essere finalizzato ad applicazioni con un massimo di 9 canali di comando digitale e 3 canali di comando per servomotori. 
Le applicazioni possono essere numerose.


Per applicazioni a bassa potenza, sui canali "digitali" basta un semplice modulo relais.
Per i canali servo vale lo stesso principio ma con uscita "proporzionale", interfacciata con transistori.



Per applicazioni a tensioni diverse dai 5 volt della scheda Arduino, i "contatti puri" dei relais offrono la possibilità di separazione galvanica e di interfacciamento con tensioni continue o alternate, più o meno alte.

Al fine di soddisfare le richieste di alcuni lettori ho reso disponibile la scheda di controllo Pro-mini già programmata con firmware. Basta collegare la scheda, l'interfaccia bluetooth e l'interfaccia Relais per essere operativi. 

Naturalmente, per comandare da telefono occorre una opportuna APP, facilmente scaricabile.


Nota importante: 

In ogni caso, fino a 48 volt state lavorando con "tensioni di sicurezza". Oltre questo valore è necessario adottare tutte le ulteriori misure di sicurezza che le Norme richiedono.


---------------------------------------------------------------------------------------

Simulazione: 


Argomenti correlati:


tecnatronATgmail.com

> Arduino N°  54

mercoledì 20 novembre 2019

Arduino N° 24 - Pilotaggio di posizione angolare servo

< Arduino N° 23

 Achille De Santis

> Arduino N° 25




/* ------------------------------------ Inizio Programma ------------------------------------------

 Controlla la posizione angolare (escursione) di un servo attraverso un potenziometro
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob

 Aggiunta routine da Achille De Santis - 26-02-2019
 usare una resistenza in serie al potenziometro di uguale valore.
 In questo modo si riduce la corrente nel potenziometro e si limita l'escursione di tensione.
*/

#include <Servo.h>
// --------------------------------
#define U          9        // uscita servo
#define potpin  0        // piedino analogico usato per collegare il potenziometro
// --------------------------------
Servo myservo;          // crea l'oggetto servo per controllare un servomotore
int     val;                    // variabile per leggere il valore dall'ingresso analogico

void setup()
{
  myservo.attach(U);    // associa il servo al pin di uscita (9)
  Serial.begin(9600);
}

void muoviservo(Servo x, int v, int p)
{ // questa routine può essere convenientemente usata per altri servo
  v=analogRead(p);          // legge il livello del potenziometro (tra 0 e 1023)
    Serial.print(v); Serial.print(' ');
  v=map(v, 0, 900, 0, 180); // scala il valore in gradi, per usarlo con il servo (valore tra 0° e 180°)
  x.write(v);               // assegna la posizione al servo, in gradi
    Serial.println(v);
  delay(15);                // ritarda
}

void loop()
  {      muoviservo(myservo, val, potpin);     }

// ------------------ Fine Programma -----------------------------------------------------------

mercoledì 21 agosto 2019

Arduino N° 11 - Movimento servomotore


< Arduino N° 10

 Achille De Santis

> Arduino N° 12





/* -------  inizio programma ---------------------
  ing. Achille De Santis - tecnatron#gmail.com
Pilotaggio di un servomotore. Attraverso il potenziometro è possibile variare l'escursione angolare dell'asse del servomotore.
*/

#include <Servo.h>
#include <SoftwareSerial.h>

const int T=15;                    // tempo di ritardo;

int pos = 0;
int sensorValue = 0;
int i = 0;

Servo servo_9;

void setup()
{
  servo_9.attach(9);
  pinMode(A0, INPUT);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
   sensorValue = analogRead(A0);
   pos = map(sensorValue,0,1023,0,180);

  Serial.print("sensorValue ");
  Serial.println(sensorValue);
  Serial.print("pos ");
  Serial.println(pos);

  for (i = 0; i <= pos; i++)
  {               
    servo_9.write(i);        // tell servo to go to position in variable 'pos'
    delay(T);                   // wait 15 ms for servo to reach the position
  }

  for (i= pos; i >= 0; i --)
  {
    servo_9.write(i);        // tell servo to go to position in variable 'pos'
    delay(T);                   // wait 15 ms for servo to reach the position
  }
}
// ----------------------------- fine programma ------------------------------


> Arduino N° 12