Sommario:

Modulo di guida laser fai-da-te per Arduino: 14 passaggi (con immagini)
Modulo di guida laser fai-da-te per Arduino: 14 passaggi (con immagini)

Video: Modulo di guida laser fai-da-te per Arduino: 14 passaggi (con immagini)

Video: Modulo di guida laser fai-da-te per Arduino: 14 passaggi (con immagini)
Video: How to use Laser Transmitter and Laser sensor for Arduino 2024, Novembre
Anonim
Image
Image

In questo Instructable, dimostrerò la costruzione di un modulo di guida del raggio laser a doppio asse e a specchio singolo utilizzando parti stampate in 3D e componenti economici da eBay.

Questo progetto ha somiglianze con Arduino Laser Show con controllo XY completo e Arduino Laser Show With Real Galvos, ma credo sia il primo a utilizzare un design stampato in 3D con solenoidi economici. Sto mettendo tutti i file di design sotto la GPLv3 in modo che il design possa essere migliorato e migliorato.

Sebbene al momento abbia solo assemblato il modulo e scritto un codice di test molto semplice, la mia speranza è che un giorno possa portarlo al livello successivo incorporando il codice di grafica vettoriale dal mio precedente Instructable, Super Fast Analog Voltages di Arduino.

Passaggio 1: raccogliere le parti stampate non 3D

Il gruppo laser è composto dalle seguenti parti:

  • 4 micro solenoidi
  • Uno specchio da 1/2 pollice
  • Quattro viti M3

I particolari solenoidi che ho usato sono stati acquistati su eBay per $ 1,45 ciascuno. Lo specchio rotondo è stato trovato nel corridoio dell'artigianato a HobbyLobby: una confezione da 25 mi è costata meno di $ 3 dollari. Puoi anche trovare specchi su eBay.

Avrai anche bisogno di un puntatore laser economico, di nuovo, da eBay. Un laser viola insieme a un foglio di vinile fosforescente è una combinazione eccellente per questo progetto!

Non è necessario un set di mani di aiuto, ma sarà molto utile per tenere e posizionare il puntatore laser. Una grande clip per raccoglitori può essere utilizzata per tenere premuto il pulsante di accensione.

Avrai bisogno di un Arduino (ho usato un Arduino Nano) e un modo per guidare i solenoidi. Come ha affermato VajkF nei commenti, è possibile utilizzare ponti ad H prefabbricati come quelli basati su L298 o L9110. Questi sono prontamente disponibili su eBay per pochi dollari e possono essere utilizzati anche per guidare motori e progetti di robotica.

Poiché non avevo un ponte H, ho costruito il mio driver con componenti discreti:

  • Quattro transistor bipolari NPN (ho usato un MPS3704)
  • Quattro resistori (ho usato un resistore da 1.2k ohm)
  • Quattro diodi (ho usato un 1N4004)
  • Una batteria da 9 V e un connettore per batteria

I componenti elettronici provenivano dal mio laboratorio, quindi non ho un costo esatto per loro, ma a meno che tu non abbia già le parti o possa recuperarle, è probabilmente più conveniente utilizzare un ponte H pre-costruito. Tuttavia, fornirò gli schemi per costruire il tuo.

Passaggio 2: stampa 3D del modulo di guida dello specchio

Stampa 3D del modulo di guida dello specchio
Stampa 3D del modulo di guida dello specchio
Stampa 3D del modulo di guida dello specchio
Stampa 3D del modulo di guida dello specchio

Il modulo di guida laser è costituito da due parti stampate in 3D: una base per il montaggio di quattro solenoidi e una piattaforma articolata per lo specchio.

Ho allegato i due file STL per la stampa 3D, nonché i file di FreeCAD nel caso in cui sia necessario modificare il progetto. Tutti i contenuti sono sotto GPLv3, quindi sei libero di apportare e condividere i tuoi miglioramenti!

Passaggio 3: assemblare il modulo laser

Assemblare il modulo laser
Assemblare il modulo laser
Assemblare il modulo laser
Assemblare il modulo laser
Assemblare il modulo laser
Assemblare il modulo laser
  • Usa la colla a caldo per fissare i quattro solenoidi al pezzo inferiore.
  • Usa la colla a caldo per fissare lo specchio al centro del pezzo superiore.
  • Inserire i pistoni metallici nei solenoidi e quindi posizionare il pezzo superiore sui montanti (ma non avvitarlo). Ruota leggermente il pezzo superiore e usando un piccolo cacciavite, solleva ciascun pistone in posizione. Il labbro del disco deve scorrere nella scanalatura del pistone. Fai attenzione, poiché le cerniere stampate in 3D sono molto fragili. Con pazienza e possibilmente qualche tentativo fallito, dovresti essere in grado di posizionare tutti e quattro i pistoni senza torcere o esercitare pressione sulle cerniere.
  • Una volta posizionati tutti i pistoni, inserire parzialmente le viti M3, ma prima di serrarle, spingere delicatamente su ciascun pistone e assicurarsi che lo specchio si inclini liberamente. Se non si muove liberamente o si impiglia, potrebbe essere necessario rimuovere la piastra superiore, staccare uno o più solenoidi allentati e riattaccarlo con una leggera angolazione verso l'esterno (mettere distanziali tra esso e il montante centrale può aiutare in questo).

Passaggio 4: stampare il collare puntatore laser

Stampa il collare con puntatore laser
Stampa il collare con puntatore laser
Stampa il collare puntatore laser
Stampa il collare puntatore laser

Il collare del puntatore laser si adatta alla testa del puntatore laser. È quindi possibile utilizzare una serie di mani per afferrare il collare e consentire di posizionare il laser con precisione sul banco.

Passaggio 5: assemblare il circuito di guida

Assemblare il circuito di guida
Assemblare il circuito di guida

Il circuito di pilotaggio è mostrato nello schema. Come affermato in precedenza, la mia versione è costituita da componenti discreti, ma potresti anche utilizzare un H-bridge prontamente disponibile. Se scegli di costruirne uno tuo, dovrai costruire quattro copie di questo circuito, una per ciascuno dei quattro solenoidi.

Ogni circuito si collegherà a un pin Arduino, due per il controllo del solenoide sinistro e destro e due per i solenoidi su e giù. Questi dovranno essere collegati a pin compatibili con PWM, in questo modo:

  • Pin 9: Solenoide su
  • Pin 3: Solenoide Giù
  • Pin 11: Solenoide sinistro
  • Pin 10: Solenoide Destro

Una singola batteria da 9 V può essere utilizzata per pilotare tutti e quattro i circuiti di pilotaggio del solenoide oppure è possibile utilizzare un alimentatore da banco. L'Arduino funzionerà con l'alimentazione USB e non dovrebbe essere collegato al lato positivo della batteria da 9 V. Tuttavia, il lato negativo della batteria viene utilizzato come riferimento di massa e deve essere collegato al pin GND dell'Arduino e ai pin dell'emettitore sui transistor.

Passaggio 6: carica il codice di esempio

Carica il codice di esempio
Carica il codice di esempio

Il codice di esempio è stato aggiornato con le seguenti funzionalità:

  • Regola la frequenza PWM in modo tale che il meccanismo sia quasi silenzioso alle basse velocità. Il ronzio in Motion Test 1 è completamente sparito!
  • Aggiunge come equazioni di tensione basate sull'articolo di Schimpf al fine di "linearizzare" la risposta non lineare dei solenoidi.

Ho anche incluso un'implementazione di un Lorenz Attractor basato sul codice di questo blog.

La fedeltà dei risultati lascia un po' a desiderare, ma ci sto ancora lavorando!:)

I passaggi successivi illustrano alcune delle tecniche utilizzate nel codice.

Passaggio 7: abbassare il volume

Nel mio Motion Test 1, puoi sentire un forte ronzio, in particolare durante il movimento su e giù. Si scopre che ciò è stato causato dalla frequenza di taglio PWM predefinita dell'Arduino all'interno dell'intervallo udibile. La rapida attivazione e disattivazione della tensione della bobina li farebbe vibrare a quella frequenza, trasformandoli in minuscoli altoparlanti.

Per risolvere questo problema, ho aumentato la frequenza PWM nel codice:

#define PWM_FREQ_31372Hz 0x01 // Imposta la frequenza PWM su 31372,55 Hz#define PWM_FREQ_3921Hz 0x02 // Imposta la frequenza PWM su 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Imposta la frequenza PWM su 980,39 Hz void setPWMTimerFrequencies(uTC) & 0b11111000) | frequenza; // Imposta la frequenza del timer1 (pin 9 e 10) TCCR2B = (TCCR2B e 0b11111000) | frequenza; // Imposta la frequenza del timer2 (pin 3 e 11) }

L'impostazione della frequenza PWM di Arduino è un trucco utile per silenziare solenoidi o motori. Sperimenta con le diverse scelte di frequenze per vedere quale ti dà i migliori risultati. Sebbene implichi una programmazione più avanzata, una buona risorsa su come funzionano i timer è qui.

Passaggio 8: regolazione delle tensioni per ridurre la distorsione

Regolazione delle tensioni per ridurre la distorsione
Regolazione delle tensioni per ridurre la distorsione

I miei test di movimento iniziali hanno mostrato che c'era una distorsione significativa nella risposta dei solenoidi. Nel Motion Test 3 (figura a sinistra), quella che doveva essere una spirale circolare è diventata invece una rete rettangolare con bordi frastagliati.

Risolvere questo problema ha richiesto un po' di matematica, ma sono riuscito a trovare un articolo straordinario sul web che mi ha aiutato a capire il problema abbastanza bene da risolverlo nel software.

Quello che segue ti guida attraverso il processo che ho seguito per mettere a punto il sistema e migliorare l'aspetto delle tracce risultanti!

Passaggio 9: perfezionare il software, con la matematica

Perfezionare il software, con Math
Perfezionare il software, con Math
Perfezionare il software, con Math
Perfezionare il software, con Math

Il segreto per mettere a punto il sistema si è rivelato essere un eccellente documento intitolato "A Detailed Explanation of Solenoid Force" di Paul H. Schimpf della Eastern Washington University (link). In particolare, l'equazione 17 mi ha dato la forza del solenoide in termini di vari termini.

I seguenti termini erano facili da misurare:

  • R - La resistenza del mio solenoide
  • l - La lunghezza del solenoide
  • x - Lo spostamento del pistone nel solenoide
  • V - La tensione attraverso il solenoide

Sapevo anche che la forza emessa dal solenoide doveva bilanciare la forza delle molle stampate in 3D sullo specchio a doppio asse. La forza di una molla è governata dalla legge di Hooke, che è enunciata come segue:

F = -kx

Anche se non conoscevo il valore di k, sapevo almeno che la forza ricavata dall'equazione 17 dall'articolo di Schimpf doveva eguagliare la forza dalla legge di Hooke.

Il valore di alfa (α) era complicato. Sebbene le equazioni 13 e 14 mostrassero come calcolare questi valori dall'area del solenoide (A), il numero di spire (N) e i valori di permeabilità magnetica (μ), non volevo dover smontare un solenoide per contare il numero di giri, né conoscevo il materiale di cui era fatto il nucleo del mio solenoide.

Passaggio 10: un tester di componenti economico salva la giornata

Un tester di componenti economico salva la giornata!
Un tester di componenti economico salva la giornata!
Un tester di componenti economico salva la giornata!
Un tester di componenti economico salva la giornata!
Un tester di componenti economico salva la giornata!
Un tester di componenti economico salva la giornata!

Si è scoperto, tuttavia, che le equazioni 15 e 16 mi hanno dato ciò di cui avevo bisogno. Avevo un tester per componenti M328 economico che avevo acquistato da eBay per $ 10. È stato in grado di usarlo per misurare l'induttanza del mio solenoide e ho scoperto che spingendo l'armatura a diverse profondità mi davano diversi valori di induzione.

Misurandolo con l'armatura completamente inserita mi ha dato il valore di L(0).

La lunghezza del mio solenoide era di 14 mm, quindi ho misurato l'induttanza con l'armatura in cinque posizioni e questo mi ha dato vari valori per L(x):

  • L(0,0) = 19,8 mH
  • L(3.5) = 17,7 mH
  • L(7.0) = 11,1 mH
  • L(10,5) = 9,3 mH
  • L(14) = 9,1 mH

Ho quindi utilizzato un foglio di calcolo per tracciare i miei valori rispetto al valore dell'equazione 15 e 16, per una particolare scelta di μr e poi ho variato la mia scelta fino a quando non ho trovato una buona corrispondenza. Questo è successo quando μr era 2,9, come mostrato nel grafico.

Passaggio 11: trova la costante di primavera K, risolvi il problema

Image
Image
Analisi dei problemi attuali e possibili soluzioni
Analisi dei problemi attuali e possibili soluzioni

L'unica incognita rimasta era K, la costante della molla. L'ho misurato applicando 9V a uno dei solenoidi nel mio gruppo a doppio asse e misurando la distanza in cui lo specchio è stato abbassato. Con questi valori, sono stato in grado di risolvere le equazioni per K, che ho trovato intorno a 10,41.

Ora avevo i valori di cui avevo bisogno per calcolare l'attrazione del solenoide in varie posizioni lungo la corsa. Impostando F(x) uguale alla forza della molla dalla legge di Hooke, posso risolvere per la tensione richiesta V.

Il grafico mostra la tensione richiesta per spostare il solenoide nella posizione desiderata x.

A destra, dove la tensione è zero e la posizione è 3 mm, questo corrisponde al punto di riposo neutro del solenoide quando le cerniere stampate in 3D sono completamente rilassate. Spostarsi a sinistra sul grafico corrisponde a tirare l'armatura nel solenoide contro l'attrazione delle cerniere stampate in 3D: inizialmente ciò richiede più tensione, ma man mano che l'armatura si approfondisce nel solenoide, l'attrazione aumenta e la tensione di guida richiesta si riduce.

Questa relazione è decisamente non lineare, ma con le equazioni dell'articolo di Schimpf, posso scrivere il mio codice Arduino per emettere le tensioni corrette in modo che la deflessione del raggio sia lineare:

posizione floatToVoltage(float x) {

// Ripristina la forza esercitata dai cardini (legge di Hooke) alla x desiderata. const float spring_F = -spring_K * (x - spring_X0); // Tensione tale che la forza di trazione del solenoide corrisponda alla // forza di richiamo delle cerniere return sqrt(-2*R*R*(-spring_F)*solenoid_len/(a*L_0*exp(-a*x/solenoid_len))); }

Questo porta a una spirale molto più circolare rispetto al mio test di movimento originale. Missione compiuta!

Passaggio 12: domande e risposte sul circuito del driver utilizzando componenti discreti

Perché non posso collegare il solenoide direttamente ad Arduino?

È una questione di quanta corrente può fornire Arduino senza subire danni. Questo è circa 40 mA per pin. Sapendo che Arduino funziona a 5V, possiamo usare la legge di Ohm per calcolare la resistenza minima richiesta del carico (in questo caso, il solenoide). Dividendo 5 volt per 0,040 ampere otteniamo 125 ohm. Se il carico ha una resistenza maggiore possiamo collegarlo direttamente ad Arduino, altrimenti no. Un piccolo solenoide ha tipicamente una resistenza di 50 ohm, quindi non possiamo pilotarlo direttamente dall'Arduino. Se lo facessimo, tirerebbe 100mA, che è chiaramente troppo.

Perché usi 9V per il solenoide, ma 5V per Arduino?

L'Arduino funziona a 5V, ma questo è un po' troppo poco per un solenoide. L'uso di un transistor ci consente di scegliere una tensione per il solenoide che è indipendente dai 5 V utilizzati per Arduino.

Come faccio a sapere se un transistor è adatto per questo progetto?

Proprio come l'Arduino, il requisito principale è che la corrente che scorre attraverso il solenoide non superi i valori massimi per il transistor (in particolare, la corrente del collettore). Possiamo facilmente calcolare lo scenario peggiore misurando la resistenza del solenoide e quindi dividendo la tensione di alimentazione per quella. Nel caso di una corrente di alimentazione di 9 V per i solenoidi e una resistenza del solenoide di 50 ohm, lo scenario peggiore ci pone a 180 mA. L'MPS3704, ad esempio, è valutato per una corrente massima del collettore di 600 mA, che ci dà un margine di circa 3.

Come determino il valore minimo della resistenza da mettere tra l'uscita di Arduino e la base del transistor?

L'uscita dell'Arduino collegherà la gamba di base dei transistor bipolari attraverso un resistore di limitazione di corrente. Poiché Arduino funziona a 5V, possiamo usare nuovamente la legge di Ohm per calcolare la resistenza necessaria per limitare la corrente sotto i 40mA. Cioè, dividere 5 volt per 0,04 ampere per ottenere un valore di almeno 125 ohm. Valori di resistenza più alti diminuiranno la corrente, dandoci così un margine di sicurezza ancora maggiore.

C'è un valore massimo per quella resistenza che non dovrei superare?

Si scopre, sì. Un transistor ha il cosiddetto guadagno di corrente. Ad esempio, se il guadagno è 100, significa che se mettiamo 1 mA nella base, fino a 100 mA fluiranno attraverso il carico che il transistor sta controllando. Se inseriamo 1,8 mA nella base, nel carico scorreranno fino a 180 mA. Poiché abbiamo calcolato in precedenza che a 9 V, 180 mA scorre attraverso il solenoide, quindi una corrente di base di 1,8 mA è il "punto debole" e meno e il nostro solenoide non si accenderà completamente.

Sappiamo che Arduino emette 5V e vogliamo che fluisca 1.8mA di corrente, quindi usiamo la legge di Ohm (R=V/I) per calcolare la resistenza (R=V/I). 5V diviso per 1,8mA danno una resistenza di 2777 ohm. Quindi, date le ipotesi che abbiamo fatto, ci aspettiamo che la resistenza debba essere compresa tra 125 e 2777: la scelta di qualcosa come 1000 ohm ci dà un margine di sicurezza abbastanza buono in entrambi i casi.

Passaggio 13: analisi dei problemi attuali e possibili soluzioni

Analisi dei problemi attuali e possibili soluzioni
Analisi dei problemi attuali e possibili soluzioni

L'attuale prototipo mostra del potenziale, ma permangono diversi problemi:

  1. Il movimento lungo gli assi X e Y non sembra essere perpendicolare.
  2. C'è un salto quando lo specchio cambia direzione.
  3. La risoluzione è piuttosto bassa e sono visibili modelli di gradini.
  4. A velocità di movimento più elevate, il percorso del laser è distorto da vibrazioni e squilli.

Il problema 1) può essere causato dal design delle cerniere flessibili stampate in 3D che trasmettono il movimento lungo un asse all'asse perpendicolare.

Il problema 2) è dovuto al gioco nell'accoppiamento tra i pistoni di guida e la piattaforma dello specchio, questo fa sì che lo specchio sobbalzi e salti nelle transizioni tra l'asse X e Y. Questo movimento improvviso porta a uno spazio a forma di X oscurato in cui il punto laser sta facendo un movimento incontrollato più veloce.

Il problema 3) si verifica perché il PWM Arduino predefinito ha solo 255 livelli e alcuni di questi vengono sprecati a causa della forma della curva di tensione. Questo potrebbe essere migliorato in modo significativo con l'uso di timer1, che è a 16 bit e potrebbe essere in grado di 65536 valori univoci.

Il problema 4) si verifica perché lo specchio e l'armatura scorrevole del solenoide (pistoni) costituiscono una quantità significativa di massa in movimento.

Poiché i problemi 1) e 2) sono legati al design meccanico, una possibilità potrebbe essere quella di rimuovere i pistoni metallici e sostituirli con piccoli magneti in terre rare che sono fissati direttamente alla piastra di inclinazione. I solenoidi sarebbero una bobina aperta che attirerebbe o respingerebbe i magneti senza stabilire un contatto fisico. Ciò porterebbe a un movimento più fluido ed eliminerebbe la possibilità di strappi, riducendo al contempo la massa totale.

La riduzione della massa è la soluzione principale per il problema 4), ma eventuali problemi rimanenti potrebbero essere indirizzati direttamente nel software implementando un profilo di controllo del movimento nel software per accelerare e decelerare lo specchio in modo controllato. Questo è già ampiamente fatto nel firmware della stampante 3D e metodi simili potrebbero funzionare anche qui. Ecco alcune risorse relative al controllo del movimento applicato alle stampanti 3D:

  • "Matematica dei profili di controllo del movimento", Chuck Lewin (link)
  • "Spiegazione del movimento controllato a strappo", (link)

Sospetto che l'aggiunta di un profilo di controllo del movimento trapezoidale consentirebbe di guidare lo specchio a velocità molto più elevate senza squilli o artefatti da vibrazioni.

Passaggio 14: lavoro futuro e possibili applicazioni

Sebbene lo sviluppo di soluzioni a questi problemi richieda una notevole quantità di lavoro, sono fiducioso che questo modulo di orientamento del raggio open source possa diventare un'alternativa economica ai progetti basati su galvanometro in applicazioni quali:

  • Uno spettacolo laser economico per DJ e VJ.
  • Un display vettoriale elettromeccanico per un gioco arcade vintage come il Vectrex.
  • Una stampante 3D SLA in resina fai-da-te che, nello spirito del movimento RepRap, può stampare il proprio modulo di guida laser.
  • Panoramica digitale o stabilizzazione ottica dell'immagine per fotocamere.
Concorso Arduino 2017
Concorso Arduino 2017
Concorso Arduino 2017
Concorso Arduino 2017

Secondo Premio al Concorso Arduino 2017

Consigliato: