Robot line follower utilizzo industriale

Buonasera, sono uno studente all'ultimo anno si superiori (indirizzo meccanico) come area di progetto siamo intenzionati a realizzare un drone che seguendo una linea sposti delle scatole da un punto A ad un punto B.

Vorrei porvi alcune domande iniziali, per poi utilizzare questo post per le altre nel caso in cui vedrò che siete cosi gentili da colmare i miei dubbi (a scuola nessuno conosce questi argomenti).

Esiste un comando che sia sempre attivo durante l'esecuzione del programma? Ovvero, dovendo installare un sensore che rilevi ostacoli (persone) qual'è quella funzione che permette al programma di far arrestare il drone qualunque cosa esso stia eseguendo (ho letto del comando interrupt ma non sò se sia il più adatto).

E' possibile eseguire un'accelerazione in rampa?

Secondo voi sarebbe meglio utilizzare uno sterzo classico (pilotato da un servo) o un gear box gestendo le velocità dei due motori?

Per ora esaurisco qui i miei dilemmi, premetto che il progetto è da realizzarsi entro l'anno scolastico e mi scuso per le mie scarse conoscenze nel campo dell'elettronica e dell'informatica, spero di imparare molto da questo progetto.

Vi ringrazio anticipatamente per ogni risposta :slight_smile:

Allora, facciamo un po' di chiarezza.

Gli interrupt non sono comandi ma sono una caratteristica dei microcontrollori. Di base sono segnali che interrompono la normale esecuzione del programma e costringono il microcontrollore ad eseguire una serie di istruzioni per far fronte all'evento inatteso. Le istruzioni che bisogna eseguire le decidi tu, di solito bisogna definire una funzione speciale che viene richiamata in maniera automatica che nella sua firma cioè prima del nome ha la parola chiave "interrupt" per distinguerla dalle altre. Occhio però che non è una vera e propria istruzione del linguaggio ma serve solo al compilatore per mettere in tuo codice nel posto giusto dentro la memoria.
Con arduino hai una funzione apposita per collegare il tuo codice di gestione all'evento voluto, guarda qui

http://playground.arduino.cc/Code/Interrupts

Per l'accelerazione in rampa certo che si può fare visto che i motori li gestisci tu. Ovviamente devi sceglierli bene in modo che abbiano la giusta potenza.

Meglio le due ruote motrici+ruotino per la stabilità, è molto più maneggevole.

Grazie mille per la repentina quanto esaustiva risposta!! :slight_smile:

Per ora sto cercando di portare avanti quello che riesco, anche se credo che scriverò qui molto presto.

Buonasera, vorrei porvi un mio ulteriore dubbio.
Come detto in precedenza bisognerebbe installare sul drone dei sensori che rilevino gli ostacoli (persone) in modo da farlo arrestare qualsiasi cosa stia facendo

Scusate la mia ripetività ma il segnale interrupt è funzionale a quest'attività? O sarebbe più efficace la stesura di un secondo programma che interrompa l'esecuzione del primo nel caso venga modificata questa variabile?

Informandomi sul web mi è sembrato di capire che con arduino è possibile eseguire un solo programma alla volta.
Nel caso in cui le variabili da tenere sotto controllo durante l'esecuzione del programma siano più di una è possibile utilizzare la caratteristica di interrupt?
Sò che mi è appena stata spiegata egregiamente questa caratteristica ma credo di non averne capito le potenzialità e l'utilizzo pratico.

Se può interessarvi per capire le mie domande metto il link ad una prima bozza del flow chart del progetto, fino ad una settimana fà non sapevo cosa fosse, chiedo venia per eventuali oscenità.

Usando l'interrupt devi prevedere dell'hardware apposito che in caso di ostacolo ti mandi il segnale al micro. Puoi usare il multitasking anche sull'arduino con la libreria leOS scritta dal nostro moderatore leo72.
La prima soluzione è ottima se vuoi avere sicurezza totale, un interrupt generato con un circuito è sempre affidabile se hai fatto tutto bene. Anche il leOS è super-affidabile e ampiamente testato però hai sempre un margine di errore(probabilmente il tuo), ha il vantaggio che essendo software contieni i costi.

Ancora grazie!
Potrei gentilmente chiedere che tipo di hardware apposito si intende?
Bisognerebbe inserire dei sensori simili a quelli di prossimità ma che rilevino anche distanze abbastanza elevate (suppongo massimo 1500 mm) i quali posso immaginare che costituiscano di per sè un hardware in grado di inviare segnali all'arduino.

Posso chiedere inoltre una vostra opinione riguardo a che tipologia di sensori si potrebbero utilizzare a riguardo?

Sempre rapidissimo e competente grazie mille :slight_smile:

Una sicurezza non é mai buona realizzarla solo attraverso il SW. Monterei comunque un secondo sistema antiurto che si aziona piú tardi del primo gestito via Arduino e che per esempio togle l' alimentaione dai motori per farli fermare.
Spesso i robottini industriali com per esempio i muletti elettrici hanno una ruota motrice che puó ruotare su se stesso e percui cambiare la direzione. Le altre ruote girano libere.

In questa foto la ruota motrice girata a 90 Gradi.

Ciao Uwe

Per secondo sistema antiurto cosa si intende?
Un sensore che rileva gli urti (una sorta di accelerometro) che essendo sollecitato toglie la tensione ai motori?

In che modo sarebbe realizzabile con arduino?

Non sarebbe possibile realizzare un sistema simile ma con un altro circuito cablato senza programmare arduino? (nel caso in cui sia più semplice da realizzare e possa ovviare ulteriormente a qualche errore della parte software).

Scusate per l'eccessiva mole di domande e grazie come sempre per le risposte!

I carrelli robotizzati hanno in genere almeno (come minimo) due differenti sicure, un rilefvatore di ostacoli (che puo essere ad ultrasuoni, laser, a riflesso, ecc) ed un secondo sistema "meccanico" ... una specie di fascia paraurti molto elastica montata quasi a filo del terreno, con dei sensori di contatto e/o pressione, che ferma immediatamente il veicolo se viene urtata, questo per sicurezza nel caso il primo sensore non rilevi correttamente l'ostacolo, o ci sia un'ostacolo basso (oggetto, animale o persona sdraiata/caduta) che non entra nel raggio del primo sensore ...

Grazie mille!
Cercando su google non sono riuscito a trovare nulla a riguardo sulla fascia "antiurto" da te citata.
Non capisco bene la tipologia di sensori, anche di questi ho trovato poco nulla.
Potresti gentilmente indicarmi qualche ulteriore informazione a riguardo?

http://www.ebay.it/itm/V4-Microswitch-5-Amp-250vac-solder-tags-and-with-a-selection-of-actuators-/161090964683?pt=UK_BOI_Electrical_Components_Supplies_ET&var=&hash=item2581c50ccb

immagina di attaccarci una levetta più lunga o quel che vuoi te
poi immagina di far passare tutta la carrente delle batterie (che alimenta i motori, non devi disattivare le schede) attraverso un relè
quando la levetta viene premuta (urtando contro un oggetto) il relè toglie corrente ai motori
quindi il tuo arduino darà il suo pwm per controllare il driver motori ma ai motori non arriverà alimentazione

ovviamente è descritto solo il concetto, sta poi a te decidere come farlo!

Si, ma non con quei micro ... per un'applicazione industriale, devi montare switch "industriali", stagni e robusti, ad esempio di questo tipo http://www.ebay.com/itm/Roller-Arm-Type-AC-Limit-Switch-For-CNC-Mill-Laser-Plasma-ME-8108-Brand-New/230869335005?_trksid=p2045573.m2102&_trkparms=aid%3D555003%26algo%3DPW.CAT%26ao%3D2%26asc%3D18577%26meid%3D2645898547789277506%26pid%3D100034%26prg%3D8476%26rk%3D3%26rkt%3D8%26sd%3D261125817777%26 o simili ... al braccetto ci si collega una "barra elastica" (che non e' altro che una grossa molla lineare senza anelli alle estremita', serve per evitare di scassare o piegare le barre ed il micro in caso di urto violento) agganciata alla fascia frontale, che in genere e' sospesa sempre usando molle del genere ... sto parlando ovviamente di applicazioni "sicure" per apparati industriali, che per loro natura possono essere pericolosi, se non muniti di sicure adeguate.

Etemenanki:
Si, ma non con quei micro ... per un'applicazione industriale, devi montare switch "industriali", stagni e robusti, ad esempio di questo tipo http://www.ebay.com/itm/Roller-Arm-Type-AC-Limit-Switch-For-CNC-Mill-Laser-Plasma-ME-8108-Brand-New/230869335005?_trksid=p2045573.m2102&_trkparms=aid%3D555003%26algo%3DPW.CAT%26ao%3D2%26asc%3D18577%26meid%3D2645898547789277506%26pid%3D100034%26prg%3D8476%26rk%3D3%26rkt%3D8%26sd%3D261125817777%26 o simili ... al braccetto ci si collega una "barra elastica" (che non e' altro che una grossa molla lineare senza anelli alle estremita', serve per evitare di scassare o piegare le barre ed il micro in caso di urto violento) agganciata alla fascia frontale, che in genere e' sospesa sempre usando molle del genere ... sto parlando ovviamente di applicazioni "sicure" per apparati industriali, che per loro natura possono essere pericolosi, se non muniti di sicure adeguate.

si è verissimo io volevo solo dargli un'idea e non ho considerato l'applicazione industriale :slight_smile:

Grazie infinite davvero :slight_smile: mi state aiutando molto a risolvere le varie problematiche.

Tuttavia non ho capito come dovrebbe essere il meccanismo ed a che tipologia di molle si fà riferimento.

I finecorsa li avevo esclusi sin da subito perchè pensavo non fossero adatti per questa applicazione in quanto hanno bisogno di una certa corsa per aprire il contatto e l'inerzia del corpo con conseguente ritardo dell'arresto li reputavo fattori di rischio essenziali. Insieme al fatto che non saprei come far rilevare l'urto in più punti, ovvero, non avendo capito il funzionamento di questo meccanismo non saprei come sia possibile che venga rilevato l'urto attorno tutto il drone.

Se non rompo troppo secondo voi sarebbe possibile utilizzare una fascia elastica (simile a quella dei go-kart) da posizionare attorno al robot in modo che a seguito di un urto si sposti premendo dei microswitch (simili a quelli del primo link), in questo modo penso che sia sufficentemente sicuro e di semplice realizzazione. Ovviamente premettendo che non ho compreso il sistema proposto da voi.

Grazie. :slight_smile:

sono meglio quelli che ti ha suggerito etemenanki
il sistema meccanico di attivazione della protezione devi trovarlo tu in relazione a come è fatto il tuo robot ecc, le molle ti servono a riportare e tenere la barra in posizione normale (quindi coi motori che funzionano) quando non incontri un ostacolo
una volta trovato il sistema adatto basta applicarlo su tutti i lati del robot e hai fatto, puoi metterlo pure sul tetto se ti serve

A livello industriale ho visto due sistemi, prevalentemente, quello col "ciambellone" pneumatico (una specie di camera d'aria che gira tutto intorno, gonfiata e collegata ad un sensore di pressione, se la urti la pressione sale ed il sensore scatta) utile principalmente per mezzi molto lenti, perche' per quanto morbida ha comunque un supporto rigido dietro, e quello col fascione, quest'ultimo e' di solito una striscia di circa 15 o 20 cm di altezza e pochi mm di spessore, fatta di vetroresina elastica o plastica dura, divisa in sezioni, sospese con delle catenelle ad un centimetro circa dal pavimento, alle striscia sono collegati mediante molle a dei finecorsa, se le sposti il finecorsa scatta ... dato che hanno una certa inerzia, per evitare falsi azionamenti il carrello deve fare accelerazioni e frenate molto graduali, altrimenti le fasce, per inerzia, possono far scattare i micro.

salve, sempre relativo allo stesso progetto visto che il robot si deve fermare istantaneamente quanto rileva la presenza di un ostacolo,secondo voi vanno bene dei freni elettromagnetici?

Devi calcolarti alcuni parametri ... peso del mezzo, tipo di ruote, tipo di trasmissione e motori, pavimentazione su cui viaggia, ad esempio ... a parte che "istantaneamente" non esiste, ci sara' sempre una certa corsa di frenata, se, per fare un'esempio, viaggi con un carrello del peso di un centinaio di chili o piu su pavimentazione in cemento, usando ruote in gomma, e con una trasmissione del moto "robusta", anche un buon freno-motore ti garantirebbe una frenata di pochi centimetri ... se ci viaggi con ruote in plastica liscia dura su piastrelle lucide, magari bagnate, hai voglia a frenare, o butti un'ancora o slitti per metri :stuck_out_tongue:

Sono troppi i parametri che non conosciamo e da prendere in considerazione, per poter dare una risposta "sicura" (ed e' anche per quei motivi che i carrelli "autonomi" non viaggiano mai a piu di 15 o 20 Km/h, spesso anche a meno, e dove sono presenti persone, molto meno :wink: ).

Certo, considerazioni ovviamente che vanno fatte.

Tuttavia credo che intendesse chiedere se sono reperibili in commercio e governabili con arduino dei freni di tipo elettromagnetici,

o se sapreste suggerire altre tipologie

oppure se basterebbe togliere la tensione ai motori per provocare l'arresto di un corpo della massa di massimo 30 kg a basse velocità (un 5 km/h penso sia un dato sufficientemente realistico).

izio144:
oppure se basterebbe togliere la tensione ai motori per provocare l'arresto di un corpo della massa di massimo 30 kg a basse velocità (un 5 km/h penso sia un dato sufficientemente realistico).

Togliere l'alimentazione non frena nulla, anzi favorisce lo scorrimento, semmai ricorrere alla frenatura elettrica, più che sufficiente in questo caso anche se, per ovvi motivi di sicurezza, è sempre necessario prevedere un freno meccanico d'emergenza.
La frenatura elettrica è implementabile in due modi, carico variabile che mette in corto i motori, inversione controllata della polarità, quest'ultimo sistema richiede necessariamente un complesso controller con feedback sia sulla velocità che sulla corrente assorbita dai motori.