Sadržaj:

DIY laserski upravljački modul za Arduino: 14 koraka (sa slikama)
DIY laserski upravljački modul za Arduino: 14 koraka (sa slikama)

Video: DIY laserski upravljački modul za Arduino: 14 koraka (sa slikama)

Video: DIY laserski upravljački modul za Arduino: 14 koraka (sa slikama)
Video: Введение в LCD2004 ЖК-дисплей с модулем I2C для Arduino 2024, Juli
Anonim
Image
Image

U ovom Instructable-u pokazat ću konstrukciju dvoosnog, jednozrcalnog upravljačkog modula laserskog snopa koristeći 3D tiskane dijelove i jeftine komponente s eBay-a.

Ovaj projekt ima sličnosti s Arduino laserskim showom s potpunom XY kontrolom i Arduino laserskim salonom sa stvarnim galvosima, ali vjerujem da je prvi koji koristi 3D štampani dizajn sa jeftinim magnetima. Sve datoteke dizajna stavljam pod GPLv3 kako bi se dizajn mogao poboljšati i poboljšati.

Iako sam trenutno samo sastavio modul i napisao vrlo osnovni testni kod, nadam se da ću ga jednog dana moći podići na sljedeći nivo uključivanjem koda vektorske grafike iz mojih ranijih instruktivnih, super brzih analognih napona iz Arduina.

Korak 1: Prikupite dijelove koji nisu 3D štampani

Laserski sklop sastoji se od sljedećih dijelova:

  • 4 mikro solenoida
  • Jedno ogledalo od 1/2 inča
  • Četiri vijka M3

Konkretni solenoidi koje sam koristio kupljeni su na eBayu za 1,45 USD svaki. Okruglo ogledalo pronađeno je u zanatskom prolazu u HobbyLobbyju - pakovanje od 25 koštalo me manje od 3 dolara. Ogledala možete pronaći i na eBayu.

Takođe će vam trebati jeftin laserski pokazivač, opet, sa eBay -a. Ljubičasti laser zajedno sa sjajnom tamom od vinila izvrsna je kombinacija za ovaj projekt!

Skup ruku za pomoć nije neophodan, ali će biti vrlo koristan za držanje i pozicioniranje laserskog pokazivača. Velika kopča za vezivo može se koristiti za držanje tipke za uključivanje.

Trebat će vam Arduino (koristio sam Arduino Nano) i način za upravljanje solenoidima. Kao što je VajkF naveo u komentarima, mogli biste koristiti već izrađene H-mostove poput onih zasnovanih na L298 ili L9110. Oni su lako dostupni na eBayu za nekoliko dolara, a mogu se koristiti i za pogon motora i projekte robotike.

Budući da nisam imao H-most, izgradio sam vlastiti upravljački program od diskretnih komponenti:

  • Četiri NPN bipolarna tranzistora (koristio sam MPS3704)
  • Četiri otpornika (koristio sam otpornik od 1,2 k ohma)
  • Četiri diode (koristio sam 1N4004)
  • 9V baterija i konektor za bateriju

Elektroničke komponente bile su iz mog laboratorija, pa nemam tačnu cijenu za njih, ali osim ako već nemate dijelove ili ih možete očistiti, vjerovatno je isplativije koristiti već izgrađeni H-most. Bez obzira na to, ja ću dati sheme za vašu vlastitu izgradnju.

Korak 2: 3D štampanje upravljačkog modula ogledala

3D ispis modula upravljanja ogledalom
3D ispis modula upravljanja ogledalom
3D ispis modula upravljanja ogledalom
3D ispis modula upravljanja ogledalom

Laserski upravljački modul sastoji se od dva 3D štampana dijela: postolja za postavljanje četiri solenoida i zglobne platforme za ogledalo.

Priložio sam vam dvije STL datoteke za 3D ispis, kao i FreeCAD datoteke u slučaju da trebate promijeniti dizajn. Sav sadržaj je pod GPLv3, pa ste slobodni unositi i dijeliti svoja poboljšanja!

Korak 3: Sastavite laserski modul

Sastavite laserski modul
Sastavite laserski modul
Sastavite laserski modul
Sastavite laserski modul
Sastavite laserski modul
Sastavite laserski modul
  • Vrućim ljepilom pričvrstite četiri solenoida na donji dio.
  • Vrelim ljepilom pričvrstite ogledalo na sredinu gornjeg dijela.
  • Umetnite metalne klipove u solenoide, a zatim postavite gornji dio na stupove (ali nemojte ga zavrtati). Lagano okrenite gornji dio i malim odvijačem podignite svaki klip na mjesto. Rubovi diska trebaju kliziti u utor na klipu. Budite oprezni jer su 3D štampane šarke vrlo krhke. Uz strpljenje i možda nekoliko neuspjelih pokušaja, trebali biste moći postaviti sva četiri klipa bez uvrtanja ili pritiska na šarke.
  • Nakon što su svi klipovi postavljeni, djelomično umetnite vijke M3, ali prije nego što ih zategnete, lagano pritisnite svaki klip prema dolje i pazite da se ogledalo slobodno nagne. Ako se ne kreće slobodno ili hvata, možda će biti potrebno ukloniti gornju ploču, odvojiti jedan ili više solenoida i ponovno ih pričvrstiti pod blagim kutom prema van (postavljanje razmaka između njega i središnjeg stupa može pomoći u tome).

Korak 4: Odštampajte ogrlicu laserskog pokazivača

Odštampajte ogrlicu laserskog pokazivača
Odštampajte ogrlicu laserskog pokazivača
Odštampajte ogrlicu laserskog pokazivača
Odštampajte ogrlicu laserskog pokazivača

Ogrlica laserskog pokazivača pristaje na glavu laserskog pokazivača. Zatim možete upotrijebiti set ruku za pomoć da uhvatite ovratnik i omogućiti vam da postavite laser precizno na svoju klupu.

Korak 5: Sastavite upravljački krug

Sastavite upravljački krug
Sastavite upravljački krug

Pogonski krug prikazan je na shemi. Kao što je ranije rečeno, moja verzija je izgrađena od diskretnih komponenti, ali možete koristiti i lako dostupan H-most. Ako odlučite sami izgraditi, morat ćete izgraditi četiri kopije ovog kola, po jednu za svaki od četiri solenoida.

Svaki krug će se spojiti na Arduino pin, dva za kontrolu lijevog i desnog solenoida i dva za gore i dolje solenoide. Oni će morati biti povezani na pinove koji podržavaju PWM, na sljedeći način:

  • Pin 9: Gore solenoid
  • Pin 3: Donji solenoid
  • Pin 11: Levi solenoid
  • Pin 10: Desni solenoid

Jedna 9V baterija može se koristiti za pogon sva četiri upravljačka kruga solenoida ili možete koristiti stolno napajanje. Arduino će se napajati USB napajanjem i ne bi se trebao priključivati na pozitivnu stranu 9V baterije. Međutim, negativna strana baterije koristi se kao referentna za uzemljenje i trebala bi biti spojena na GND pin na Arduinu, kao i na igle emitera na tranzistorima.

Korak 6: Otpremite uzorak koda

Otpremite uzorak koda
Otpremite uzorak koda

Uzorak koda je ažuriran sa sljedećim značajkama:

  • Podešava frekvenciju PWM -a tako da je mehanizam gotovo nečujan pri malim brzinama. Zujanje u Motion Testu 1 potpuno je nestalo!
  • Dodaje kao jednadžbe napona zasnovane na Schimpfovom papiru kako bi se "linearizirao" nelinearni odziv solenoida.

Uključio sam i implementaciju Lorenz Attractora zasnovanu na kodu sa ovog bloga.

Vjernost rezultata ostavlja popriličnu želju, ali još uvijek radim na tome!:)

Naredni koraci ilustriraju neke od tehnika korištenih u kodu.

Korak 7: Smanjivanje jačine zvuka

U mom Motion Testu 1 možete čuti glasno zujanje, posebno tokom kretanja gore -dolje. Ispostavilo se da je to uzrokovano zadanom frekvencijom rezanja PWM -a Arduina unutar zvučnog raspona. Brzo uključivanje i isključivanje napona zavojnice uzrokovalo bi njihovo vibriranje na toj frekvenciji, pretvarajući ih u male zvučnike.

Da bih riješio ovaj problem, povećao sam frekvenciju PWM -a u kodu:

#define PWM_FREQ_31372Hz 0x01 // Postavlja frekvenciju PWM -a na 31372,55 Hz #definira PWM_FREQ_3921Hz 0x02 // Postavlja frekvenciju PWM -a na 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Podešava frekvenciju PWM -a na URT TCR1 & 0b11111000) | frekvencija; // Postavi tajmer1 (pinovi 9 i 10) frekvenciju TCCR2B = (TCCR2B & 0b11111000) | frekvencija; // Postavi frekvenciju tajmera 2 (pinovi 3 i 11)}

Postavljanje Arduino PWM frekvencije koristan je trik za utišavanje solenoida ili motora. Eksperimentirajte s različitim izborima frekvencija kako biste vidjeli koja vam daje najbolje rezultate. Iako uključuje naprednije programiranje, ovdje je dobar izvor o tome kako tajmeri rade.

Korak 8: Podešavanje napona za smanjenje izobličenja

Podešavanje napona za smanjenje izobličenja
Podešavanje napona za smanjenje izobličenja

Moji početni testovi kretanja pokazali su da je došlo do značajnih izobličenja u odzivu solenoida. U Motion Motion 3 (lijeva slika), ono što je trebala biti kružna spirala umjesto toga postala je pravokutna mreža s nazubljenim rubovima.

Rješavanje ovog problema zahtijevalo je malo matematike, ali uspio sam pronaći nevjerojatan rad na webu koji mi je pomogao da razumijem problem dovoljno dobro da ga riješim u softveru.

Ono što slijedi vodi vas kroz proces kroz koji sam prošao kako bih prilagodio sistem i poboljšao izgled rezultirajućih tragova!

Korak 9: Savršenstvo softvera, s matematikom

Savršenstvo softvera, sa matematikom
Savršenstvo softvera, sa matematikom
Savršenstvo softvera, sa matematikom
Savršenstvo softvera, sa matematikom

Tajna za podešavanje sistema pokazala se u odličnom radu pod nazivom "Detaljno objašnjenje elektromagnetske sile" Paula H. Schimpfa sa Univerziteta Istočni Washington (veza). Konkretno, jednadžba 17 mi je dala magnetnu silu u smislu različitih pojmova.

Sljedeće pojmove je bilo lako izmjeriti:

  • R - Otpor mog solenoida
  • l - Dužina solenoida
  • x - Pomicanje klipa u solenoidu
  • V - Napon na solenoidu

Takođe sam znao da sila koju daje elektromagnet mora uravnotežiti silu 3D štampanih opruga na dvoosnom ogledalu. Sila opruge regulirana je Hookovim zakonom, koji se kaže na sljedeći način:

F = -kx

Iako nisam znao vrijednost k, barem sam znao da sila koju sam izvukao iz jednadžbe 17 iz Schimpfovog papira mora biti jednaka sili iz Hookeova zakona.

Vrijednost alfa (α) bila je lukava. Iako su jednadžbe 13 i 14 pokazale kako se izračunavaju ove vrijednosti iz područja solenoida (A), broja zavoja (N) i vrijednosti magnetske propusnosti (μ), nisam želio morati razdvajati solenoid da bih brojao broj okretaja, niti sam znao materijal od kojeg je sazdana jezgra mog solenoida.

Korak 10: Jeftin tester komponenti spašava dan

Jeftin tester komponenti spašava dan!
Jeftin tester komponenti spašava dan!
Jeftin tester komponenti spašava dan!
Jeftin tester komponenti spašava dan!
Jeftin tester komponenti spašava dan!
Jeftin tester komponenti spašava dan!

Ispostavilo se, međutim, da su mi jednadžbe 15 i 16 dale ono što mi je trebalo. Imao sam jeftin tester komponenti M328 koji sam kupio na eBayu za 10 USD. Uspio ga je upotrijebiti za mjerenje induktiviteta mog solenoida i otkrio sam da sam guranjem armature na različite dubine dobio različite vrijednosti indukcije.

Mjerenje s potpuno umetnutom armaturom dalo mi je vrijednost L (0).

Dužina mog solenoida bila je 14 mm, pa sam izmjerio induktivnost s armaturom u pet položaja i to mi je dalo različite vrijednosti za 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

Zatim sam koristio proračunsku tablicu za iscrtavanje svojih vrijednosti u odnosu na vrijednost jednadžbi 15 i 16, za određeni izbor μr, a zatim sam mijenjao svoj izbor dok nisam našao dobro podudaranje. To se dogodilo kada je μr iznosio 2,9, kao što je prikazano na grafikonu.

Korak 11: Pronađite opružnu konstantu K, riješite problem

Image
Image
Analiza trenutnih problema i mogućih rješenja
Analiza trenutnih problema i mogućih rješenja

Jedina preostala nepoznanica bila je K, konstanta opruge. To sam izmjerio primjenom 9V na jedan od solenoida u svom dvoosnom sklopu i mjerenjem udaljenosti na kojoj je ogledalo povučeno prema dolje. S ovim vrijednostima uspio sam riješiti jednadžbe za K za koje sam otkrio da su bile oko 10,41.

Sada sam imao vrijednosti koje su mi bile potrebne za izračunavanje povlačenja solenoida na različitim položajima duž hoda. Postavljanjem F (x) jednakim sili opruge iz Hookeova zakona, mogu riješiti traženi napon V.

Grafikon prikazuje napon potreban za pomicanje solenoida u bilo koji željeni položaj x.

S desne strane, gdje je napon nula, a položaj 3 mm, to odgovara neutralnoj točki mirovanja solenoida kada su 3D otisnute šarke potpuno opuštene. Pomicanje lijevo na grafikonu odgovara povlačenju armature u solenoid uz povlačenje 3D štampanih šarki-za to je u početku potreban veći napon, ali kako armatura prodire dublje u solenoid, povlačenje se povećava i potreban napon pogona se smanjuje.

Ovaj odnos je definitivno nelinearan, ali s jednadžbama iz Schimpfovog rada mogu napisati svoj Arduino kôd za ispis ispravnih napona tako da je otklon snopa linearni:

float positionToVoltage (float x) {

// Obnavljanje sile koju djeluju šarke (Hookeov zakon) pri željenom x. const float spring_F = -spring_K * (x - spring_X0); // Napon takav da vučna sila solenoida odgovara // obnavljajućoj sili šarki return sqrt (-2*R*R*(-opruga_F)*solenoid_len/(a*L_0*exp (-a*x/solenoid_len))); }

To dovodi do mnogo kružnije spirale nego u mom originalnom testu kretanja. Zadatak izvršen!

Korak 12: Pitanja i odgovori o upravljačkom krugu pomoću diskretnih komponenti

Zašto ne mogu spojiti solenoid direktno na Arduino?

Pitanje je koliko struje Arduino može pružiti bez pretrpljenih oštećenja. To je oko 40mA po pinu. Znajući da Arduino radi na 5V, možemo upotrijebiti Ohmov zakon za izračunavanje potrebnog minimalnog otpora opterećenja (u ovom slučaju solenoida). Dijeljenjem 5 volti na 0,040 ampera dobivamo 125 ohma. Ako teret ima veći otpor, možemo ga priključiti izravno na Arduino, inače ne možemo. Mali solenoid obično ima otpor od 50 ohma, pa ga ne možemo pogoniti izravno s Arduina. Da jesmo, potegnuo bi 100mA, što je očito previše.

Zašto koristite 9V za solenoid, ali 5V za Arduino?

Arduino radi na 5V, ali to je malo premalo za solenoid. Korištenje tranzistora omogućuje nam odabir napona za solenoid koji je neovisan o 5V koji se koristi za Arduino.

Kako mogu znati je li tranzistor prikladan za ovaj projekt?

Baš kao i Arduino, glavni zahtjev je da struja koja protiče kroz solenoid ne prelazi maksimalne nazive za tranzistor (posebno struju kolektora). Lako možemo izračunati najgori mogući scenarij mjerenjem otpora solenoida, a zatim time podijeliti napon napajanja. U slučaju 9V napajanja solenoida, i solenoidnog otpora od 50 ohma, u najgorem slučaju nalazimo se na 180mA. Na primjer, MPS3704 je ocijenjen za maksimalnu struju kolektora od 600 mA, što nam daje marginu od oko 3.

Kako mogu odrediti minimalnu vrijednost otpora koji treba staviti između Arduinovog izlaza i osnove tranzistora?

Izlaz Arduina će spojiti bazni krak bipolarnih tranzistora kroz otpornik za ograničavanje struje. Budući da Arduino radi na 5V, opet možemo upotrijebiti Ohmov zakon za izračunavanje otpora potrebnog za ograničavanje struje ispod 40 mA. Odnosno, podijelite 5 volti na 0,04 ampera da biste dobili vrijednost od najmanje 125 ohma. Veće vrijednosti otpornika smanjit će struju, što nam daje još veću sigurnosnu granicu.

Postoji li maksimalna vrijednost tog otpora koju ne smijem premašiti?

Ispostavilo se, da. Tranzistor ima takozvano pojačanje struje. Na primjer, ako je pojačanje 100, to znači da ako stavimo 1mA u bazu, tada će do 100mA teći kroz opterećenje koje tranzistor kontrolira. Ako u bazu stavimo 1,8 mA, tada će do opterećenja teći do 180 mA. Budući da smo ranije izračunali da na 9V kroz magnet prolazi 180mA, tada je osnovna struja od 1.8mA "slatka točka", a manje i naš se solenoid neće potpuno uključiti.

Znamo da Arduino gasi 5V i želimo da teče 1,8 mA struje, pa koristimo Ohmov zakon (R = V/I) za izračunavanje otpora (R = V/I). 5V podijeljeno s 1,8 mA daje otpor od 2777 ohma. Dakle, s obzirom na naše pretpostavke, očekujemo da otpor mora biti između 125 i 2777 - odabir nečega poput 1000 ohma daje nam prilično dobru sigurnosnu granicu u svakom slučaju.

Korak 13: Analiza trenutnih problema i mogućih rješenja

Analiza trenutnih problema i mogućih rješenja
Analiza trenutnih problema i mogućih rješenja

Trenutni prototip pokazuje potencijal, ali ostaje nekoliko problema:

  1. Čini se da kretanje duž osi X i Y nije okomito.
  2. Postoji skok kada ogledalo promijeni smjer.
  3. Rezolucija je prilično niska i postoje vidljivi uzorci stepenica.
  4. Pri većim brzinama kretanja, putanja lasera je izobličena vibracijama i zvonjenjem.

Problem 1) može biti uzrokovan dizajnom 3D štampanih fleksibilnih šarki koje prenose kretanje duž jedne osi do okomite osi.

Problem 2) nastaje zbog popuštanja spojnice između pogonskih klipova i platforme ogledala, što uzrokuje trzanje i preskakanje ogledala na prijelazima između osi X i Y. Ovaj nagli pokret dovodi do zamračenog zazora u obliku slova X gdje laserska točka radi brže nekontrolirano kretanje.

Problem 3) javlja se jer zadani Arduino PWM ima samo 255 nivoa, a dosta njih je izgubljeno zbog oblika krive napona. To bi se moglo značajno poboljšati korištenjem timera1, koji je 16-bitni i koji bi mogao imati 65536 jedinstvenih vrijednosti.

Do problema 4) dolazi jer ogledalo i klizna armatura solenoida (klipovi) čine značajnu količinu pokretne mase.

Budući da se pitanja 1) i 2) odnose na mehanički dizajn, jedna mogućnost može biti uklanjanje metalnih klipova i njihova zamjena malim magnetima od rijetkih zemalja koji su pričvršćeni izravno na nagibnu ploču. Solenoidi bi bili otvorena zavojnica koja bi privlačila ili odbijala magnete bez fizičkog kontakta. To bi dovelo do glatkog kretanja i eliminiralo mogućnost trzanja, uz smanjenje ukupne mase.

Smanjenje mase primarno je rješenje za pitanje 4), ali svi preostali problemi mogli bi se direktno ciljati u softveru implementacijom profila kontrole kretanja u softveru za ubrzavanje i usporavanje zrcala na kontroliran način. To se već uveliko radi u firmveru 3D pisača, a slične metode bi mogle funkcionirati i ovdje. Evo nekih resursa koji se odnose na kontrolu kretanja u odnosu na 3D štampače:

  • "Matematika profila upravljanja kretanjem", Chuck Lewin (veza)
  • "Objašnjenje kretnji kontroliranih trzanjem", (veza)

Pretpostavljam da bi dodavanje trapezoidnog profila za upravljanje pokretom omogućilo da se ogledalo vozi mnogo većim brzinama bez zvonjenja ili artefakata vibracija.

Korak 14: Budući rad i moguće aplikacije

Iako će razvijanje rješenja za ove probleme zahtijevati znatnu količinu rada, nadam se da će ovaj upravljački modul s otvorenim kodom snopa moći postati pristupačna alternativa projektima baziranim na galvanometru u takvim aplikacijama kao što su:

  • Jeftine laserske emisije za DJ -eve i VJ -e.
  • Elektromehanički vektorski prikaz za vintage arkadne igre poput Vectrexa.
  • SLA 3D štampač od smole tipa DIY koji u duhu pokreta RepRap može ispisati vlastiti laserski upravljački modul.
  • Digitalno pomicanje ili optička stabilizacija slike za fotoaparate.
Arduino takmičenje 2017
Arduino takmičenje 2017
Arduino takmičenje 2017
Arduino takmičenje 2017

Druga nagrada na Arduino takmičenju 2017

Preporučuje se: