Braccio robotico articolato con Pick & Place

Avrete avuto modo di apprezzare le qualitร  e potenzialitร  del braccio robotico con pinza terminale di manipolazione presentato in questo post, per testare il quale abbiamo impiegato una scheda Arduino abbinata a uno shield Octopus.

RoboArm รจ un braccio robotico in plexiglass con ralla in acciaio, a quattro gradi di libertร  (detto quindi antropomorfo, perchรฉ si muove praticamente come quello umano); il braccio รจ di tipo articolato, giacchรฉ tutti i giunti sono rotanti, (sono previsti rotazione della base, movimento della spalla, del gomito e la rotazione del polso) che uniti alla pinza allโ€™estremitร  conferiscono una certa abilitร  di posizionamento e orientamento di piccoli oggetti.

Il braccio robotico รจ stato progettato non solo per muovere i primi passi sperimentando e sviluppando applicazioni robotiche, ma puรฒ trovare applicazione anche nellโ€™esecuzione di movimenti ripetitivi nel settore produttivo di piccoli oggetti e confezioni.

Nel post introduttivo vi abbiamo spiegato come comandare i servo attraverso Arduino UNO REV3 (o Fishino UNO) equipaggiata con lo shield Octopus, specifico per la gestione dei servocomandi e giร  descritto nel fascicolo nยฐ 203 di Elettronica In.

Nellโ€™applicazione qui descritta, invece, vi proporremo unโ€™elettronica di controllo dedicata, basata su uno shield ad-hoc predisposto per il controllo dei servocomandi da parte di Arduino, attraverso le uscite PWM, ma anche per acquisire il segnale analogico del potenziometro laddove decidessimo di utilizzare servomotori con feedback di posizione che โ€œportanoโ€ allโ€™esterno il segnale del potenziometro coassiale allโ€™alberino.

Tale funzione รจ utilissima, ad esempio, per i posizionamenti di precisione, giacchรฉ consente di correggere eventuali errori o tolleranze dovuti al gioco delle articolazioni, ma anche di apprendere i movimenti per costruire sequenze da eseguire in un secondo momento e automaticamente; lโ€™apprendimento si puรฒ effettuare portando il braccio manualmente nelle posizioni desiderate, quindi registrandole e poi inserendole in un firmware che ripeta i relativi movimenti, puntando al raggiungimento degli angoli di rotazione dei servo coinvolti nei movimenti stessi.

Considerate comunque che il sistema funziona tranquillamente anche con dei servocomandi tradizionali, quali quelli compresi nel braccio robotico base descritto nel fascicolo scorso.

Tra le varie funzioni implementate, lo shield si occupa di fornire lโ€™alimentazione ai servo e di comandare lโ€™elettromagnete dellโ€™elettrovalvola e la pompa a depressione che consentono il pick and place.

Prendere e rilasciare oggetti con il braccio robotico

Ciรฒ detto, possiamo entrare nel vivo dellโ€™applicazione, che consiste nellโ€™equipaggiare il braccio robotico di un sistema di prelievo e rilascio di piccoli oggetti basato su una ventosa collegata a un aspiratore (una piccola pompa a depressione) mediante unโ€™elettrovavola, a tre vie, che permette di commutare la ventosa sulla pompa o su uno sfiato; questโ€™ultimo consente il rilascio immediato dellโ€™oggetto prelevato.

Per limitare il consumo di elettricitร  da parte dellโ€™elettrovalvola abbiamo scelto di utilizzare il raccordo normalmente collegato al comune per la ventosa e connettere il comune stesso alla pompa a depressione.

Il manipolatore degli oggetti, vale a dire la ventosa, va montata al posto della pinza, la quale andrร  quindi rimossa; rimarrร  la base, ossia il polso, azionato dal solito servocomando da 1,2 kg/cm che ne consentirร  la rotazione per ruotare, allโ€™occorrenza, il pezzo prelevato.

La ventosa รจ forata allโ€™interno e comunica con un tubicino, il quale va nel raccordo comune dellโ€™elettrovalvola, le cui due vie terminano una sulla pompa a depressione e lโ€™altra su uno sfiato, che consente di portare a pressione atmosferica la ventosa quando la valvola commuta dalla pompa allo sfiato stesso.

La ventosa รจ sostenuta da uno stelo fissato in cima alla staffa di sostegno (che consente il fissaggio al polso del braccio) mediante un dado che fa presa sul suo estremo filettato; tra la staffa di sostegno e il raccordo pneumatico della ventosa รจ interposta una molla che consente la presa morbida perchรฉ se anche il braccio scende eccessivamente, la ventosa e il suo stelo possono rientrare in una certa misura.

Il funzionamento del sistema di pick & place รจ il seguente:
1. la ventosa viene posizionata sul particolare da prelevare e spinta sulla superficie di questโ€™ultimo fino a farla aderire;
2. Arduino aziona, tramite lo shield, la pompa a depressione e, siccome lโ€™elettrovalvola a riposo collega direttamente la ventosa, questโ€™ultima risucchia il pezzo mantenendolo attaccato ad essa;
3. Arduino comanda il braccio affinchรฉ asporti il pezzo e lo posizioni nella sua destinazione;
4. a questo punto Arduino attiva lโ€™elettrovalvola, la quale commuta il raccordo comune sullo sfiato, allorchรฉ smette la depressione e lโ€™oggetto puรฒ cadere;
5. rilasciato lโ€™oggetto, lโ€™elettronica riporta il braccio nella posizione originaria e si predispone a un nuovo prelievo.

Queste fasi riassumono lโ€™attivitร  del braccio, per eseguire la quale serve unโ€™elettronica comandata manualmente (per esempio tramite due joystick) o in maniera automatica mediante un apposito firmware nel quale memorizzare i movimenti da compiere e la loro velocitร , la quale non devโ€™essere eccessiva per evitare che le giunture (articolazioni) del braccio siano sollecitate tanto da prendere gioco a lungo andare.

In questo articolo vi forniremo uno strumento basilare di gestione del braccio, che consiste in uno sketch per Arduino capace di eseguire il movimento sequenziale di tutti gli azionamenti del braccio ed anche dellโ€™elettrovalvola; in esso basterร  sostituire i parametri predefiniti con quelli desiderati per far compiere al braccio robotico le azioni che vogliamo.

Vi spiegheremo come, quando descriveremo il firmware applicativo.

Schema elettrico della shield per il braccio robot

Lโ€™elettronica di controllo

Il controllo dei quattro servocomandi del braccio robotico รจ affidato ad Arduino UNO, attraverso lo shield del quale trovate lo schema elettrico in queste pagine; da esso vedete come si tratti di qualcosa di semplice, riassumibile nel prolungamento delle linee analogiche (1 PWM e un analog input per ciascuno dei servo) di Arduino sui connettori dei servocomandi, che stavolta hanno quattro pin invece di tre, giacchรฉ abbiamo aggiunto quello, opzionale, per il feedback di rotazione dellโ€™alberino.

Ciรฒ รจ possibile perchรฉ la scheda Arduino/Fishino UNO dispone di sei uscite PWM e permette il pilotaggio diretto di altrettanti servocomandi, almeno per quel che riguarda i segnali di posizione; lโ€™elettromagnete della valvola a tre vie viene invece gestito attraverso una linea di I/O digitale, che nello shield pilota un transistor utilizzato come interruttore statico.

Lo shield non si limita a fornire i segnali di comando dei servo, ma eroga anche lโ€™alimentazione a 5 V con tutta la corrente che i servocomandi da 13 kg/cm richiedono per funzionare, anche dagli spunti coincidenti con lโ€™avvio dei servocomandi, specie quando il braccio รจ sotto carico.

Senza utilizzare lo shield avremmo dovuto cablare a parte massa e +5V dei servo, collegando poi i poli + e โ€“ a un alimentatore esterno, mentre con lo shield otteniamo un insieme compatto, dato che tutta lโ€™elettronica necessaria al funzionamento del sistema รจ compresa fra Arduino UNO e lo shield.

Diamo dunque uno sguardo allo schema elettrico dello shield, nel quale, per renderne piรน semplice la comprensione, al centro abbiamo posto Arduino UNO: come vedete, i connettori di sinistra sono quelli per i servo e su essi viene ripetuta lโ€™alimentazione a 5V prelevata dallโ€™uscita del regolatore di tensione, che vedete siglato U1; S1 รจ riservato al servocomando 1, S2 al 2 ecc.

Per lโ€™assegnazione dei servo facciamo riferimento alla Tabella 1, che espone la corrispondenza tra essi e la parte del braccio di cui attuano il movimento.

Questโ€™assegnazione rispecchia quella fatta nel firmware e le due connessioni S5 ed S6 sono state implementate per futuri sviluppi, ovvero per aggiungere funzioni al braccio o gestire servizi correlati alla sua attivitร .

 

Tabella 1ย 

 

Come accennato, ogni connessione ha quattro poli perchรฉ, oltre alle due di alimentazione (5V) e allโ€™uscita PWM per il controllo, abbiamo previsto un input di feedback di posizione fornito dai servocomandi.

Quindi per ciascun servo Arduino riserva unโ€™uscita PWM e un ingresso analogico; prendendo ad esempio S1, lโ€™uscita di comando del servo รจ D11 e lโ€™input di feedback รจ A0. I connettori per i servo sono ciascuno formato da un pin-strip a 4 poli, la cui piedinatura rispecchia lo standard adottato dai servocomandi con feedback.

Sul lato delle uscite, Arduino UNO pilota due interruttori statici formati da una cascata di transistor BJT e MOSFET a canale N, per azionare lโ€™elettropompa a vuoto e lโ€™elettrovalvola a tre vie, oltre che, direttamente, un LED (LD3, alimentato attraverso la resistenza R9 con lโ€™uscita D13); attraverso D12, invece, รจ previsto lโ€™interfacciamento con un sensore a uscita digitale, tramite il connettore SENS: si tratta di un sensore presente sulla parte terminale del braccio, che in questa applicazione non viene utilizzato per rilevare quando, facendo scendere la ventosa, questa preme piรน del dovuto. In pratica il sensore รจ un microswitch che rileva lโ€™arretramento dellโ€™aspiratore a ventosa, il quale รจ vincolato alla testa del braccio mediante un sistema a molla che ne consente lโ€™arretramento fino a un certo punto, per assicurare un contatto morbido con il pezzo da manipolare.

Riscrivendo opportunamente il firmware, il sensore puรฒ essere un altro a vostra scelta, digitale, che per la comunicazione utilizzi un solo filo (ad esempio un dispositivo 1-wire).

Soffermiamoci un istante sulle uscite OUT1 e OUT2, che sono identiche e quindi descriveremo una sola di esse, fermo restando che quanto spiegato per lโ€™una vale anche per lโ€™altra; prendiamo in esame OUT1, il cui controllo รจ affidato alla linea D2 di Arduino, la quale, a livello logico alto (5V) tramite il partitore resistivo R1/R2 polarizza la base del T1, mandando questโ€™ultimo in saturazione, condizione nella quale la tensione Vce quasi si annulla, mandando a livello basso il gate del MOSFET Q1.

Essendo questโ€™ultimo di tipo enhancement-mode a canale N, rimane interdetto e lโ€™uscita OUT1 non eroga alcuna corrente. Invece quando Arduino pone a zero logico D2, il transistor T1 rimane in interdizione e il gate del Q1 viene alimentato attraverso R3, condizione, questa, che determina lโ€™entrata del MOSFET in stato di ON: la corrente che ora puรฒ fluire tra drain del Q1 e massa fa accendere il LED di stato LD1 e alimenta lโ€™eventuale carico connesso tra + e โ€“ di OUT1, che forniscono una tensione di circa 5V (la caduta di tensione tra drain e source del MOSFET รจ trascurabile, almeno alle correnti in gioco).

Passiamo adesso allo stadio di alimentazione, che si basa su una breakout board (U1) basata suโ€™lโ€™integrato WP1584: si tratta di un compatto regolatore di tensione DC/DC di tipo buck, che partendo da una tensione dโ€™ingresso di 12-15V ricava 5Vcc ben stabilizzati, fornendo una corrente di 3A.

Il regolatore ha due contatti dโ€™ingresso (IN+ e IN-) collegati rispettivamente al catodo del diodo di protezione D1 (serve a bloccare la corrente nel caso lo shield venga alimentato per errore con la polaritร  invertita) e a massa, e due di uscita, che forniscono la tensione stabilizzata.

Lo shield non prende quindi alimentazione da Arduino (infatti nessuno dei pin di alimentazione di questโ€™ultima scheda รจ collegato) ma da un jack DC separato a bordo, che nello schema elettrico รจ siglato PWR; lโ€™alimentazione dโ€™ingresso passata attraverso il diodo di protezione viene filtrata dai condensatori C1 e C2 e quella stabilizzata, a 5 volt, dai condensatori C3 e C4.

Concludiamo lโ€™analisi dello schema elettrico con le linee di I/O D7 e D8 di Arduino, le quali sono input che acquisiscono lo stato dei pulsanti P1 e P2, destinati a future applicazioni, ovvero ad avviare e arrestare lโ€™apprendimento dei movimenti, per esempio.

 

Realizzazione pratica

Bene, passiamo adesso dalla teoria alla pratica occupandoci della costruzione del sistema, partendo dalla premessa che abbiate giร  assemblato il braccio robotico secondo le istruzioni fornite nel post di presentazione.

Dovete quindi preparare lโ€™elettronica e cablare il tutto secondo lo schema di assemblaggio riportato in queste pagine; piรน esattamente, una volta realizzato lo shield occorre applicarlo ad Arduino e poi cablare lโ€™elettronica (servo, alimentazione, elettrovalvola e pompa di depressione) nonchรฉ realizzare il circuito pneumatico con la pompa a depressione.

Sistemato lo shield applicatelo a una board Arduino UNO rev3 e collocate il tutto sulla piastra di supporto posteriore del braccio, fissandolo mediante colonnine distanziali in plastica alte 8 mm e viti 3MA; connettete quindi i servocomandi ai pin-strip dello shield, tenendone i connettori verso il piรน vicino header.

Invece, se avete dei servo con feedback e quindi connettore single-in-line a 4 poli, collocateli come previsto. I fili dellโ€™elettropompa a vuoto e della valvola a tre vie (due per entrambi i dispositivi) vanno collegati alle morsettiere OUT1 e OUT2, rispettando la loro polaritร ; siccome le predette uscite erogano una tensione di 5 volt, la pompa e lโ€™elettrovalvola devono essere a a 5 V.

Piano di montaggio

Elenco componenti

C1: 100 nF ceramico (0805)
C2: 47 ยตF 16 VL elettrolitico (ร˜5mm)
C3, C5: 100 nF ceramico (0805)
C4, C6: 100 ยตF 6,3 VL elettrolitico (ร˜5mm)
R1, R8: 10 kohm (0805)
R2, R3, R6, R7: 4,7 kohm (0805)
R4, R5, R9: 470 ohm (0805)
LD1, LD2: LED rosso (0805)
LD3: LED verde (0805)
Q1, Q2: BUK6215-75C
T1, T2: BC817
P1, P2: Microswitch
D1: GF1M
U1: Modulo DC/DC uscita 5V/3A
S1รทS6: Strip maschio 4 vie
SENS: Strip maschio 3 vie

Varie: 
- Strip femmina 2 vie (4 pz.)
- Strip maschio 2 vie (4 pz.)
- Plug alimentazione
- Morsetto 2 vie passo 5mm (2 pz.)
- Strip 6 vie 15mm
- Strip 8 vie 15mm (2 pz.)
- Strip 10 vie 15mm
- Circuito stampato S1397 (69 x 55mm)

Il manipolatore Pick & Place

Questo รจ quanto riguarda la parte elettrica ed elettronica, tuttavia affinchรฉ il braccio robotico esegua la manipolazione degli oggetti bisogna applicargli al polso il manipolatore pneumatico a ventosa, che si realizza assemblando due piastre in plexiglass da 3 mm come mostrato nella Fig. 1 (dove vedete il corpo con applicata la scheda del microswitch finecorsa, ma priva della ventosa e del suo sostegno a molla) mediante distanziali tubolari da 19 mm in plastica.

Alla piastra superiore in plexiglass va fissata la squadretta a croce fornita col mini servo, utilizzando 4 viti autofilettanti 2×6 TB a croce.

Nel chiudere le due piastre va incastrato il supporto per microswitch, al quale va fissato il circuito (COLLISIONSENS) contenente il microswitch (Fig. 2) che rileva la compressione del sistema a ventosa.

Nel chiudere il corpo delimitato dalle due piastre ricordate che la forcella della guida in plexiglass per il sistema a ventosa deve essere orientata verso la linguetta del microswitch e centrata rispetto al foro della piastra inferiore.

Ora posizionate il polso allโ€™estremitร  dellโ€™avambraccio facendo combaciare i fori di entrambe le parti e fissarlo allโ€™avambraccio utilizzando una vite M3x35 TB a croce, 4 rondelle piane 3×6, un distanziale in ABS 3×15 e un dado M3 autobloccante.

Fig. 1 Assemblaggio della testa pneumatica.

 

Fig. 2 Il sensore microswitch applicato allo stelo della ventosa sulla testa pneumatica.

 

Applicate il distanziale squadretta servo (in plexiglass da 3 mm) sulla squadretta a croce mini servo montata sulla testa porta ventosa, posizionate a metร  corsa il perno del mini-servo del polso, quindi innestate su di esso la levetta doppia fissata sulla testa porta ventosa in modo che questโ€™ultima sia allineata con il polso.

Fissate la testa porta-ventosa al perno del servo con la vite autofilettante 2×4 in dotazione al servo, quindi applicate, allโ€™estremitร  inferiore del supporto ventosa, la ventosa piรน adatta alle vostre necessitร .

Applicate al terminale C dellโ€™elettrovalvola unโ€™estremitร  del tubetto in silicone fornito col kit.

Distendete e fissate il tubetto lungo il braccio in modo che lโ€™estremitร  libera possa raggiungere la testa porta-ventosa senza creare impedimento ai movimenti.

Per completare il lavoro, spingete lโ€™estremitร  del tubetto sul raccordo del supporto ventosa (tenendolo con una mano per evitare di far forza sulla testa porta-ventosa).

Il tubetto in silicone puรฒ essere eventualmente accorciato ma prima รจ necessario verificare che sia in grado di raggiungere la testa porta-ventosa anche nelle condizioni piรน estreme (massima e minima estensione del braccio, ecc.) senza subire strozzature che ridurrebbero la forza aspirante.

Ora il montaggio delle parti meccaniche del braccio รจ terminato. Non resta che distendere ed eventualmente prolungare (con cavi M/F) i cavetti elettrici di ciascun servo in modo da fargli raggiungere la scheda di controllo senza interferire con le parti in movimento.

 

Schema di cablaggio per braccio robotico

Il firmware del robot arm

Ora รจ il momento di approcciare agli aspetti firmware descrivendo lo sketch che abbiamo preparato ad-hoc per far funzionare il braccio robotico e spiegandovi come impostarne i parametri allo scopo di far eseguire al braccio i movimenti desiderati.

Il firmware comprende una serie di sezioni che descrivono il movimento, inteso come rotazione del servo e tempo impiegato ad ottenerla, una per ciascuno dei servo che lo shield puรฒ gestire, quindi 6.

Per realizzare una sequenza, basta quindi personalizzare tali parametri e allo scopo ricordate che bisogna far compiere i movimenti fino allโ€™angolazione desiderata per ciascun servo, registrare lโ€™angolazione, quindi collegare Arduino a PC, editare parametri dello sketch, quindi ricaricare lo sketch e far eseguire in loop.

Lo sketch รจ riportato nel Listato 1 e sostanzialmente esegue la sequenza di posizionamento della testa pneumatica, passando dalla posizione di partenza A, portandosi alla B (dove si trova il pezzo), facendo scendere la testa, azionando la pompa a depressione (lโ€™elettrovalvola รจ a riposo, grazie allโ€™istruzione digitalWrite(valve, HIGH) e quindi risollevando la testa e portandosi di nuovo in posizione A, nella quale rilascia il pezzo attraverso lโ€™interruzione della depressione, operata alimentando lโ€™elettrovalvola (digitalWrite(valve, LOW) e portando in OFF la pompa.

Il tutto รจ ottenuto sfruttando le librerie braccio.h e servo.h che gestiscono in toto i movimenti.

Ogni istruzione ServoMovement determina lo spostamento dei servocomandi che devono essere scritti tra parentesi, separati dalla virgola e preceduti dal tempo impiegato a compierli. Ad esempio (40, 120, 110, 90 ecc.) indica che le posizioni in gradi devono essere raggiunte in un tempo pari a 40.

Listato 1

#include <Braccio.h>

#include <Servo.h>

#define pump 2
#define valve 4

Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;

// the setup function runs once when you press reset 
// or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(pump, OUTPUT);
  pinMode(valve, OUTPUT);

  digitalWrite(pump, HIGH);
  digitalWrite(valve, HIGH); //HIGH ASPIRA LOW RILASCIA

  //For each step motor this set up the initial degree

  Braccio.begin();
}

void loop() {
  //vado in posizione A
  Braccio.ServoMovement(40, 120, 110, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 60, 90, 100, 90, 90);
  delay(500);
  Braccio.ServoMovement(40, 120, 60, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 60, 100, 100, 90, 90);
  //mi abbasso e dico no no 
  Braccio.ServoMovement(10, 120, 60, 100, 50, 90, 90);
  //no no
  Braccio.ServoMovement(10, 120, 60, 100, 150, 90, 90);
  Braccio.ServoMovement(10, 120, 60, 100, 50, 90, 90);
  Braccio.ServoMovement(10, 120, 60, 100, 90, 90, 90);
  delay(1000);
  // vado in posizione B e mi abbasso
  Braccio.ServoMovement(40, 120, 110, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 70, 60, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 60, 110, 90, 90, 90);
  //faccio partire la pompa
  digitalWrite(valve, HIGH);
  digitalWrite(pump, LOW);
  delay(1000);
  //mi alzo
  Braccio.ServoMovement(40, 70, 60, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 110, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 110, 90, 50, 90, 90);

  //Vado in posizione A 
  delay(1000);
  Braccio.ServoMovement(40, 120, 110, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 60, 90, 100, 90, 90);
  delay(500);
  // mi abbasso
  Braccio.ServoMovement(40, 120, 60, 110, 100, 90, 90);
  //spengo la pompa 
  digitalWrite(valve, LOW);
  digitalWrite(pump, HIGH);
  delay(1000);
  //mi alzo
  Braccio.ServoMovement(40, 120, 90, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 90, 90, 90, 90, 90);

  //Vado in posizione B
  delay(1000);
  Braccio.ServoMovement(40, 70, 60, 80, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 60, 100, 90, 90, 90);
  //Mi abbasso
  delay(1000);
  //e dico no no
  Braccio.ServoMovement(10, 70, 60, 100, 50, 90, 90); //no no
  Braccio.ServoMovement(10, 70, 60, 100, 150, 90, 90);
  Braccio.ServoMovement(10, 70, 60, 100, 50, 90, 90);
  Braccio.ServoMovement(10, 70, 60, 100, 90, 90, 90);
  //Wait 1 second
  delay(1000);
  //mi rialzo e vado in posizione A
  Braccio.ServoMovement(40, 120, 110, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 60, 90, 100, 90, 90);
  delay(500);
  //mi abbasso
  Braccio.ServoMovement(40, 120, 60, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 60, 110, 100, 90, 90);
  //e faccio partire la pompa
  digitalWrite(valve, HIGH);
  digitalWrite(pump, LOW);
  delay(1000);
  //mi alzo
  Braccio.ServoMovement(40, 120, 90, 90, 100, 90, 90);
  Braccio.ServoMovement(40, 120, 90, 90, 90, 90, 90);

  //Wait 1 second
  delay(1000);
  //vado in pos B
  Braccio.ServoMovement(40, 70, 60, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 60, 110, 90, 90, 90);
  digitalWrite(valve, LOW);
  digitalWrite(pump, HIGH);
  //dico no no
  delay(1000);
  Braccio.ServoMovement(40, 70, 60, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 110, 90, 90, 90, 90);
  Braccio.ServoMovement(40, 70, 110, 90, 50, 90, 90);
  //Wait 1 second
}

Conclusioni

Il progetto qui descritto รจ unโ€™applicazione scalare, nata come demo delle possibilitร  di manipolazione offerte dal nostro braccio robotico, ma estensibile a qualsiasi applicazione e a qualsiasi tipo di braccio robotico simile per gradi di libertร  e attuazione.

Si tratta solo di mettere mano al firmware e partendo da questa base si possono realizzare applicazioni complesse, che escono dal mondo della didattica, per approdare al professionale.

Lascia un commento

Il tuo indirizzo email non sarร  pubblicato.

Menu