Visualizzazione post con etichetta motore passo-passo. Mostra tutti i post
Visualizzazione post con etichetta motore passo-passo. Mostra tutti i post

venerdì 5 gennaio 2018

The DrawingBot







In this post I describe the making of a small robot called DrawingBot which draws some simple shapes or lines on a sheet of paper using a simple felt tip pen.





For the impatient one below the video of the making and the video of drawing executed by DrawingBot.

















Project


The project is intended for everyone that want to realize a small robot from scratch and the ones with the main purpose to learn and experiment.

Once realized the DrawingBot it is possible to draw some simple drawing which are not really accurate. However the main goal is not to draw but to build and understand how the DrawingBot works from mechanical, electrical and software point of view.


The project is made by the major elements:
  • the  STL files for the 3D printing of the chassis 






  • the Arduino code (sketch) to control the robot
  • a simple python app which allow the user to pro grammatically generate drawings on screen  and that automatically generates the DrawingBot commands

All the files are available on my github [here]

Making

Let's now see the steps to build and make the DrawingBot


1- Printing of the  DrawingBot


Download the STL file for each component from my  github [here] and print them with your 3D printer


2- DrawingBot Assembling- Mechanical part


In the initial video I have assembled the DrawingBot from scratch hence all the steps are available in the video.

Below the Bill of Material of the  DrawingBot containing all the necessary components







The assembling of the mechanical parts is quite simple and can be complete with a normal screw driver and just few bolt and nuts.


3- DrawingBot Assembling- Electrical part

Once all the 3D printed components are assembled it is time for the electronics which is based on standard and inexpensive components: 1x Arduino Uno, 2x stepper and  1x Servo.

The assembling of the circuit is very simple and it is done through the use of few rainbow DuPont wires, hence using a color code. For this reason this circuit can be made by everyone including kids and beginners.















In order to achieve a quite clean and ordered cabling I have realized a simple connection board by using a small strip board.
















Software forArduino

The DrawingBot's software is avaiable on my github [here].


There are few parameters that can be tweaked based on your specific needs:

  • PEN_DOWN:  rotation angle of the servo when the pen is down (drawing)
  • PEN_UP: rotation angle of the servo when the pen is up (moving)
  • wheel_dia: wheel's diameter in mm
  • wheel_dia_correction: correction factor to make the DrawingBot more accurate
  • wheel_base: width wheel-to-wheel in mm

Drawing Software

The drawingbot.py file contains a simple app in python that allow:

  • create and show on screen a programmatic drawing
  • automatically generate the commands for the DrawingBot

The programmatic drawing should be included in the following method: def drawing()





This generates a drawing on the screen





and in the console the DrawingBot's command will be printed




Now in the  drawingbot.ino file, after the below line just add the commands generated in the previous step

/* Insert here the drawing commands */


Compile and upload your sketch and after 5 seconds the DrawingBot will automatically start to execute the drawing

Happy DrawingBot-ting!!!! :)









DrawingBot







In questo post descrivo la realizzazione di un piccolo robot chiamato DrawingBot che realizza dei semplici disegni su un foglio di carta usando un comune pennarello.




Per chi e' impaziente ecco qui il video della realizzazione del Drawing Bot ed il video delle'esecuzione di un semplice disegno

















Progetto


Il progetto e' destinato a chiunque voglia realizzare un piccolo robot partendo da zero e che abbia come scopo principale l'apprendere ed il capire.
Una volta realizzato il DrawingBot si possono realizzare dei semplici disegni che risultano abbastanza imprecisi. Come detto lo scopo finale e' la realizzazione e non l'uso del DrawingBot.


Il progetto e' composto da 3 elementi principali:

  • i file STL per la stampa in 3D dello chassis






  • il codice per Arduino per il controllo del Robot
  • un file in python che permette di disegnare a video e generare automaticamente i comandi da fornire a DrawingBot per effettuare il disegno 

Tutti i file sono disponibili sul mio github [qui]

Realizzazione Pratica

Vediamo i passi per la realizzazione pratica del DrawingBot


1- Stampa del DrawingBot


Scaricare i file STL di tutti gli elementi del DrawingBot dal mio github [qui] e stamparli con una stampante 3D.


2- Assemblaggio del DrawingBot - Meccanica


Nel video iniziale ho assemblato il DrawingBot partendo da zero, quindi potete vedere tutti i passi.

Riporto qui la Bill of Material del DrawingBot con tutti i componenti necessari







In ogni caso l'assemblaggio della parte meccanica e' semplicissimo in quanto richiede solo un cacciavite e alcune viti e bulloni.


3- Assemblaggio del DrawingBot - Elettrico

Una volta assemblato i pezzi stampati del DrawingBot bisogna montare la parte elettrica che e' basata su Arduino Uno, 2x motori passo-passo ed 1x Servo.

L'assemblaggio del circuito elettrico utilizza una serie di rainbow cable e quindi si basa su un codice colore ed e' quindi di facilissima realizzazione adatta anche ai meno esperti.














Per ottenere un cablaggio pulito ho realizzato una semplicissima basetta che mi permette di connettere i vari cavi in modo chiaro e pulito
















Software per Arduino

Il software per il DrawingBot e' disponibile sul mio github [qui].


Ci sono pochissimi parametri che potete regolare in base alle vostre esigenze:

  • PEN_DOWN:  angolo di rotazione del servo quando la penna e' giu'
  • PEN_UP: angolo di rotazione del servo quando la penna e' su'
  • wheel_dia: diametro in millimetri della ruota
  • wheel_dia_correction: fattore di correzione per rendere il DrawingBot piu' preciso
  • wheel_base: larghezza da ruota a ruota in millimetri (lato esterno della ruota)

Software per Disegnare

Il file drawingbot.py contiene un semplice programma in python che permette di:

  • visualizzare su schermo un disegno algoritmico
  • generare automaticamente i comandi per il DrawingBot

Il disegno va realizzato nel metodo: def drawing()





Questo genera un disegno sullo schermo




e nella console vengono stampati i comandi da fornire a DrawingBot




Ora nel file drawingbot.ino aggiungete/sostituite i comandi generati dopo la seguente linea

/* Insert here the drawing commands */


Compilate e caricate lo Sketch su Arduino e dopo 5 secondi il DrawingBot iniziera' a realizzare il disegno autonomamente

Buon divertimento!!!! :)









lunedì 8 dicembre 2014

Arduino e Motore Passo Passo

In questo post spiego brevemente come pilotare un motore passo-passo con Arduino.

Ci sono vari modi per pilotare un motore passo-passo. Nel mio caso ho un motore 28BYJ-48




e una scheda di controllo ULN2003



In questo modo e' facilissimo pilotare il motore passo-passo.

Come si vede la scheda di controllo richiede:
  • +5V
  • GND
  • 4 GPIO di Arduino (per controllare i 4 avvoglimenti del motore in questione)
E' imporante notare che l'alimentazione della scheda e quindi del motore non deve essere prelevata da Arduino, altrimenti quasi certamente lo friggiamo.

L'alimentazione deve essere esterna ad Arduino


Nel mio caso siccome ho una batteria a 9V ho creato un semplice regolatore DC-DC di tensione in modo da ottenere i 5V richiesti per l'alimentazione del motore.

Regolatore DC-DC

Lo schema del circuito di un semplice regolatore DC-DC e' semplicissimo




Come si vede dalla figura ho usato un 7805 e due condensatori. Nel mio caso il condensatore Ci all'ingresso ha una capacita' di 100 uF e Co all'uscita una capacita' di 10 uF.

Qui sotto un semplice schema di come ho montato il regolatore su una breadboard:







Ecco come ho realizzato velocemente il regolatore sulla basetta:






Ok a questo punto sulle due piste in basso (filo giallo e bianco) ho i +5V e GND con cui alimentero' il motore passo passo e la scheda di controllo.


Collegamento motore ad Arduino

Adesso ho collegato il motore alla scheda di controllo e questa ad Arduino come spiegato qui sotto.





Il motore ha un connettore con 5 fili. Lo collego alla scheda (entra in una sola direzione).





Dopo di cio' ho inserito i fili dell'alimentazione in questo modo:


  • filo rosso -> GND
  • filo marrone -> +5V

Adesso collego questi due fili alla breadboard all'uscita del regolatore DC-DC




Il filo rosso in corrispondenza del filo giallo sulla breadboard (GND)
Il filo marrone in corrispondenza del filo bianco sulla breadboard (+5V)



A questo punto ho collegato la scheda di controllo del motore ad Arduino come spiegato qui sotto.





  • filo nero         --> pin IN1 della scheda motore
  • filo marrone   --> pin IN2 della scheda motore
  • filo rosso        --> pin IN3 della scheda motore
  • filo arancione --> pin IN4 della scheda motore





Dal lato Arduino:

  • filo nero         --> pin 8
  • filo rosso        --> pin 9
  • filo marrone   --> pin 10
  • filo arancione --> pin 11

Nota
Come notate i pin 9 e 10 sono invertiti per far si che il motore possa giare in senso orario e antiorario.
Immagino che queso sia un problema della schedina da 2$.
Quindi tutto sommato solo invertendo i fili abbiamo risolto il problema.

A questo punto ho collegato la batteria alla breadboard rispettando la polarita'.




Arduino Sketch

Ho creato questo semplice sketch (basato su stepper_oneRevolution) che rimane in attesa di input dal monitor seriale di arduino


#include <Stepper.h>

const int stepsPerRevolution = 4;  

int readByte = 0;
char buff[255]; //contiene i dati ricevuti
int steps = 0;

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
  // set the speed
  myStepper.setSpeed(4096);
  // initialize the serial port:
  Serial.begin(9600);
}

void clear_buff()
{
  int i = 0;
  for (i=0; i < 255; i++)
    buff[i] = 0;
}

void loop() {
  clear_buff();  
  delay(100);
  
  if ((readByte = Serial.available()) > 0) {
    // insert the number of step (+ or -) manually trhough serial monitor  
    Serial.readBytes(buff, readByte);
    steps = atoi(buff);  
    Serial.println(steps);
    myStepper.step(steps);
  }
}


Inserisci il numero di step e il verso in cui si vuole che il motore giri:
  • 2048 : il motore compie un giro completo in senso orario
  • -2048: il motore compie un giro completo in senso antiorario
  • 1024: il motore compie mezzo giro in senso orario

Dopo varie prove ho verificato che i valori 4 per stepsPerRevolution e 4096 per la velocita' di rotazione sono i migliori. In questo modo il motore compie un giro completo in circa 6 secondi.

Potete variare questi due valori ma fate in modo che il prodotto dei due valori sia sempre 16384.

Verifica Funzionamento

Come sempre verifichiamo che il tutto funzione come previsto!!!





Come sempre chiunque abbia idee e migliorie e' il benvenuto.