top of page
  • Immagine del redattoreRobNico

Arduino Grabber Robot

In questo progetto costruiremo un robot divertente, in grado muoversi e di arraffare oggetti tramite una pinza, il tutto gestito da una applicazione per Tablet e Smartphone Android.

Sarà possibile controllare il robot da APP tramite il modulo Bluetooth HC-05 o HC-06.

 

Hardware richiesto:

 

1: Preparazione

Questo Robot è derivato da un progetto di MertArduino.

Alcune considerazioni sull'hardware, le difficoltà iniziali sono state sopratutto nel reperire il materiale, il braccio pinza giocattolo, dopo una ricerca online, la scelta è caduta sul sito AliExpress, unico neo la lunga attesa circa 1 mese.

Altro problema il servo motore MG996R Tower Pro, ho capito a mie spese che esistono in commercio molti servo TowerPro contraffatti dai rivenditori cinesi che vendono su eBay e in vari siti online, sono di bassa qualità e non avevano la potenza necessaria per chiudere la pinza, perciò controllate al momento dell'ordine che sia un servo originale della Tower Pro, si può capire dal logo "TowerPro"

Altro accorgimento riguarda l'alimentazione del robot, ho iniziato il progetto con 4 pile AA 1,5V, e una pila da 9V, ma a parte il cablaggio macchinoso, il problema principale era la scarsa potenza in mA fornita, considerando che il solo servo motore assorbe senza carico 170mA e in stallo 1400mA, perciò sono ricorso a 2 batterie ricaricabili Li-Ion LIR 18650 3,7V 2600mah, che risolvono in modo egregio e duraturo l'alimentazione di tutto il Robot.

2: Modifica Plastic Grab Arm

Vediamo come modificare il braccio giocattolo per adattarlo al nostro progetto.

Si inizia svitando il bullone che tiene unito la parte finale del braccio (foto A/B), sganciare il filo di acciaio che collega il meccanismo alla pinza (foto C) , tagliare con un seghetto circa 6 cm. la parte finale del braccio (foto D), procurasi un filo abbastanza robusto ma morbido, passare il filo dentro le due alette di plastica e fare un nodo (foto E), rimontare tutto, non stringere troppo il bullone centrale della pinza, può bloccare il movimento, eseguire una prova tirando il filo per controllare che la pinza si chiuda con facilità (foto F).


3: Assemblaggio Hardware

Iniziamo con il montare sullo chassis i due motori, avvitiamo la ruota autodirezionale (B) nei fori già presenti, quindi passiamo al fissaggio del porta batterie tramite il nastro biadesivo (C) e dell'interruttore 0-1(A) nell'apposito foro rettangolare.

Per completare questo passaggio, iniziamo saldando i fili rosso e nero ai terminali dei motori, questo è probabilmente è il passo che richiede più destrezza. Le minuscole linguette di connessione su questi motori sono fragili, quindi procedere con cautela .

Cerca di mantenere il cablaggio pulito, i cavi dovranno uscire sul lato dello shield L293D in corrispondenza dei morsetti M1 e M2.

Collega i motori alle coppie di morsetti M1 e M2. Non preoccuparti troppo della polarità del motore in questa fase - lo puoi modificare in seguito, invertendo i cavi del eventuale motore che gira al contrario.

Il prossimo passo è montare altre parti del robot prima di iniziare a eseguire il cablaggio dei cavi. Lo shield L293D del motore è impilato su Arduino (D) che è montato sullo chassis utilizzando distanziatori con relativi bulloni.

Passiamo ora al posizionamento del servo motore (F), la parte più complessa, occorre un trapano con un fresa, anche in questo caso procedere con cautela, il foro deve essere di circa 1,4 cm di diametro.

Infine fissare la pinza (E) con due bulloni allo chassis come in figura

4: Cablaggio

Finito il montaggio dei componenti possiamo passare al cablaggio dei componenti:

Lo Shield L293D che ho utilizzato per questo progetto non aveva i connettori Pin sulle uscite GND +5V , si può risolvere saldando una serie di strip maschio/maschio, per evitare questo passaggio controllate al momento dell'acquisto che disponga di queste uscite con i Pin come quella in foto.


Come vediamo dallo schema elettrico, per il collegamento del modulo bluetooth oltre ai Pin +5V e GDN, abbiamo bisogno di collegare le uscite TX e RX ai rispettivi Pin 0 e 1 Digital di Arduino, per fare questo occorre saldare 2 strip maschio/maschio direttamente sullo shield LM293D come in figura.


A questo punto scarica il file ZIP qui, all'interno troverai lo script da caricare su Arduino e il file APK applicazione per Tablet e Smartphone Android.

Se non è già disponibile nella cartella libraries di Arduino dobbiamo installare AFMotor Library scaricabile qui > https://github.com/adafruit/Adafruit-Motor-Shield-library

Controlliamo per un'ultima volta i collegamenti, se tutto è ok possiamo aprire l'applicazione IDE di Arduino, carichiamo lo schetch Arduino-Grabber-Robot.

Prima di eseguire l'upload dovremo momentaneante staccare l'alimentazione alla scheda Bluetooth altrimenti si blocca l'upload dello sketch.

Scaricare ed installare l'APP android ArduinoBluetoothRobotCarControl.apk.


Attivare il Bluetooth sullo smartphone, accoppiare il dispositivo HC-06 o HC-05 e quindi toccare la scritta Bluetooth per collegare il Robot allo smartphone, a questo punto siamo pronti far muovere con le frecce il nostro Robot.

Ora testiamo i motori toccando nell'APP freccia su ,se gira in cerchio a sinistra o a destra, è possibile che la coppia di cavi di un motore sia invertita, invertire il cablaggio del motore che gira all'indietro.

Altro parametro da controllare è la velocità della coppia di motori M1-M2, può essere che un motore abbia un rendimento leggermente inferiore, occorre perciò modificare un valore delle righe #define leftSpeed 100 o #define rightSpeed 100 per equipararela velocità dei motori.

Altra operazioni da fare è ottimizzare i parametri del servo motore ( servo1.write(105) e servo1.write(175) )per la chiusura e apertura della pinza in base alla lunghezza del filo o dalla distanza del servo motore.

 

/*Prima di poter utilizzare Motor shield, è necessario installare la libreria AF_Motor Arduino*/

#include <AFMotor.h>

/*include Servo motor library*/

#include <Servo.h>


/*AF_DCMotor

La prima è la porta a cui è collegato il motore, 1, 2, 3 o 4.

la frequenza è la velocità del segnale di controllo della velocità.

Per i motori 1 e 2 è possibile scegliere MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ oMOTOR12_1KHZ.

Un'alta velocità come 64 KHz non sarà udibile, ma una bassa velocità come 1 KHz consumerà meno energia.

I motori 3 e 4 possono funzionare solo a 1 KHz e ignoreranno qualsiasi impostazione data*/


AF_DCMotor leftMotor(1, MOTOR12_8KHZ);

AF_DCMotor rightMotor(2, MOTOR12_8KHZ);


/*Definisce il nome del servo motore*/

Servo servo1;


/*Imposta la velocità del motore

La velocità varia da 0 (fermo) a 255 (piena velocità)*/

#define leftSpeed 100

#define rightSpeed 100


String readString;


void setup() {

Serial.begin(9600);


/*Digital 10 pin controlla l'ingresso Servo # 1

Digital 9 pin controlla l'ingresso Servo # 2 */

servo1.attach(9);

/*posizione di partenza del servo*/

servo1.write(165);


/*è possibile impostare la velocità del motore utilizzando setSpeed ​​(speed)*/

rightMotor.setSpeed(rightSpeed);

leftMotor.setSpeed(leftSpeed);

}


void loop() {

while(Serial.available()){

delay(50);

char c=Serial.read();

readString+=c;

}

if(readString.length()>0){

Serial.println(readString);


/*Per avviare il motore,run(direzione) dove direzione è FORWARD, BACKWARD or RELEASE.*/

if (readString =="FORWARD"){

rightMotor.run (FORWARD);

leftMotor.run (FORWARD);

}

if (readString =="BACK"){

rightMotor.run (BACKWARD);

leftMotor.run (BACKWARD);

}

if (readString =="LEFT"){

rightMotor.run (FORWARD);

leftMotor.run (BACKWARD);

}

if (readString =="RIGHT"){

rightMotor.run (BACKWARD);

leftMotor.run (FORWARD);

}

if (readString =="STOP"){

rightMotor.run (RELEASE);

leftMotor.run (RELEASE);

}

/*pinza chiusa in gradi*/

if (readString == "GRAB"){

servo1.write(105);

}

/*pinza aperta in gradi*/

if (readString == "DROP"){

servo1.write(175);

}

readString="";

}

}

 

43 visualizzazioni0 commenti

Post recenti

Mostra tutti

Comments

Couldn’t Load Comments
It looks like there was a technical problem. Try reconnecting or refreshing the page.
bottom of page