www.viniciocoletti.it > Projects > Barca radiocomandata

Sito di Vinicio Coletti

Barca radiocomandata

Ecco come ho iniziato a costruire la barca, nel novembre 2001: con 5 tavole di legno di 50x10x1 cm. Le ho comprate in un grosso negozio di bricolage e sono molto economiche. Non ho proprio idea di che tipo di legno si tratti, ma le ho scelte per la loro relativa leggerezza.
Tre tavole sono state lasciate praticamente intatte, con solo un taglio inclinato su un bordo per farle aderire perfettamente, e sono servite per il fondo e per i due lati. Dalle ultime due tavole ho ricavato il trapezio di poppa e tre triangoli per costruire la prua.
Per mettere insieme le varie parti dello scafo non ho usato chiodi o viti, ma solo una buona colla a due componenti, pensata specificamente per il legno. Ho poi ricoperto le giunture con stucco da muratori, probabilmente superfluo. Come si vede, la forma non è certo idrodinamica, ma questa barca non è stata progettata per correre, ma solo per divertirsi un po'.
Dopo qualche mese di pausa, verso febbraio 2002 ho comperato ed installato il motore elettrico (un 600BB in corrente continua), completo di giunto cardanico, asse elica ed un'elica di 4 cm di diametro. Una barretta metallica mantiene il motore inclinato di circa 10 gradi. Il motore è fissato alla barretta con una fascetta metallica usata per i tubi del gas.
Questa è un'altra prospettiva della prua della barca, con il motore installato all'interno. Ho deciso di installare il motore, cosa che ha comportato forare il fondo, prima di procedere alla verniciatura.
Questo è il fondo della barca, con l'elica e il suo asse. L'elica è del tipo a due lame, per ridurre la resistenza e usarla ad un regime di rotazione più alto, per il fatto che il motore è collegato direttamente alla propulsione, senza riduzione del numero dei giri. Comunque, non sono del tutto sicuro che il ragionamento sia giusto e forse proverò anche un'elica a maggiore presa sull'acqua.
Arrivati a giugno del 2002, mi ricordai che se non avessi ripreso a lavorare sulla barca, difficilmente avrei potuto provarla durante le vacanze estive. Ho così aquistato due tipi diversi di vernice ed iniziato a dipingere la barca.
Il primo tipo di vernice colora il legno, facendolo sembrare molto migliore, e lo protegge dalle infiltrazioni di acqua nei pori. Per dare il giusto colore e proteggere adeguatamente, ho steso tre mani di questa vernice sulla barca.
Il secondo tipo di vernice è chiamata flatting e serve a rendere impermeabile il legno. Ho steso due mani di flatting, che oltretutto rende lucido il legno, per avere uno scafo ben resistente all'acqua. Nella foto è evidente la differenza tra zona dipinta e zona grezza.
Alla fine ho provato in acqua per la prima volta la barca, nella vasca da bagno, per vedere se galleggiava bene. Andava perfettamente! Il volume della barca è un po' superiore ai 5 dm3 e quindi il peso complessivo non deve mai superare i 5 kg. Naturalmente, per avere una linea di galleggiamento non troppo alta, è bene avere un peso molto più basso e quindi ho pianificato un peso di circa 2,5 kg, per la barca completa di tutto l'equipaggiamento.
Arrivati a luglio, c'erano ancora molte cose da fare: innanzitutto il timone e poi la scheda per il controllo del motore, visto che avevo deciso di non comprare un controller commerciale (altrimenti, come ci si diverte?). Per il timone ho usato lo stesso legno della barca, dipinto nello stesso modo, e per l'asse del timone ho tagliato alla giusta lunghezza un tubo ed una barretta, entrambi di ottone.
Ben visibile nella foto il timone della barca. Per muoverlo ho installato il servocomando trovato nella confezione del trasmettitore Futaba, che però ho distrutto per errore quando ho inavvertitamente invertito la tensione di alimentazione durante una delle prove del motore. Ho così dovuto acquistare un secondo servocomando, di prestazioni simili. La scheda controller non ha invece subito danni, perché ha un diodo di protezione.
Questa è la scheda che controlla la velocità del motore, realizzata su circuito stampato. E' basata sul microcontrollore Microchip PIC16F84A e pochi altri componenti.
Questa è la poppa della barca, con l'accumulatore al piombo (6 V, 4 Ah), l'asse che muove il timone, il servocomando, il ricevitore per radiocomando (Futaba, 5 canali, banda 40 MHz) e la scheda controllo del motore.
Possiamo qui vedere il modulo di potenza, con 4 transistor 2N3055 montati su un dissipatore. I transistor sono in configurazione Darlington, con il primo che pilota gli altri 3 in parallelo. Ciò consente una corrente di almeno 15 A continui e 45 A di picco (circa 270 Watt).
Qui si può vedere il motore ed i due relay da 30 A x 3 ognuno. Avrei voluto usare un singolo relay da 30 A a due scambi, ma è difficile trovarli così, alimentati a soli 6 Volt. Così ho trovato questi due ed ho connesso tutti gli scambi in parallelo, così da poter sopportare 30 A continui. Essi sono usati per commutare tra marcia avanti e indietro. La retromarcia è usata di rado, ma può essere molto importante in certe situazioni (ed è anche un ottimo freno).
Ecco una vista dall'alto della barca, con tutti i componenti installati e pronta alla navigazione. Lo scafo è ricoperto con legno di balsa avvolto in carta trasparente da forno. Si tratta però di una soluzione temporanea, perché penso di dipingere la balsa con le stesse vernici usate per la barca, così da renderla impermeabile.
Ora la barca è veramente pronta alla partenza! Sul lato sinistro è visibile il trasmettitore per radiocomandi Futaba. L'antenna è fatta con il filo del ricevitore fatto passare dentro alcune cannucce per bibite. Soluzione leggera ed economica. La copertura dello scafo, oltre che per ragioni estetiche, è stata pensata per evitare l'eventuale ingresso di acqua nello scafo, ma ha lo svantaggio di ridurre la dissipazione del calore proveniente dal motore e dal modulo a transistor. Visto che la barca è molto stabile in acqua, più di quanto pensassi, forse in futuro penserò ad una soluzione diversa.
Qui la barca sta navigando molto lentamente vicino alla riva di un lago, con l'antenna fatta di cannucce gialle :-) Al primo tentativo in effetti la velocità della barca era limitata dall'asse motore fissato non molto bene. Ma è bastato stringere bene una vite per risolvere il problema.

Scheda di controllo del motore

Descrizione generale

Questa scheda controller fa parte del progetto di questa barca radiocomandata, realizzata nel corso dell'estate 2002. La propulsione della barca è data da un motore elettrico in corrente continua di tipo 600BB e la scheda controllo stabilisce la velocità ed il verso (marcia avanti o indietro) del movimento.

Alimentazione e caratteristiche del circuito

Tutta la barca è alimentata da un accumulatore al piombo da 6 V 4.0 Ah. La tensione a batteria carica è di circa 6,7 Volt e ho quindi inserito, come unica regolazione della tensione, un diodo in serie, che protegge il circuito da inversioni accidentali di polarità e fa cadere la tensione di circa 0,7 V. I 6 V massimi risultanti, anche se un pò eccessivi per il PIC 16F84A (che non dovrebbe eccedere 5,5 V), non danno alcun problema e la scheda funziona perfettamente.
L'oscillatore utilizzato è quello classico per i PIC, con un quarzo da 4 MHz e due condensatori, per cui si ottiene un tempo di esecuzione per le istruzioni di 1 microsecondo.
La scheda controllo ha le seguenti connessioni e funzioni:

  • Connettore di alimentazione (+6V e massa)
  • Ingresso radiocomando (4 ingressi TTL dal ricevitore per radiocmando)
  • Uscita pwm per motore (va al gruppo di transistor di potenza)
  • Uscita per direzione motore (va a due relay da 30 A che invertono al polarità del motore)
  • Uscita ausiliaria (pensata per un LED ad alta luminosità)
  • Un LED rosso a bordo (per segnalare diverse condizioni)
  • Un pulsante a bordo (per test e per eventuali funzioni future)

Misura degli impulsi

La funzione principale del programma che gira sul PIC è quella di misurare gli impulsi che arrivano dal ricevitore radio, calcolando quindi la velocità desiderata, che viene impostata attraverso adeguati impulsi pwm (pulse width modulation) sull'alimentazione del motore.
Ma è forse bene ricorda innanzitutto come funziona un radiocomando proporzionale. Se abbiamo a che fare, come nel mio caso, con un trasmettitore a 4 canali, esso avrà di solito due leve, ognuna con movimento orizzontale e verticale, per un totale di 4 comandi, appunto. Il trasmettitore legge la posizione di ogni leva e trasmette di continuo la seguente sequenza:

  1. Un impulso di almeno 4 millisecondi, per indicare l'inizio della sequenza
  2. Una pausa di 1 ms
  3. La posizione della prima leva, codificata come un impulso di lunghezza variabile da 1 ms (min) a 2 ms (max)
  4. Una pausa di 1 ms
  5. I passi 3 e 4 sono repetuti altre 3 volte, per inviare tutti e 4 i canali

Un'intera sequenza dura così al massima circa 17 ms e se il trasmettitore non fa pause ulteriori, ciò risulta in 59 comandi di posizione inviati ogni secondo, direi abbastanza anche per gli aeromodelli più veloci.
Il ricevitore radio demultiplexa i 4 canali su 4 differenti connettori, da dove escono degli impulsi TTL compresi tra 1 e 2 ms. La scheda è progettata per leggere tutti e 4 i canali, anche in parallelo (anche se come si vede gli impulsi sono sequenziali), ma per ora il software gestisce il solo canale 2 (controllo motore).
La maggiore difficoltà nella scrittura del programma di gestione è venuta dal fatto che il 16F84 ha un solo timer a bordo (escludendo il watchdog, che ha un uso dedicato) e quindi ho dovuto usarlo per tutte le funzioni, cioè sia per leggere gli impulsi in input che per generare quelli di output (e anche altro!).

Come funziona

Quando arriva l'inizio di un impulso TTL, viene generato un interrupt sulla porta B e la routine di servizio dell'interrupt si limita a salvare il valore corrente di Timer0. Quanto l'impulso finisce viene generato un secondo interrupt e questa volta la routine calcola la differenza tra il valore corrente di Timer0 e quello salvato, la memorizza in una variabile ed attiva un flag di validità.
Nel loop principale del programma, quando viene rivelato il flag di validità per il canale 2 attivato, una subroutine azzera il flag, legge la durata dell'impulso, la elabora per produrre il valore da utilizzare per la pwm in output ed inoltre attiva o disattiva il relay che controlla la direzione del movimento.
Quanto Timer0 va in overflow (ogni circa 4 ms, visto che ho impostato il prescaler a 16x) se il valore pwm non è zero, il motore è attivato. Quando poi nel loop principale viene rivelato un valore di Timer0 superiore al valore pwm impostato, il motore viene spento. La frequenza degli impulsi pwm è quindi di 250 Hz, forse un valore un po' troppo basso, ma comunque funzionale.
Timer0 viene anche utilizzato per incementare alcuni contatori "lenti", usati in altre parti del programma. Ad esempio, quando mancano interrupt sulla porta B per circa 1 secondo, ciò indica l'assenza del segnale dal radiocomando e quindi il motore viene spento. Il programma quindi ricerca nuovi impulsi stabili e, quando arrivano, viene ripresa la normale elaborazione.
Per pilotare l'uscita motore utilizzo 4 pin della porta B in parallelo, per avere una corrente di 80 mA. Questa corrente va sulla base di un transistor 2N3055, la cui uscita va sulle basi di altri 3 transistor 2N3055 connessi in parallelo. Ho utilizzato questa configurazione super-Darlington semplicemente perché avevo a disposizione un modulo usato, con 4 2N3055 montati su un dissipatore e quindi pronti all'uso.

Il bug

La prima versione del programma aveva un difetto piuttosto serio: il motore non era mai completamente fermo, neanche quando la leva era in posizione perfettamente centrale e c'erano sempre degli impulsi errati che portavano brevemente il motore al massimo dei giri. Tutti i controlli sul programma furono assolutamente inutili, finché non pensai bene di andarmi a rileggere i manuali Microchip, sul funzionamento degli interrupt della porta B. Mi resi così conto che quando modificavo lo stato del motore, scrivendo sulla porta B, facevo partire degli interrupt errati, perché la scrittura sulle porte di I/O implica anche una loro lettura automatica!
Purtroppo avevo già costruito e testato il circuito, altrimenti probabilmente avrei utilizzato un pin della porta A e un transistor, come output. E' bastato però modificare in modo adeguato il programma, sostituendo alla semplice istruzione clrf PORTB per fermare il motore, il seguente blocco:

    bcf    INTCON,RBIE    ; disabilita interrupt su PORTB
    clrf   PORTB          ; ferma motore
    movf   PORTB,f        ; rilegge PORTB per eliminare discordanza dei pin
    bcf    INTCON,RBIF    ; azzera PORTB interrupt flag, nel caso si sia attivato
    bsf    INTCON,RBIE    ; abilita di nuovo interrupt su PORTB

Lo stesso metodo è utilizzato quanto il motore viene attivato. Più economico di un transistor, direi.
Oltre al giusto modo di manipolare la porta B ho anche aggiunto dei filtri sulla durata degli impulsi, soprattutto nel caso che si utilizzi un radiocmando diverso da quello che ho attualmente. Così gli impulsi più corti di 0,9 ms o più lunghi di 2,1 ms sono ignorati, mentre quelli di 0,9-1,0 ms sono normalizzati ad 1 ms e quelli di 2,0-2,1 ms sono normalizzati a 2 ms.

Sviluppi futuri

Ci sono molte possibilità, se uno vuole veramente complicarsi la vita:

  • Migliore copertura, dello stesso colore della barca, ed uno strumento per misurare la tensione della batteria (in preparazione)
  • Un LED ad alta luminosità (o più), come faro della barca
  • Una fotocamera digitale tipo carta di credito, per scattare foto di animali, del fondo, ecc. (come pilotare la porta USB?)
  • Sensori di tensione e temperatura, per evitare di bruciare i transistor (velocità massima per tempi molto lunghi) o per non vedere la batteria scarica al centro di un lago...
  • Qualcuno mi ha persino suggerito un sistema di cavi per recuperare la barca in caso di affondamento, ma sono piuttosto ottimista, dopo aver visto come naviga bene!

Il circuito


Lista dei componenti

  • 1x Microchip PIC 16F84 (o 16F84A), 18 pin DIP
  • 1x zoccolo da 18 pin per integrati
  • 1x transistor 2N5320 (o simile)
  • 1x diodo 1N4002
  • 1x LED rosso
  • 1x LED bianco ad alta luminosità
  • 1x quarzo da 4 MHz
  • 2x condensatori da 27 pF
  • 1x resistenza 56 Ohm, 1/4 W
  • 1x resistenza 62 Ohm, 1/2 W
  • 1x resistenza 470 Ohm, 1/4 W
  • 1x resistenza 810 Ohm, 1/4 W
  • 1x resistenza 4.7 KOhm, 1/4 W
  • 2x resistenze 100 KOhm 1/4 W
  • 9x punti di connessione

Al di fuori della scheda di controllo

  • 4x transistor 2N3055, montati su un dissipatore
  • 1x relay 30 A a due scambi (ho usato due relay separati da 10 A, 3 scambi)
  • 1x diodo 1N5406

Collegamenti

Questa pagina è disponibile anche in lingua inglese (in English)