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, Srpanj
Anonim
Image
Image

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

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 tiskani dizajn s jeftinim solenoidima. 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 kôd, nadam se da ću ga jednog dana moći podići na sljedeću razinu uključivanjem koda vektorske grafike iz mojih ranijih Instructable, Super Fast Analog Voltages iz Arduina.

Korak 1: Skupite dijelove koji nisu 3D ispisani

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 hodniku obrta u HobbyLobbyju - pakiranje od 25 koštalo me manje od 3 dolara. Ogledala možete pronaći i na eBayu.

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

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

Trebat će vam Arduino (koristio sam Arduino Nano) i način za pogon solenoida. Kao što je VajkF naveo u komentarima, mogli biste koristiti već izrađene H-mostove poput onih temeljenih 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 točnu cijenu za njih, ali osim ako dijelove već nemate ili ih možete očistiti, vjerojatno je isplativije koristiti već izgrađeni H-most. Bez obzira na to, donijet ću sheme za vašu vlastitu izgradnju.

Korak 2: 3D ispis upravljačkog modula zrcala

3D ispis Modula upravljanja zrcalom
3D ispis Modula upravljanja zrcalom
3D ispis Modula upravljanja zrcalom
3D ispis Modula upravljanja zrcalom

Laserski upravljački modul sastoji se od dva 3D ispisana 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 središte gornjeg dijela.
  • Umetnite metalne klipove u solenoide, a zatim postavite gornji dio na stupove (ali nemojte ga zavrtati). Lagano zakrenite gornji dio i malim odvijačem podignite svaki klip na mjesto. Rubovi diska trebaju kliziti u utor na klipu. Budite oprezni jer su 3D tiskane šarke vrlo krhke. Uz strpljenje i možda nekoliko neuspjelih pokušaja, trebali biste moći postaviti sva četiri klipa bez uvijanja 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 se uhvati, 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 moglo bi pomoći u tome).

Korak 4: Ispišite ogrlicu laserskog pokazivača

Ispišite ogrlicu laserskog pokazivača
Ispišite ogrlicu laserskog pokazivača
Ispišite ogrlicu laserskog pokazivača
Ispišite ogrlicu laserskog pokazivača

Ogrlica laserskog pokazivača pristaje na glavu laserskog pokazivača. Zatim možete upotrijebiti set ruku za pomoć kako biste uhvatili ovratnik i omogućili vam da postavite laser točno na svoju klupu.

Korak 5: Sastavite upravljački krug

Sastavite upravljački krug
Sastavite upravljački krug

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

Svaki će se krug spojiti na Arduino pin, dva za upravljanje lijevim i desnim solenoidom, a dva za gore i dolje solenoide. Oni će morati biti spojeni na pinove sposobne za PWM, na sljedeći način:

  • Pin 9: Gore solenoid
  • Pin 3: Dolje solenoid
  • Pin 11: Lijevi 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 -om 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: Prenesite uzorak koda

Prenesite uzorak koda
Prenesite uzorak koda

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

  • Podešava frekvenciju PWM -a tako da je mehanizam gotovo tih pri malim brzinama. Zujanje u Motion Motion 1 potpuno je nestalo!
  • Dodaje se kao jednadžbe napona na temelju Schimpfovog rada kako bi se "linearizirao" nelinearni odziv solenoida.

Uključio sam i implementaciju Lorenz Attractora na temelju koda s ovog bloga.

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

Sljedeći koraci ilustriraju neke od tehnika korištenih u kodu.

Korak 7: Smanjivanje glasnoće

U mom Motion Testu 1 možete čuti glasno zujanje, osobito tijekom kretanja gore -dolje. Ispostavilo se da je to uzrokovano zadanom frekvencijom sjeckanja 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 PWM frekvenciju 31372.55 Hz # odrediti PWM_FREQ_3921Hz 0x02 // Postavlja PWM frekvenciju 3921,16 Hz #define PWM_FREQ_980Hz 0x03 // Postavlja PWM frekvenciju 980,39 Hz pora setPWMTimerFrequencies (učestalost) uint8_t {TCCR1B = (TCCR1B & 0b11111000) | frekvencija; // Postavi timer1 (pinovi 9 i 10) frekvenciju TCCR2B = (TCCR2B & 0b11111000) | frekvencija; // Postavi frekvenciju timer2 (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 načinu rada mjerača vremena.

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

Ugađanje napona za smanjenje izobličenja
Ugađanje napona za smanjenje izobličenja

Moji početni testovi kretanja pokazali su da je došlo do značajnih izobličenja u odgovoru 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 sustav i poboljšao izgled nastalih tragova!

Korak 9: Savršenstvo softvera s matematikom

Savršenstvo softvera, s matematikom
Savršenstvo softvera, s matematikom
Savršenstvo softvera, s matematikom
Savršenstvo softvera, s matematikom

Tajna ugađanja sustava pokazala se u izvrsnom radu pod nazivom "Detaljno objašnjenje elektromagnetske sile" Paula H. Schimpfa sa Sveučilišta Istočni Washington (veza). Konkretno, jednadžba 17 mi je dala magnetsku silu u smislu različitih pojmova.

Sljedeće pojmove bilo je lako izmjeriti:

  • R - Otpor mog solenoida
  • l - Duljina solenoida
  • x - Pomicanje klipa u solenoidu
  • V - Napon na solenoidu

Također sam znao da sila koju daje elektromagnet mora uravnotežiti silu 3D ispisanih opruga na dvoosnom ogledalu. Sila opruge upravlja Hookeovim zakonom, koji je izražen na sljedeći način:

F = -kx

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

Vrijednost alfa (α) bila je zeznuta. Iako su jednadžbe 13 i 14 pokazale kako se te vrijednosti izračunavaju iz područja solenoida (A), broja zavoja (N) i vrijednosti magnetske propusnosti (μ), nisam želio morati razdvajati solenoid za brojanje broj zavoja, niti sam znao materijal od kojeg je izrađena jezgra moga 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 da su mi jednadžbe 15 i 16 dale ono što sam trebao. 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).

Duljina 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 upotrijebio proračunsku tablicu za iscrtavanje svojih vrijednosti u odnosu na vrijednost jednadžbi 15 i 16, za određeni odabir μ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 bio je K, konstanta opruge. To sam izmjerio primjenom 9V na jedan od solenoida u svom dvoosnom sklopu i mjerenjem udaljenosti u kojoj je ogledalo povučeno prema dolje. S tim 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 ispisane šarke potpuno opuštene. Pomicanje lijevo na grafikonu odgovara povlačenju armature u solenoid uz povlačenje 3D ispisanih šarki-za to je u početku potreban veći napon, ali kako armatura ulazi sve dublje u solenoid, povlačenje se povećava i potreban napon pogona se smanjuje.

Taj je odnos 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 izvornom testu kretanja. Misija izvršena!

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

Zašto ne mogu spojiti solenoid izravno na Arduino?

Pitanje je koliko struje Arduino može pružiti bez pretrpljene štete. 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 pokrenuti 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 teče kroz solenoid ne prelazi maksimalne vrijednosti za tranzistor (posebno struju kolektora). Lako možemo izračunati najgori mogući scenarij mjerenjem otpora solenoida, a zatim time podijelimo napon napajanja. U slučaju 9V opskrbne struje za solenoide i otpora solenoida od 50 ohma, najgori scenarij nas dovodi na 180mA. Na primjer, MPS3704 je ocijenjen za maksimalnu struju kolektora od 600 mA, što nam daje maržu od oko 3.

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

Izlaz Arduina spojit će 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čenje 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 najveća vrijednost tog otpora koju ne smijem prijeći?

Ispostavilo se, da. Tranzistor ima ono što je poznato kao pojačanje struje. Na primjer, ako je dobitak 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, kroz opterećenje će teći do 180 mA. Budući da smo ranije izračunali da na 9V kroz solenoid protiče 180 mA, tada je osnovna struja od 1,8 mA "slatko mjesto", 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čun 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 gibanje duž osi X i Y nije okomito.
  2. Dolazi do skoka kada zrcalo promijeni smjer.
  3. Rezolucija je prilično niska i postoje vidljivi uzorci stepenica.
  4. Pri većim brzinama kretanja, putanja lasera je iskrivljena vibracijama i zvonjenjem.

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

Problem 2) nastaje zbog popuštanja spojnice između pogonskih klipova i zrcalne platforme, š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 razina, a dosta ih je izgubljeno zbog oblika krivulje napona. To bi se moglo značajno poboljšati korištenjem timera1, koji je 16-bitni i koji bi bio sposoban za 65536 jedinstvenih vrijednosti.

Problem 4) javlja se 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, dok bi se smanjila ukupna masa.

Smanjenje mase primarno je rješenje za pitanje 4), no svi preostali problemi mogli bi se izravno usmjeriti u softveru implementacijom profila za kontrolu 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 djelovati i ovdje. Evo nekih resursa koji se odnose na kontrolu pokreta u odnosu na 3D pisače:

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

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

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

Iako će za razvoj rješenja ovih problema biti potreban značajan posao, nadam se da će ovaj upravljački modul otvorenog koda postati prihvatljiva alternativa projektima temeljenim na galvanometru u takvim aplikacijama kao što su:

  • Jeftine laserske emisije za DJ -e i VJ -e.
  • Elektromehanički vektorski prikaz za vintage arkadne igre poput Vectrexa.
  • SLA 3D pisač 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 natjecanje 2017
Arduino natjecanje 2017
Arduino natjecanje 2017
Arduino natjecanje 2017

Druga nagrada na Arduino natjecanju 2017

Preporučeni: