Indholdsfortegnelse:

DIY laserstyringsmodul til Arduino: 14 trin (med billeder)
DIY laserstyringsmodul til Arduino: 14 trin (med billeder)

Video: DIY laserstyringsmodul til Arduino: 14 trin (med billeder)

Video: DIY laserstyringsmodul til Arduino: 14 trin (med billeder)
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Juli
Anonim
Image
Image

I denne Instructable vil jeg demonstrere konstruktionen af et dobbeltakset, enkelt spejl laserstrålestyringsmodul ved hjælp af 3D-printede dele og billige komponenter fra eBay.

Dette projekt har ligheder med Arduino Laser Show med fuld XY -kontrol og Arduino Laser Show med ægte Galvos, men jeg tror, er den første til at bruge et 3D -printet design med billige solenoider. Jeg lægger alle designfilerne under GPLv3, så designet kan forbedres og forbedres.

Selvom jeg i øjeblikket kun har samlet modulet og skrevet en meget grundlæggende testkode, er mit håb, at jeg en dag kan tage det til det næste niveau ved at indarbejde vektorgrafik -koden fra mine tidligere instruerbare, superhurtige analoge spændinger fra Arduino.

Trin 1: Saml de ikke-3D-trykte dele

Laserenheden består af følgende dele:

  • 4 mikro solenoider
  • Et 1/2 tommer spejl
  • Fire M3 skruer

De særlige solenoider, jeg brugte, blev købt på eBay for $ 1,45 hver. Det runde spejl blev fundet i håndværksgangen på HobbyLobby - en pakke med 25 kostede mig mindre end $ 3 dollars. Du kan også finde spejle på eBay.

Du skal også bruge en billig laserpeger, igen, fra eBay. En violet laser sammen med et glød-in-the-dark ark vinyl er en glimrende kombination til dette projekt!

Et sæt hjælpende hænder er ikke nødvendigt, men vil være meget nyttigt til at holde og placere laserpegeren. Et stort bindemiddelklip kan bruges til at holde tænd / sluk -knappen nede.

Du skal bruge en Arduino (jeg brugte en Arduino Nano) og en måde at drive solenoiderne på. Som VajkF har udtalt i kommentarerne, kan du bruge præfabrikerede H-broer som dem, der er baseret på L298 eller L9110. Disse er let tilgængelige på eBay for et par dollars og kan også bruges til at køre motorer og robotprojekter.

Da jeg ikke havde en H-bro, byggede jeg min egen driver ud af diskrete komponenter:

  • Fire NPN bipolare transistorer (jeg brugte en MPS3704)
  • Fire modstande (jeg brugte 1,2k ohm modstand)
  • Fire dioder (jeg brugte en 1N4004)
  • Et 9V batteri og batteristik

De elektroniske komponenter var fra mit laboratorium, så jeg har ikke en nøjagtig pris for dem, men medmindre du allerede har delene eller kan rive dem, er det sandsynligvis mere omkostningseffektivt at bruge en forudbygget H-bro. Ikke desto mindre vil jeg levere skemaerne til at bygge din egen.

Trin 2: 3D Udskriv Mirror Steering Module

3D Udskriv Mirror Steering Module
3D Udskriv Mirror Steering Module
3D Udskriv spejlstyringsmodulet
3D Udskriv spejlstyringsmodulet

Laserstyringsmodulet består af to 3D -trykte dele: en base til montering af fire solenoider og en leddelt platform til spejlet.

Jeg har vedhæftet de to STL -filer til dig til 3D -udskrivning samt FreeCAD -filer, hvis du skal ændre designet. Alt indhold er under GPLv3, så du kan frit foretage og dele dine forbedringer!

Trin 3: Saml lasermodulet

Saml lasermodulet
Saml lasermodulet
Saml lasermodulet
Saml lasermodulet
Saml lasermodulet
Saml lasermodulet
  • Brug varm lim til at fastgøre de fire solenoider til det nederste stykke.
  • Brug varm lim til at fastgøre spejlet på midten af det øverste stykke.
  • Sæt metalstemplerne i solenoiderne, og placer derefter det øverste stykke på stolperne (men skru det ikke ned). Drej topstykket lidt, og løft hvert stempel med en lille skruetrækker. Skivens læbe skal glide ind i rillen på stemplet. Vær forsigtig, da 3D -printede hængsler er meget skrøbelige. Med tålmodighed og muligvis et par mislykkede forsøg skulle du kunne placere alle fire stempler uden at vride eller lægge pres på hængslerne.
  • Når alle stemplerne er placeret, skal du delvis indsætte M3 -skruerne, men inden du strammer dem ned, skal du trykke forsigtigt på hvert stempel og sørge for, at spejlet vipper frit. Hvis den ikke bevæger sig frit eller griber fat, kan det være nødvendigt at fjerne toppladen, lirke en eller flere solenoider løs og fastgøre den igen med en lille udadgående vinkel (det kan hjælpe med at placere afstandsstykker mellem den og den centrale stolpe).

Trin 4: Udskriv laserpointerhalsbåndet

Udskriv laserpointerhalsbåndet
Udskriv laserpointerhalsbåndet
Udskriv laserpointerhalsbåndet
Udskriv laserpointerhalsbåndet

Laserpegerskraven passer på hovedet på laserpegeren. Du kan derefter bruge et sæt hjælpende hænder til at gribe kraven og lade dig placere laseren præcist på din bænk.

Trin 5: Saml kørebanen

Saml kørebanen
Saml kørebanen

Drivkredsløbet er vist i skematisk. Som tidligere nævnt er min version bygget op af diskrete komponenter, men du kan også bruge en let tilgængelig H-bro. Hvis du vælger at bygge din egen, skal du bygge fire kopier af dette kredsløb, en for hver af de fire solenoider.

Hvert kredsløb forbinder til en Arduino -pin, to til styring af venstre og højre magnetventil, og to for op- og ned -solenoider. Disse skal forbindes til PWM -kompatible stifter, sådan:

  • Pin 9: Up Solenoid
  • Pin 3: Down Solenoid
  • Pin 11: Venstre magnetventil
  • Pin 10: Højre magnetventil

Et enkelt 9V batteri kan bruges til at køre alle fire magnetventilkredsløb, eller du kan bruge en strømforsyning ved bordpladen. Arduino kører uden USB -strøm og bør ikke tilsluttes den positive side af 9V -batteriet. Den negative side af batteriet bruges imidlertid som jordreference og skal forbindes til GND-stiften på Arduino samt til emitterstifterne på transistorer.

Trin 6: Upload prøvekoden

Upload prøvekoden
Upload prøvekoden

Eksempelkoden er blevet opdateret med følgende funktioner:

  • Justerer PWM -frekvensen, så mekanismen er næsten lydløs ved lave hastigheder. Det summende i Motion Test 1 er helt væk!
  • Tilføjes som spændingsligninger baseret på papiret fra Schimpf for at "linearisere" det ikke-lineære svar fra solenoiderne.

Jeg har også inkluderet en implementering af en Lorenz Attractor baseret på koden fra denne blog.

Resultaternes troværdighed lader ganske lidt tilbage at ønske, men jeg arbejder stadig på det!:)

De efterfølgende trin illustrerer nogle af de teknikker, der bruges i koden.

Trin 7: Skru ned for lydstyrken

I min Motion Test 1 kan du høre et højt summende, især under op og ned bevægelse. Det viser sig, at dette var forårsaget af, at standard PWM -hakkefrekvensen for Arduino var inden for det hørbare område. Den hurtige kobling af spolespændingen til og fra ville få dem til at vibrere ved denne frekvens og gøre dem til små små højttalere.

For at løse dette problem øgede jeg PWM -frekvensen i koden:

#define PWM_FREQ_31372Hz 0x01 // Indstiller PWM -frekvensen til 31372,55 Hz #definerer PWM_FREQ_3921Hz 0x02 // Indstiller PWM -frekvensen til 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Sætter PWM_TQ1TQ1TFBT_TQ1TF_TQ1TF_TQ1TF_TV_TQ1TF1TQ1TFQTQQT1TFQTQQTQQTQTQTQTQTQTQTQTQTQQT1 & 0b11111000) | frekvens; // Indstil timer1 (ben 9 og 10) frekvens TCCR2B = (TCCR2B & 0b11111000) | frekvens; // Indstil timer2 (ben 3 og 11) frekvens}

Indstilling af Arduino PWM -frekvensen er et nyttigt trick til at dæmpe solenoider eller motorer. Eksperimenter med de forskellige valg af frekvenser for at se, hvilken der giver dig de bedste resultater. Selvom det indebærer noget mere avanceret programmering, er en god ressource om, hvordan timerne fungerer her.

Trin 8: Indstilling af spændinger for at reducere forvrængning

Indstilling af spændinger for at reducere forvrængning
Indstilling af spændinger for at reducere forvrængning

Mine indledende bevægelsestest viste, at der var betydelig forvrængning i responsen fra solenoiderne. I Motion Test 3 (venstre figur) blev det, der skulle være en cirkulær spiral, i stedet en rektangulær bane med hakkede kanter.

At løse dette problem krævede en lille smule matematik, men jeg var i stand til at finde et fantastisk papir på nettet, der hjalp mig med at forstå problemet godt nok til at løse det i software.

Det der følger følger dig gennem den proces, jeg gennemgik for at justere systemet og forbedre udseendet af de resulterende spor!

Trin 9: Perfekt software, med matematik

Perfekt software, med matematik
Perfekt software, med matematik
Perfekt software, med matematik
Perfekt software, med matematik

Hemmeligheden bag at justere systemet viste sig at være et glimrende papir kaldet "A Detailed Explanation of Solenoid Force" af Paul H. Schimpf fra Eastern Washington University (link). Især gav ligning 17 mig solenoidkraften i form af forskellige udtryk.

Følgende udtryk var lette at måle:

  • R - Min solenoides modstand
  • l - Solenoidens længde
  • x - Stempelets forskydning i magnetventilen
  • V - Spændingen over solenoiden

Jeg vidste også, at kraften, der blev udsat af solenoiden, skulle afbalancere kraften fra de 3D-trykte fjedre på dobbeltakset spejl. Kraften i en fjeder er underlagt Hookes lov, der er angivet som følger:

F = -kx

Selvom jeg ikke kendte værdien af k, vidste jeg i det mindste, at den kraft, jeg fik ud af ligning 17 fra Schimpfs papir, skulle svare til kraften fra Hookes lov.

Værdien af alfa (α) var vanskelig. Selvom ligninger 13 og 14 viste, hvordan man beregner disse værdier ud fra området af solenoiden (A), antallet af omdrejninger (N) og værdierne for magnetisk permeabilitet (μ), ønskede jeg ikke at skulle rive en solenoid fra hinanden for at tælle antal omdrejninger, og jeg vidste heller ikke det materiale, som min solenoidkerne var lavet af.

Trin 10: En billig komponenttester sparer dagen

En billig komponenttester sparer dagen!
En billig komponenttester sparer dagen!
En billig komponenttester sparer dagen!
En billig komponenttester sparer dagen!
En billig komponenttester sparer dagen!
En billig komponenttester sparer dagen!

Det viste sig imidlertid, at ligning 15 og 16 gav mig det, jeg havde brug for. Jeg havde en billig M328 komponent tester, som jeg havde købt fra eBay for $ 10. Den kunne bruge den til at måle induktansen af min solenoid, og jeg fandt ud af, at ved at skubbe ankeret ind på forskellige dybder gav det mig forskellige induktionsværdier.

At måle det med ankeret helt indsat gav mig værdien af L (0).

Længden af min solenoid var 14 mm, så jeg målte induktansen med ankeret i fem positioner, og dette gav mig forskellige værdier for 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

Jeg brugte derefter et regneark til at plotte mine værdier kontra værdien af ligning 15 og 16 for et bestemt valg af μr og varierede derefter mit valg, indtil jeg fandt et godt match. Dette skete, da μr var 2,9, som vist i grafen.

Trin 11: Find forårskonstanten K, løse problemet

Image
Image
Analyse af aktuelle problemer og mulige løsninger
Analyse af aktuelle problemer og mulige løsninger

Den eneste tilbageværende ukendte var K, forårskonstanten. Jeg målte dette ved at anvende 9V til en af solenoiderne i min dobbeltakse-samling og måle afstanden, hvor spejlet blev trukket ned. Med disse værdier var jeg i stand til at løse ligningerne for K, som jeg fandt var omkring 10.41.

Jeg havde nu de værdier, jeg havde brug for til at beregne magnetens træk ved forskellige positioner langs slaget. Ved at indstille F (x) til fjederkraften fra Hookes lov kan jeg løse den nødvendige spænding V.

Grafen viser den spænding, der kræves for at flytte solenoiden til en hvilken som helst ønsket position x.

Til højre, hvor spændingen er nul og positionen er 3 mm, svarer dette til magnetens neutrale hvilepunkt, når de 3D -printede hængsler er helt afslappede. At bevæge sig til venstre på grafen svarer til at trække ankeret ind i solenoiden mod træk fra de 3D-printede hængsler-dette kræver i første omgang mere spænding, men da ankeret kommer dybere ind i solenoiden, øges trækket, og den nødvendige drivspænding aftager.

Dette forhold er bestemt ikke-lineært, men med ligningerne fra Schimpfs papir kan jeg skrive min Arduino-kode for at udsende de korrekte spændinger, så stråleafbøjningen er lineær:

float positionToVoltage (float x) {

// Gendannelse af kraft, der udøves af hængsler (Hookes lov) ved ønsket x. const float spring_F = -spring_K * (x - spring_X0); // Spænding sådan, at magnetventilens trækkraft matcher // genoprettelseskraften for hængslerne retur sqrt (-2*R*R*(-spring_F)*solenoid_len/(en*L_0*exp (-a*x/solenoid_len)))); }

Dette fører til en meget mere cirkulær spiral end i min originale bevægelsestest. Mission fuldført!

Trin 12: Spørgsmål og svar om førerkredsløbet ved hjælp af diskrete komponenter

Hvorfor kan jeg ikke tilslutte solenoiden direkte til Arduino?

Det er et spørgsmål om, hvor meget strøm Arduino kan levere uden at skade. Dette er cirka 40mA pr. Stift. Når vi ved, at Arduino fungerer ved 5V, kan vi bruge Ohms lov til at beregne den nødvendige minimumsmodstand for belastningen (i dette tilfælde magnetventilen). Ved at dividere 5 volt med 0,040 ampere får vi 125 ohm. Hvis belastningen har en større modstand, kan vi tilslutte den direkte til Arduino, ellers kan vi ikke. En lille solenoid har typisk en modstand på 50 ohm, så vi kan ikke køre den direkte fra Arduino. Hvis vi gjorde det, ville det trække 100mA, hvilket klart er for meget.

Hvorfor bruger du 9V til solenoiden, men 5V til Arduino?

Arduino kører ved 5V, men dette er lidt for lidt til en solenoid. Ved hjælp af en transistor kan vi vælge en spænding til solenoiden, som er uafhængig af den 5V, der bruges til Arduino.

Hvordan ved jeg, om en transistor er egnet til dette projekt?

Ligesom Arduino er hovedkravet, at strømmen, der strømmer gennem solenoiden, ikke overstiger maksimumværdierne for transistoren (især kollektorstrømmen). Vi kan let beregne det værst tænkelige scenario ved at måle magnetventilens modstand og derefter dividere forsyningsspændingen med det. I tilfælde af en 9V forsyningsstrøm til solenoiderne og en magnetventil på 50 ohm, sætter det værste tilfælde os til 180mA. MPS3704 er for eksempel klassificeret til en maksimal kollektorstrøm på 600 mA, hvilket giver os en margin på cirka 3.

Hvordan bestemmer jeg minimumsværdien af den modstand, der skal sættes mellem Arduinos output og basen af transistoren?

Output fra Arduino vil forbinde basisbenet på de bipolære transistorer gennem en strømbegrænsende modstand. Da Arduino fungerer ved 5V, kan vi igen bruge Ohms lov til at beregne den modstand, der kræves for at begrænse strømmen under 40mA. Det vil sige, dividere 5 volt med 0,04 ampere for at opnå en værdi på mindst 125 ohm. Højere modstandsværdier vil reducere strømmen og dermed give os en endnu større sikkerhedsmargen.

Er der en maksimal værdi for den modstand, som jeg ikke bør overskride?

Det viser sig, ja. En transistor har en såkaldt strømforstærkning. For eksempel, hvis forstærkningen er 100, betyder det, at hvis vi sætter 1mA i basen, vil der strømme op til 100mA gennem den belastning, transistoren styrer. Hvis vi sætter 1.8mA ind i basen, vil der op til 180mA strømme gennem belastningen. Da vi tidligere har beregnet, at ved 9V strømmer 180mA gennem solenoiden, så er en basestrøm på 1.8mA det "søde sted", og mindre og vores solenoid vil ikke tænde helt.

Vi ved, at Arduino slukker 5V, og vi vil have 1.8mA strøm til at strømme, så vi bruger Ohms lov (R = V/I) til at beregne modstanden (R = V/I). 5V divideret med 1,8mA giver en modstand på 2777 ohm. Så givet de antagelser, vi gjorde, forventer vi, at modstanden skal ligge mellem 125 og 2777 - at vælge noget som 1000 ohm giver os en ret god sikkerhedsmargen i begge tilfælde.

Trin 13: Analyse af aktuelle problemer og mulige løsninger

Analyse af aktuelle problemer og mulige løsninger
Analyse af aktuelle problemer og mulige løsninger

Den nuværende prototype viser potentiale, men der er stadig flere problemer:

  1. Bevægelse langs X- og Y -aksen ser ikke ud til at være vinkelret.
  2. Der er et spring, når spejlet skifter retning.
  3. Opløsningen er ret lav, og der er synlige trappetrinmønstre.
  4. Ved højere bevægelseshastigheder forvrænges laserens vej af vibrationer og ringe.

Problem 1) kan skyldes designet af de 3D -trykte fleksible hængsler, der sender bevægelse langs en akse til den vinkelrette akse.

Problem 2) skyldes slap i koblingen mellem drivstemplerne og spejlplatformen, dette får spejlet til at rykke og springe ved overgange mellem X- og Y -aksen. Denne pludselige bevægelse fører til et mørkt X -formet hul, hvor laserprikken foretager et hurtigere ukontrolleret træk.

Problem 3) opstår, fordi standard Arduino PWM kun har 255 niveauer, og en hel del af dem er spildt på grund af spændingskurvens form. Dette kunne forbedres betydeligt ved brug af timer1, som er 16-bit og ville være i stand til 65536 unikke værdier.

Problem 4) opstår, fordi spejlet og magnetventilens glidearmatur (stempler) udgør en betydelig mængde bevægelig masse.

Da spørgsmål 1) og 2) er relateret til det mekaniske design, kan en mulighed være at fjerne metalliske stempler og erstatte dem med små sjældne jordartsmagneter, der er fastgjort direkte på vippepladen. Magnetventilerne ville være en åben spole, der ville tiltrække eller afvise magneterne uden at komme i fysisk kontakt. Dette ville føre til jævnere bevægelse og eliminere muligheden for ryk, samtidig med at den samlede masse reduceres.

Reduktion af masse er den primære løsning for problem 4), men eventuelle resterende problemer kan målrettes direkte i software ved at implementere en bevægelseskontrolprofil i software for at accelerere og bremse spejlet på en kontrolleret måde. Dette gøres allerede i vid udstrækning i 3D -printerens firmware, og lignende metoder kan også fungere her. Her er nogle ressourcer relateret til bevægelseskontrol, som det gælder for 3D -printere:

  • "Mathematics of Motion Control Profiles", Chuck Lewin (link)
  • "Jerk Controlled Motion Explained", (link)

Jeg formoder, at tilføjelse af en trapezformet bevægelseskontrolprofil ville tillade spejlet at blive kørt med meget højere hastigheder uden ringning eller vibrationsartefakter.

Trin 14: Fremtidigt arbejde og mulige applikationer

Selvom udviklingen af løsninger på disse problemer vil kræve en betydelig mængde arbejde, er jeg håbefuld om, at dette open-source bjælkestyringsmodul kan blive et overkommeligt alternativ til galvanometerbaserede projekter i sådanne applikationer som:

  • Et billigt lasershow til DJ'er og VJ'er.
  • En elektromekanisk vektordisplay til et vintage arkadespil som f.eks. Vectrex.
  • En DIY harpiks-type SLA 3D-printer, der i ånden af RepRap-bevægelsen kan udskrive sit eget laserstyringsmodul.
  • Digital panorering eller optisk billedstabilisering til kameraer.
Arduino konkurrence 2017
Arduino konkurrence 2017
Arduino konkurrence 2017
Arduino konkurrence 2017

Anden pris i Arduino -konkurrencen 2017

Anbefalede: