Satura rādītājs:

DIY lāzera stūres modulis Arduino: 14 soļi (ar attēliem)
DIY lāzera stūres modulis Arduino: 14 soļi (ar attēliem)

Video: DIY lāzera stūres modulis Arduino: 14 soļi (ar attēliem)

Video: DIY lāzera stūres modulis Arduino: 14 soļi (ar attēliem)
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Jūlijs
Anonim
Image
Image

Šajā pamācībā es demonstrēšu divu asu viena spoguļa lāzera staru stūres moduļa konstrukciju, izmantojot 3D drukātas detaļas un lētas eBay sastāvdaļas.

Šim projektam ir līdzības ar Arduino lāzera šovu ar pilnu XY kontroli un Arduino lāzera šovu ar īstiem galvos, taču es uzskatu, ka tas ir pirmais, kas izmantoja 3D drukātu dizainu ar lētiem solenoīdiem. Es ievietoju visus dizaina failus zem GPLv3, lai dizainu varētu uzlabot un uzlabot.

Lai gan šobrīd esmu tikai salikusi moduli un uzrakstījis ļoti vienkāršu testa kodu, es ceru, ka kādu dienu es varu to pārcelt uz nākamo līmeni, iekļaujot vektorgrafikas kodu no sava iepriekšējā Arduino Instructable, Super Fast Analog Sprieguma.

1. darbība: apkopojiet detaļas, kas nav 3D izdrukas

Lāzera mezgls sastāv no šādām daļām:

  • 4 mikro solenoīdi
  • Viens 1/2 collu spogulis
  • Četras M3 skrūves

Konkrētie solenoīdi, kurus izmantoju, tika iegādāti eBay par katru USD 1,45. Apaļais spogulis tika atrasts amatniecības ejā HobbyLobby - 25 iepakojums man izmaksāja nepilnus 3 dolārus. Spoguļus var atrast arī vietnē eBay.

Jums arī būs nepieciešams lēts lāzera rādītājs no eBay. Violets lāzers kopā ar tumsā mirdzošu vinila loksni ir lieliska kombinācija šim projektam!

Palīdzīgu roku komplekts nav nepieciešams, bet būs ļoti noderīgs lāzera rādītāja turēšanai un novietošanai. Lai turētu nospiestu barošanas pogu, var izmantot lielu saistvielu klipu.

Jums būs nepieciešams Arduino (es izmantoju Arduino Nano) un veids, kā vadīt solenoīdus. Kā VajkF ir norādījis komentāros, jūs varētu izmantot iepriekš izgatavotu H tiltu, piemēram, tos, kuru pamatā ir L298 vai L9110. Tie ir viegli pieejami eBay par dažiem dolāriem, un tos var izmantot arī motoru un robotikas projektu vadīšanai.

Tā kā man nebija H tilta, es izveidoju savu draiveri no atsevišķiem komponentiem:

  • Četri NPN bipolāri tranzistori (es izmantoju MPS3704)
  • Četri rezistori (es izmantoju 1,2 kΩ rezistoru)
  • Četras diodes (es izmantoju 1N4004)
  • 9V akumulators un akumulatora savienotājs

Elektroniskie komponenti bija no manas laboratorijas, tāpēc man nav precīzas izmaksas par tiem, bet, ja vien jums jau nav detaļu vai varat tās iztīrīt, iespējams, ir rentablāk izmantot iepriekš izveidotu H tiltu. Neskatoties uz to, es sniegšu shēmas, kā izveidot savu.

2. darbība: 3D drukājiet spoguļa stūres moduli

3D drukājiet spoguļa stūres moduli
3D drukājiet spoguļa stūres moduli
3D drukājiet spoguļa stūres moduli
3D drukājiet spoguļa stūres moduli

Lāzera stūres modulis sastāv no divām 3D drukātām daļām: pamatnes četru solenoīdu montāžai un šarnīra platformas spogulim.

Esmu pievienojis jums divus STL failus 3D drukāšanai, kā arī FreeCAD failus, ja jums ir jāmaina dizains. Viss saturs ir saskaņā ar GPLv3, tāpēc jūs varat brīvi veikt un kopīgot savus uzlabojumus!

3. darbība: salieciet lāzera moduli

Salieciet lāzera moduli
Salieciet lāzera moduli
Salieciet lāzera moduli
Salieciet lāzera moduli
Salieciet lāzera moduli
Salieciet lāzera moduli
  • Izmantojiet karstu līmi, lai piestiprinātu četrus solenoīdus apakšējai daļai.
  • Izmantojiet karstu līmi, lai piestiprinātu spoguli augšējā gabala centrā.
  • Ievietojiet metāla virzuļus solenoīdos un pēc tam novietojiet augšējo daļu uz stabiem (bet neskrūvējiet to uz leju). Nedaudz pagrieziet augšējo gabalu un, izmantojot nelielu skrūvgriezi, paceliet katru virzuli savā vietā. Diska lūpai jāieslīd virzuļa rievā. Esiet piesardzīgs, jo 3D drukātās eņģes ir ļoti trauslas. Ar pacietību un, iespējams, dažiem neveiksmīgiem mēģinājumiem jums vajadzētu būt iespējai novietot visus četrus virzuļus, nesagriežot vai nespiežot uz eņģēm.
  • Kad visi virzuļi ir novietoti, daļēji ievietojiet M3 skrūves, bet pirms to pievilkšanas viegli nospiediet katru virzuli un pārliecinieties, ka spogulis brīvi noliecas. Ja tas nepārvietojas brīvi vai aizķeras, var būt nepieciešams noņemt augšējo plāksni, atraut vienu vai vairākus solenoīdus un atkal piestiprināt to nelielā ārējā leņķī (starplikas novietošana starp to un centrālo balstu var palīdzēt).

4. solis: izdrukājiet lāzera rādītāja apkakli

Izdrukājiet lāzera rādītāja apkakli
Izdrukājiet lāzera rādītāja apkakli
Izdrukājiet lāzera rādītāja apkakli
Izdrukājiet lāzera rādītāja apkakli

Lāzera rādītāja apkakle ietilpst uz lāzera rādītāja galvas. Pēc tam jūs varat izmantot palīdzīgu roku komplektu, lai satvertu apkakli un ļautu precīzi novietot lāzeru uz sava sola.

5. darbība: samontējiet piedziņas ķēdi

Salieciet braukšanas ķēdi
Salieciet braukšanas ķēdi

Piedziņas ķēde ir parādīta shematiski. Kā minēts iepriekš, mana versija ir veidota no atsevišķiem komponentiem, taču jūs varat izmantot arī viegli pieejamu H-tiltu. Ja izvēlaties veidot savu, jums būs jāizveido četri šīs ķēdes eksemplāri, pa vienam katram no četriem solenoīdiem.

Katra ķēde tiks savienota ar Arduino tapu, divi kreisā un labā solenoīda vadīšanai un divi augšup un lejup solenoīdiem. Tie būs jāpievieno tapām, kas spēj nodrošināt PWM, piemēram:

  • 9. tapa: augšējais solenoīds
  • 3. tapa: lejupvērsts solenoīds
  • 11. tapa: kreisais solenoīds
  • 10. tapa: labais solenoīds

Vienu 9 V akumulatoru var izmantot visu četru solenoīda draiveru ķēžu vadīšanai, vai arī varat izmantot barošanas avotu uz galda. Arduino izslēgsies no USB, un to nevajadzētu savienot ar 9V akumulatora pozitīvo pusi. Tomēr akumulatora negatīvā puse tiek izmantota kā atskaite uz zemes, un tai jābūt savienotai ar GND tapu Arduino, kā arī ar tranzistoru emitēšanas tapām.

6. darbība: augšupielādējiet parauga kodu

Augšupielādējiet parauga kodu
Augšupielādējiet parauga kodu

Koda paraugs ir atjaunināts ar šādām funkcijām:

  • Pielāgo PWM frekvenci tā, lai mehānisms būtu gandrīz kluss pie maza ātruma. Kustību kustības 1. kustība ir pilnībā pazudusi!
  • Pievieno sprieguma vienādojumus, pamatojoties uz Schimpf darbu, lai "linearizētu" solenoīdu nelineāro reakciju.

Esmu iekļāvis arī Lorenz Attractor ieviešanu, pamatojoties uz šī emuāra kodu.

Rezultātu uzticamība atstāj daudz ko vēlēties, bet es joprojām pie tā strādāju!:)

Turpmākās darbības ilustrē dažas kodā izmantotās metodes.

7. solis: Skaļuma samazināšana

Manā kustību testā 1 jūs varat dzirdēt skaļu kņadu, it īpaši kustības augšup un lejup laikā. Izrādās, ka to izraisīja Arduino noklusējuma PWM sasmalcināšanas frekvence, kas bija dzirdamajā diapazonā. Ātra spoles sprieguma ieslēgšana un izslēgšana izraisītu to vibrāciju šajā frekvencē, padarot tos par sīkiem skaļruņiem.

Lai atrisinātu šo problēmu, es palielināju PWM frekvenci kodā:

#define PWM_FREQ_31372Hz 0x01 // Iestata PWM frekvenci uz 31372,55 Hz #definēt PWM_FREQ_3921Hz 0x02 // Iestata PWM frekvenci uz 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Iestata PWM frekvenci uz 980CTB frekvenci & 0b11111000) | biežums; // Iestatīt taimeri1 (9. un 10. tapa) frekvence TCCR2B = (TCCR2B & 0b11111000) | biežums; // Iestatīt taimera2 (3. un 11. tapa) frekvenci}

Arduino PWM frekvences iestatīšana ir noderīgs triks solenoīdu vai motoru nomierināšanai. Eksperimentējiet ar dažādām frekvenču izvēlēm, lai redzētu, kura no tām sniedz vislabākos rezultātus. Lai gan tas ietver kādu progresīvāku programmēšanu, šeit ir labs resurss par taimeru darbību.

8. solis: sprieguma regulēšana, lai samazinātu kropļojumus

Spriegumu regulēšana, lai samazinātu kropļojumus
Spriegumu regulēšana, lai samazinātu kropļojumus

Mani sākotnējie kustības testi parādīja, ka solenoīdu reakcija bija ievērojami izkropļojumi. Kustības testā 3 (kreisais attēls) tā vietā apļveida spirālei kļuva taisnstūrveida tīmeklis ar robainām malām.

Lai atrisinātu šo problēmu, bija nepieciešama neliela matemātika, taču man izdevās tīmeklī atrast pārsteidzošu papīru, kas palīdzēja man pietiekami labi izprast problēmu, lai to atrisinātu programmatūrā.

Tālāk ir aprakstīts process, kurā es gāju, lai noregulētu sistēmu un uzlabotu iegūto pēdu izskatu!

9. solis: programmatūras pilnveidošana, izmantojot matemātiku

Programmatūras pilnveidošana, izmantojot matemātiku
Programmatūras pilnveidošana, izmantojot matemātiku
Programmatūras pilnveidošana, izmantojot matemātiku
Programmatūras pilnveidošana, izmantojot matemātiku

Sistēmas noskaņošanas noslēpums izrādījās lielisks raksts ar nosaukumu "Detalizēts solenoīda spēka skaidrojums", ko izstrādāja Pauls H. Šimfs no Vašingtonas Austrumu universitātes (saite). Jo īpaši 17. vienādojums man deva solenoīda spēku dažādu terminu izteiksmē.

Šos terminus bija viegli izmērīt:

  • R - mana solenoīda pretestība
  • l - solenoīda garums
  • x - Virzuļa pārvietojums solenoīdā
  • V - spriegums pāri solenoīdam

Es arī zināju, ka elektromagnētiskajam spēkam jāizlīdzina spēks no 3D drukātajām atsperēm uz divu asu spoguļa. Atsperu spēku regulē Huksa likums, kas norādīts šādi:

F = -kx

Lai gan es nezināju k vērtību, es vismaz zināju, ka spēkam, ko es ieguvu no 17. vienādojuma no Šimfa dokumenta, ir jābūt vienādam ar Huka likuma spēku.

Alfa (α) vērtība bija sarežģīta. Lai gan 13. un 14. vienādojums parādīja, kā šīs vērtības aprēķināt no solenoīda laukuma (A), pagriezienu skaita (N) un magnētiskās caurlaidības vērtībām (μ), es negribēju, lai man būtu jāizjauc solenoids, lai saskaitītu pagriezienu skaits, kā arī es nezināju materiālu, no kura tika izgatavots mans solenoīda kodols.

10. solis: lēts komponentu testeris ietaupa dienu

Lēts komponentu testeris ietaupa dienu!
Lēts komponentu testeris ietaupa dienu!
Lēts komponentu testeris ietaupa dienu!
Lēts komponentu testeris ietaupa dienu!
Lēts komponentu testeris ietaupa dienu!
Lēts komponentu testeris ietaupa dienu!

Tomēr izrādījās, ka 15. un 16. vienādojums man deva vajadzīgo. Man bija lēts M328 komponentu testeris, kuru biju iegādājies no eBay par 10 USD. Tas varēja to izmantot, lai izmērītu mana solenoīda induktivitāti, un es atklāju, ka, stumjot armatūru dažādos dziļumos, man bija dažādas indukcijas vērtības.

Izmērot to ar pilnībā ievietotu armatūru, es saņēmu vērtību L (0).

Mana solenoīda garums bija 14 mm, tāpēc es izmērīju induktivitāti ar armatūru piecās pozīcijās, un tas man deva dažādas L (x) vērtības:

  • 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

Pēc tam es izmantoju izklājlapu, lai uzzīmētu savas vērtības pret 15. un 16. vienādojuma vērtību konkrētai μr izvēlei, un pēc tam mainīju savu izvēli, līdz atradu labu atbilstību. Tas notika, kad μr bija 2,9, kā parādīts grafikā.

11. solis: atrodiet atsperes konstanti K, atrisiniet problēmu

Image
Image
Pašreizējo problēmu analīze un iespējamie risinājumi
Pašreizējo problēmu analīze un iespējamie risinājumi

Vienīgais nezināmais bija K, atsperes konstante. Es to izmērīju, pielietojot 9V vienam no solenoīdiem manā divu asu komplektā un izmērot attālumu, kurā spogulis tika izvilkts. Ar šīm vērtībām es varēju atrisināt K vienādojumus, kas, manuprāt, bija ap 10.41.

Tagad man bija vērtības, kas vajadzīgas, lai aprēķinātu solenoīda vilkmi dažādās pozīcijās gar gājienu. Nosakot F (x) vienādu ar atsperes spēku no Huka likuma, es varu atrisināt vajadzīgo spriegumu V.

Diagramma parāda spriegumu, kas nepieciešams solenoīda pārvietošanai jebkurā vēlamajā pozīcijā x.

Labajā pusē, kur spriegums ir nulle un stāvoklis ir 3 mm, tas atbilst solenoīda neitrālajam atpūtas punktam, kad 3D drukātās eņģes ir pilnībā atslābinātas. Pārvietošanās pa kreisi diagrammā atbilst armatūras ievilkšanai solenoīdā pret 3D drukāto eņģu pievilkšanu-tas sākotnēji prasa lielāku spriegumu, bet, armatūrai padziļinoties solenoīdā, vilkme palielinās un nepieciešamais braukšanas spriegums samazinās.

Šīs attiecības noteikti ir nelineāras, taču, izmantojot vienādojumus no Šimpfa papīra, es varu uzrakstīt savu Arduino kodu, lai izvadītu pareizos spriegumus, lai staru novirze būtu lineāra:

float positionToVoltage (pludiņš x) {

// Eņģu (Huka likums) pieliktā spēka atjaunošana vēlamajā x. const pludiņš spring_F = -spring_K * (x - pavasaris_X0); Spriegums tāds, lai solenoīda vilkšanas spēks sakristu ar // eņģu atjaunojošo spēku))); }

Tas noved pie daudz apļveida spirāles nekā manā sākotnējā kustības testā. Misija pabeigta!

12. darbība. Jautājumi un atbildes par draivera ķēdi, izmantojot diskrētus komponentus

Kāpēc es nevaru pieslēgt solenoīdu tieši pie Arduino?

Tas ir jautājums par to, cik lielu strāvu Arduino var nodrošināt, neradot kaitējumu. Tas ir aptuveni 40 mA uz vienu tapu. Zinot, ka Arduino darbojas pie 5 V sprieguma, mēs varam izmantot Oma likumu, lai aprēķinātu nepieciešamo minimālo slodzes (šajā gadījumā solenoīda) pretestību. Sadalot 5 voltus ar 0,040 ampēriem, iegūstam 125 omus. Ja slodzei ir lielāka pretestība, mēs varam to savienot tieši ar Arduino, pretējā gadījumā mēs nevaram. Maza solenoīda pretestība parasti ir 50 omi, tāpēc mēs nevaram to vadīt tieši no Arduino. Ja mēs to darītu, tas vilktu 100 mA, kas ir acīmredzami par daudz.

Kāpēc elektromagnētam izmantojat 9V, bet Arduino - 5V?

Arduino darbojas ar 5 V spriegumu, taču solenoīdam tas ir mazliet par maz. Izmantojot tranzistoru, mēs varam izvēlēties solenoīda spriegumu, kas nav atkarīgs no 5 V, ko izmanto Arduino.

Kā es varu zināt, vai šim projektam ir piemērots tranzistors?

Tāpat kā Arduino, galvenā prasība ir tāda, ka strāva, kas plūst caur solenoīdu, nepārsniedz tranzistora maksimālos vērtējumus (jo īpaši kolektora strāvu). Mēs varam viegli aprēķināt sliktāko scenāriju, izmērot solenoīda pretestību un pēc tam dalot barošanas spriegumu ar to. Gadījumā, ja solenoīdiem tiek piegādāta 9 V barošanas strāva un solenoīda pretestība ir 50 omi, sliktākajā scenārijā mēs esam pie 180 mA. Piemēram, MPS3704 ir paredzēts maksimālajai kolektora strāvai 600 mA, kas dod mums rezervi aptuveni 3.

Kā noteikt minimālo pretestības vērtību starp Arduino izeju un tranzistora pamatni?

Arduino izeja savienos bipolāro tranzistoru pamatnes kāju caur strāvas ierobežošanas rezistoru. Tā kā Arduino darbojas pie 5 V sprieguma, mēs atkal varam izmantot Oma likumu, lai aprēķinātu pretestību, kas nepieciešama, lai ierobežotu strāvu zem 40 mA. Tas ir, sadaliet 5 voltus ar 0,04 ampēriem, lai iegūtu vismaz 125 omu vērtību. Augstākas rezistoru vērtības samazinās strāvu, tādējādi nodrošinot mums vēl lielāku drošības rezervi.

Vai šai pretestībai ir maksimālā vērtība, kuru man nevajadzētu pārsniegt?

Izrādās, jā. Tranzistoram ir tā sauktais strāvas pieaugums. Piemēram, ja pastiprinājums ir 100, tas nozīmē, ka, ja pamatnē ievietojam 1mA, tad līdz 100mA plūdīs caur slodzi, kuru kontrolē tranzistors. Ja mēs ieliekam pamatnē 1,8 mA, tad caur slodzi plūdīs līdz 180 mA. Tā kā mēs iepriekš aprēķinājām, ka pie 9 V pie solenoīda plūst 180 mA, tad bāzes strāva 1,8 mA ir "saldā vieta" un mazāka, un mūsu solenoīds pilnībā neieslēgsies.

Mēs zinām, ka Arduino nodrošina 5 V spriegumu, un mēs vēlamies, lai plūst 1,8 mA strāva, tāpēc mēs izmantojam Oma likumu (R = V/I), lai aprēķinātu pretestību (R = V/I). 5V dalīts ar 1,8 mA dod pretestību 2777 omi. Tātad, ņemot vērā mūsu pieņēmumus, mēs sagaidām, ka pretestībai ir jābūt no 125 līdz 2777 - izvēloties kaut ko līdzīgu 1000 omiem, mēs iegūstam diezgan labu drošības rezervi.

13. darbība. Pašreizējo problēmu un iespējamo risinājumu analīze

Pašreizējo problēmu analīze un iespējamie risinājumi
Pašreizējo problēmu analīze un iespējamie risinājumi

Pašreizējais prototips parāda potenciālu, taču joprojām pastāv vairākas problēmas:

  1. Kustība gar X un Y asi nešķiet perpendikulāra.
  2. Ja spogulis maina virzienu, notiek lēciens.
  3. Izšķirtspēja ir diezgan zema, un ir redzami kāpņu pakāpienu modeļi.
  4. Pie lielākiem kustības ātrumiem vibrācijas un zvana signāli izkropļo lāzera ceļu.

Jautājumu 1) var izraisīt 3D drukāto elastīgo eņģu konstrukcija, kas pārvieto kustību pa vienu asi uz perpendikulāro asi.

Jautājums 2) ir saistīts ar vaļīgu savienojuma sajūgu starp virzošajiem virzuļiem un spoguļa platformu, kas izraisa spoguļa raustīšanos un izlaišanu pārejās starp X un Y asi. Šī pēkšņā kustība noved pie aptumšotas X formas spraugas, kur lāzera punkts veic ātrāku nekontrolētu kustību.

3. problēma) rodas tāpēc, ka noklusējuma Arduino PWM ir tikai 255 līmeņi, un daži no tiem tiek izšķiesti sprieguma līknes formas dēļ. To varētu ievērojami uzlabot, izmantojot taimeri1, kas ir 16 bitu un spēj nodrošināt 65536 unikālas vērtības.

4. problēma) rodas tāpēc, ka spogulis un solenoīda bīdāmā armatūra (virzuļi) veido ievērojamu kustīgās masas daudzumu.

Tā kā 1. un 2. jautājums ir saistīts ar mehānisko konstrukciju, viena iespēja var būt metāla virzuļu noņemšana un aizstāšana ar maziem retzemju magnētiem, kas piestiprināti tieši pie slīpuma plāksnes. Solenoīdi būtu atvērta spole, kas piesaistītu vai atvairītu magnētus, neradot fizisku kontaktu. Tas radītu vienmērīgāku kustību un novērstu raustīšanās iespēju, vienlaikus samazinot kopējo masu.

Masas samazināšana ir primārais risinājums 4. jautājumam), bet visas atlikušās problēmas var tieši vērsties programmatūrā, programmatūrā ieviešot kustības vadības profilu, lai kontrolētā veidā paātrinātu un palēninātu spoguli. Tas jau tiek plaši izmantots 3D printera programmaparatūrā, un līdzīgas metodes var darboties arī šeit. Šeit ir daži ar kustību vadību saistīti resursi, kas attiecas uz 3D printeriem:

  • "Kustības vadības profilu matemātika", Čaks Levins (saite)
  • "Izskaidrota saraustīta kustība", (saite)

Man ir aizdomas, ka, pievienojot trapecveida kustības vadības profilu, spoguli varētu vadīt daudz lielākā ātrumā bez zvana vai vibrācijas artefaktiem.

14. darbība. Nākotnes darbs un iespējamie pielietojumi

Lai gan šo problēmu risinājumu izstrāde prasīs ievērojamu darbu, es ceru, ka šis atvērtā pirmkoda staru kūļa stūres modulis var kļūt par pieņemamu alternatīvu projektiem, kuru pamatā ir galvanometrs, piemēram:

  • Lēti lāzera šovi dīdžejiem un VJ.
  • Elektromehāniskais vektoru displejs vintage arkādes spēlei, piemēram, Vectrex.
  • DIY sveķu tipa SLA 3D printeris, kas RepRap kustības garā var izdrukāt savu lāzera stūres moduli.
  • Digitālā panoramēšana vai optiskā attēla stabilizācija kamerām.
Arduino konkurss 2017
Arduino konkurss 2017
Arduino konkurss 2017
Arduino konkurss 2017

Otrā balva Arduino konkursā 2017

Ieteicams: