Motori e arduino

In questo articolo parleremo dei motori elettrici di piccola e media potenza che potremmo usare nel corso dei nostri progetti.

Questi motori hanno un uso più svariato, possono essere utilizzati per creare piccoli rover, droni oppure qualche braccio robotico. Oggi guarderemo in modo più specifico dei motori:

  1. Motori DC (con/senza spazzole);
  2. Servomotori;
  3. Motori passo-passo.

Motore DC

Come suggerisce il nome questo tipo di motore funziona a corrente continua, ed è composto da 2 parti:

  1. Lo statore, magnete che crea un campo magnetico;
  2. Il rotore, un avvolgimento di filo di rame;

Posto sotto tensione, il rotore crea un campo magnetico e inizia a girare per induzione elettromagnetica. Il campo elettromagnetico del rotore tende ad allontanarsi dal campo magnetico dello statore, producendo una rotazione continua.

Nei motori che presentano piu poli, vi troviamo delle spazzole (Con spazzole) che forniscono agli avvolgimenti la corrente necessaria per creare il campo elettromagnetico, in modo sequenziale durante la rotazione. Così facendo avremo un scambio di polarità del campo.

learn arduino dc motor

I motori senza spazzole è composto da magneti permanenti (nel rotore) e da avvolgimenti alimentati in modo sequenziale. Il vantaggio principale di questo motore è la ridotta resistenza meccanica e la completa assenza di scintille che si andavano a creare con il contatto tra rotore e spazzole. Questo motore senza spazzole (in inglese brushless) è usato un po’ ovunque in particolar modo nei lettori CD e simili. quest’ ultimi sono molto utili anche nel campo dei droni e dei rover.

int motorPin = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(motorPin, OUTPUT);
}

void loop() {
  //Acceso per un secondo massima velocità
  digitalWrite(motorPin,HIGH);
  delay(1000);
  digitalWrite(motorPin,LOW);
  delay(500);
  /*Acceso a velocità controllata
   * 0 = motore fermo
   * 255= massima velocità
   */
  analogWrite(motorPin,200);
  delay(1000);
  analogWrite(motorPin,0);

  delay(1000);
}

Motore Passo-Passo

Motore Passo Passo Bipolare
Motore Passo Passo Bipolare

I motori passo-passo (step o stepper motor) sono motori brushless nella quale possiamo controllare a passi la posizione del rotore.

A differenza del motore DC, il step motor è utilizzabile nelle applicazioni dove serve controllare la rotazione e fermare in un punto preciso l’albero motore. Questo tipo di motore viene utilizzato principalmente nella robotica e nelle Stampanti 3D.

I motori passo-passo sono principalmente di due tipi:

  1. unipolari: dotati di due avvolgimenti con un polo comune;
  2. bipolari: dotati di due avvolgimenti separati.

I bipolari si distinguono dagli unipolari perché hanno quattro pin corrispondenti ai due avvolgimenti separati. Gli unipolari hanno cinque o sei pin a seconda che le coppie centrali siano in comune con un unico pin o con due pin distinti.

Questo tipo di motore verrà approfondito più avanti in un nuovo articolo.

Servomotore

Servomotore SG90

Il servomotore, è un motore passo-passo che comprende dei meccanismi controllati da un microprocessore interno. Studiati per vari utilizzi, i servomotori possono essere di varie dimensioni e di vari angoli (solitamente con rotazione da 0 a 180 gradi o con rotazione completa ovvero fino a 360 gradi). Il controllo dei servomotori è differente rispetto ai motori passo passo.

#include <Servo.h>

Servo myservo;
int pos = 0;

void setup()
{
  myservo.attach(9);
}
void loop()
{
  //sposta dalla posizione 0 fino alla 180
  for(pos = 0; pos <= 180; pos++)
  {
    myservo.write(pos);
    delay(15);
  }
  delay(500);
  //sposta dalla posizione 180 fino a 0
  for(pos = 180; pos>=0; pos--)
  {
    myservo.write(pos);
    delay(15);
  }
}

Fonti per l’ articolo:


8 commenti su “Motori e arduino”

  1. Fa venir voglia di provarlo subito 🙂
    Solo… cosa significa “attach (9)” nei servo? Quanti fili hanno e come li colleghi?
    Dove si trova un approfondimento per riuscire a realizzarlo davvero?

    Grazie ciao

    Rispondi
    • Grazie Matteo per il tuo commento sopratutto per avermi fatto accorgere di alcune sviste nel’ articolo.
      Il servomotore ha 3 pin dove uno va collegato a +Vcc (filo Rosso), uno a GND(Filo Nero o Marrone) e il terzo è il pin di controllo (filo arancione) dove passa l’informazione che indica a quale angolo si deve posizionare l’ asse.

      Immagine dei pin del servomotore:
      http://2.bp.blogspot.com/-p7fU0wa0yHU/VKnBPT1vwgI/AAAAAAAAAIs/gauXk9a2rhg/s1600/sg90wiring.jpg

      La funzione attach() serve per indicare a quale pin di Arduino viene collegato il Pin di controllo del Servo. in questo caso il pin di controllo del servo viene collegato al pin 9 di Arduino.

      Se vuoi maggiori approfondimenti su internet si può trovare il mondo su questo argomento, basta saper cercare.

      Se hai qualche altro dubbio non esitare a contattarci. 😉

      Rispondi
  2. Fa venir voglia di provarlo subito 🙂
    Solo… cosa significa “attach (9)” nei servo? Quanti fili hanno e come li colleghi?
    Dove si trova un approfondimento per riuscire a realizzarlo davvero?

    Grazie ciao

    Rispondi
    • Grazie Matteo per il tuo commento sopratutto per avermi fatto accorgere di alcune sviste nel’ articolo.
      Il servomotore ha 3 pin dove uno va collegato a +Vcc (filo Rosso), uno a GND(Filo Nero o Marrone) e il terzo è il pin di controllo (filo arancione) dove passa l’informazione che indica a quale angolo si deve posizionare l’ asse.

      Immagine dei pin del servomotore:
      http://2.bp.blogspot.com/-p7fU0wa0yHU/VKnBPT1vwgI/AAAAAAAAAIs/gauXk9a2rhg/s1600/sg90wiring.jpg

      La funzione attach() serve per indicare a quale pin di Arduino viene collegato il Pin di controllo del Servo. in questo caso il pin di controllo del servo viene collegato al pin 9 di Arduino.

      Se vuoi maggiori approfondimenti su internet si può trovare il mondo su questo argomento, basta saper cercare.

      Se hai qualche altro dubbio non esitare a contattarci. 😉

      Rispondi
  3. Ciao
    mi sto avventurando ora nella programmazione Arduino, volevo chiedere nel motore DC utilizziamo il pin 13 che è quello con un resistenza interna, essendo il motore stesso una resistenza, se volessi utilizzare un altro pin dovrei comunque prevedere l’utilizzo di un carico resistivo?

    Grazie
    Massimo

    Rispondi
    • Ciao Massimo,
      Dipende dal motore DC. Di solito i motori DC come quello mostrato nell’immagine dell’articolo necessitano di 3.3V per essere alimentati. Una tensione maggiore porterà si ad un aumento della velocità di rotazione ma, di contro, aumenterà anche il surriscaldamento del motore stesso.
      Detto questo la resistenza andrebbe messa per evitare il surriscaldamento alimentando il motore con la giusta tensione. Ti consiglio 2 cose: Valuta se il motore deve rimanere attivo per lunghi periodi (se si allora alimentalo con 3.3V utilizzando opportune resistenze); Il secondo consiglio è quello di provare e vedere cosa succede.
      Ho visto motori DC da 3.3V alimentati con una tensione di 9V, lo sentivo piangere a quel motore!! XD

      Comunque se farai delle prove facci sapere le tue conclusioni, che possono sempre tornare utili.
      Saluti Simone

      Rispondi
    • Ciao,
      Si quello è un motorino DC, ma non ne conosco la tensione necessaria per alimentarlo. Per verificarla prova a cercare il relativo datasheet su internet.

      Rispondi

Lascia un commento