INHOUDSOPGAWE:

Raspberry Pi -laserskandeerder: 9 stappe (met foto's)
Raspberry Pi -laserskandeerder: 9 stappe (met foto's)

Video: Raspberry Pi -laserskandeerder: 9 stappe (met foto's)

Video: Raspberry Pi -laserskandeerder: 9 stappe (met foto's)
Video: Set Up a 7 Colour E-Ink Display For Raspberry Pi | Inky Impression 5.7" HAT 2024, Julie
Anonim
Image
Image
Framboos Pi laserskandeerder
Framboos Pi laserskandeerder

Die laserskandeerder is 'n ingeboude stelseltoestel van Raspberry Pi wat voorwerpe kan digitaliseer in.obj -maaslêers vir reproduksie met behulp van 3D -drukwerk. Die toestel doen dit deur 'n lynlaser en 'n geïntegreerde PiCam te gebruik om rekenaarvisie uit te voer. Die laser is 45 grade skuins van die laser geplaas en projekteer 'n helderrooi lyn op een vertikale sny van die voorwerp. Die kamera bespeur die afstand van die sny van die middel om 'n maas sny te gee. Die voorwerp word op die draaibak gespin en die proses word herhaal totdat die volledige voorwerp geskandeer is. Die gegenereerde.obj -lêer word uiteindelik per e -pos aan die gebruiker gestuur, wat die stelsel heeltemal selfstandig en ingebed maak.

Hierdie instruksies sal deurloop hoe die toestel gebou is, 'n paar resultate en toekomstige stappe.

Stap 1: Inspirasie

Inspirasie
Inspirasie
Inspirasie
Inspirasie

As 'n ywerige vervaardiger is ek al 'n paar jaar 3D -drukwerk en soliede modellering. Ek het gewerk met baie verskillende prototiperingshulpmiddels, van CNC -routers tot lasersnyers tot 3D -drukkers. Een toestel wat my plaaslike vervaardigerruimte nog nie gekoop het nie, was 'n 3D -skandeerder - en ek kan u vertel hoekom.

Die goedkoper ('n paar honderd dollar) was onbetroubaar, het perfekte toestande vereis en het steeds taamlik swak resultate gelewer. Die duurste was … wel, duur, tot 'n paar duisend dollar, wat sy funksie in baie gevalle nie die moeite werd gemaak het nie. Boonop kies ek meer as ooit om metings te neem en 'n model van nuuts af te ontwerp as om te gaan met die oppervlakmaas wat deur 'n skandering gegenereer word.

As gevolg hiervan wou ek 'n selfstandige skandeerder vir begrotings bou om te sien hoe goed ek 'n voorwerp met behulp van die rakkomponente kan skandeer.

Nadat ek 'n bietjie navorsing gedoen het, het ek gesien dat baie 3D -skandeerders 'n roterende platform gebruik en 'n verskeidenheid verskillende sensors om afstand van die sentrum te meet om 'n rotasiemodel te bou. Baie hiervan gebruik dubbele kameras soortgelyk aan dié van die Kinect. Uiteindelik het ek die Yscanner raakgeloop, 'n skandeerder met 'n lae resolusie wat gebruik maak van 'n laser. As ons na eenvoud en uitvoerbaarheid kyk, lyk hierdie lasertegniek, waarin 'n laser teen 'n kamera verreken word om afstand van die middel af te meet, soos 'n duidelike pad vorentoe.

Stap 2: Gereedskap en onderdele

Dele:

  • Framboos Pi $ 35,00
  • Framboos Pi -kamera V2 $ 30,00
  • LED's, weerstande en drade
  • 3D -druk filament
  • 12x12x0,125 houtblaaie
  • M3 hardeware
  • Stapmotor - $ 14
  • Line Laser - $ 8
  • Stuurmotorbestuurders vir LN298 - $ 2,65
  • Metaalknoppie - $ 5

Gereedskap:

  • Soldeerbout
  • Lasersnyer
  • 3D -drukker
  • Skroewedraaier
  • Tang

Stap 3: Ontwerp op hoë vlak

Hoë vlak ontwerp
Hoë vlak ontwerp
Hoë vlak ontwerp
Hoë vlak ontwerp

Die sentrale komponent in hierdie ontwerp is die lynlaser wat op 'n vertikale sny van die voorwerpe uitsteek. Hierdie projeksie kan op die picamera vasgelê word, sy perspektief laat regstel en dan gefiltreer word voor beeldverwerking. By beeldverwerking kan die afstand tussen elke segment van die lyn vanaf die middel van die voorwerp ingesamel word. In radiale koördinate sou hierdie prentjie beide die r- en z -komponente oplewer. Die derde dimensie, Θ, word dan bereik deur die voorwerp na 'n nuwe sny te draai. Hierdie konsep word in die eerste figuur getoon.

Om die bogenoemde aksies uit te voer, gebruik ek 'n Raspberry Pi as ons sentrale rekeneenheid. Ek het 'n stapmotor en 'n motorbestuurder aan die Pi geheg, aangedryf deur 'n eksterne 5V -toevoer en bestuur deur die GPIO -penne van die Pi. 'N Lynlaser is op die 3.3 V -lyn op die Pi geplaas en 'n PiCam is aan die kamera -ingang op die Pi geheg. Laastens is 'n eenvoudige knoppie geïnstalleer en 'n status -LED om aan die gebruiker aan te dui in watter toestand die stelsel is. Die volledige stelsel word saamgevat in 'n stelselblokdiagram.

Van die begin af was dit beplan om die elektronika te huisves in 'n lasersnitkas wat saam met T-gleuwe en M3-hardeware gehou word. Die elektronika sou in die onderste kompartement nie sigbaar wees nie, en 'n deksel bied maklike toegang tot voorwerpe op die draaibak. Hierdie deksel is nodig om die hoeveelheid lig wat in die stelsel lek, tot 'n minimum te beperk, aangesien hierdie eksterne lig geraas kan veroorsaak tydens die finale skandering.

Stap 4: Hardeware

Hardeware
Hardeware
Hardeware
Hardeware
Hardeware
Hardeware

Soos hierbo gesien, het ek Autodesk Fusion 360 gebruik om 'n gedetailleerde 3D -model van ons ontwerp te maak voordat ek met laser sny of 3D -drukwerk begin het. As 'n oorsig is die toestel 'n eenvoudige boks met 'n deksel met lasersnitte. Daar is twee hooflae van die toestel: die elektroniese bed en die hoofbed, met gate vir drade tussen die twee lae.

Die meerderheid van ons boks is vervaardig met 'n lasersnyer, met ontwerpe wat in Fusion 360 vervaardig is en op 'n Epilog Zing 40 W lasersnyer gesny is. Ons ontwerpe word in die bostaande figure getoon. Van links bo na regs beweeg die stukke die hoofbed, die elektroniese bed, twee stukke vir die deksel, die agterkant, die voorstuk en die twee systukke. In die hoofbed is daar drie hoofuitsparings: een vir die montering van die stapmotor, een om drade van die laser af te lei, en een om die breë kabel van die PiCam te lei. Die bedstuk het bevestigingsgate vir die beveiliging van die Pi, broodbord en motorbestuurder en 'n groter uitsny om toegang tot die stapmotor te kry. Die dekselstukke klap eenvoudig om die driehoekige stuk hierbo te vorm, en die skarnier is 'n eenvoudige extrusie wat die breedte van die deursnee van die gat van die syborde is. Die agterkant en een van die systukke het gleuwe aan die kant sodat die poorte van die Pi (HDMI, USB, Ethernet, Power) maklik verkry kan word. Die voorkant is 'n eenvoudige stuk wat ek uiteindelik met 'n handboor gate in gemaak het om die knoppie en LED te monteer. Dit is 'n metode om lasergesnyde stukke ortogonaal en veilig te hou. Die vinne stukke is in lyn met die ander gleuwe en die t-vormige snit aan die rande gee ruimte om 'n M3-moer daarin vas te druk sonder om te draai. Hiermee kan ons dan 'n M3 -skroef gebruik om die stukke saam met baie min wikkelruimte te sluit sonder dat die eenheid heeltemal permanent is.

Vanweë sy snelheid en gemak het ek gekies om die meerderheid van ons stukke met 'n lasersnyer te doen. Ek moes egter nog 'n paar stukke 3D -druk as gevolg van hul 3D -meetkunde wat moeiliker sou wees om op die snyer te maak. Die eerste stuk was die lynlaserhouer. Hierdie stuk moet op 45 grade van die kamera af op die hoofbed gemonteer word en 'n gat hê sodat die laser styf wrywing daarin kan pas. Ek moes ook 'n motorhouer maak omdat die motor se as so lank was. Die bergwrywing pas in die lasersnitstukke en laat die vliegtuig waarop die motor geheg is, laat sak sodat die roterende platform gelyk is aan die hoofbed.

Stap 5: Elektronika

Elektronika
Elektronika

Die bedrading hardeware van hierdie projek was baie eenvoudig, aangesien die 3D -skandeerder nie te veel randapparatuur benodig het nie. 'N Motor, knoppie, LED, laser en kamera moes aan die Pi gekoppel word. Soos getoon, het ek seker gemaak dat weerstande in serie met elke pen wat ons gebruik het, verbind om die penne te beskerm. Een GPIO -pen is toegewy aan die beheer van die status -LED, wat sal brand wanneer die toestel gereed is om te gebruik en met PWM pols wanneer die toestel werk. 'N Ander GPIO-pen is gekoppel aan 'n opgetrekte knoppie, wat HIGH geregistreer het as die knoppie nie ingedruk is nie en LOW as die knoppie ingedruk is. Laastens het ek vier GPIO -penne opgedra om die stappermotor te bestuur.

Aangesien ons motor slegs 'n sekere mate moes stap sonder om spoedbeheer te hoef te kies, het ons gekies vir 'n eenvoudiger stapmotorbestuurder (L298N) wat eenvoudig die bedieningslyne instap om in die motor se insette in te voer. Om te leer hoe om die stapmotors op 'n baie lae vlak te bestuur, het ons na die L298N -datablad en na die Arduino -biblioteek verwys. Stapmotors het 'n magnetiese kern met deurmekaar vingers van wisselende polariteit. Die vier drade is toegedraai om twee elektromagnete te beheer wat elke teenoorgestelde vinger in die motor dryf. Deur die polariteit van die vingers te verander, kan ons die trapper dus een tree druk. Met hierdie kennis van hoe steppers van hardeware af werk, kon ons die steppers baie makliker beheer. Ons het gekies om ons stappermotor van 'n 5V -kragtoevoer in die laboratorium af te skakel eerder as van die Pi vanweë die maksimum stroomverbruik van ongeveer 0,8 A, wat meer is as wat die Pi kan lewer.

Stap 6: sagteware

Sagteware
Sagteware
Sagteware
Sagteware
Sagteware
Sagteware
Sagteware
Sagteware

Die sagteware vir hierdie projek kan verdeel word in vier hoofkomponente wat met mekaar in wisselwerking is: Beeldverwerking, Motorbeheer, Mesh Creation en Embedded Functions.

As 'n opsomming van die sagteware, kan ons na die eerste figuur kyk. Terwyl die stelsel begin, meld die.bashrc outomaties aan by die Pi en begin ons ons python -kode gebruik. Die stelsel brand die statuslig om die gebruiker te laat weet dat dit korrek opgestart is en wag vir die druk op die knoppie. Die gebruiker kan dan die item wat geskandeer moet word, plaas en die deksel toemaak. Nadat u op die knoppie gedruk het, pols die LED om die gebruiker te laat weet dat die toestel werk. Die toestel loop tussen beeldverwerking en motorbeheer totdat die volle rotasie voltooi is en alle objekdata versamel word. Uiteindelik word die maas geskep en die lêer per e -pos na 'n vooraf geselekteerde e -pos gestuur. Dit herlaai die siklus en die masjien is gereed om met die druk van 'n knoppie nog 'n skandering uit te voer.

Beeldverwerking

Die eerste ding wat geïmplementeer is, was die verwerking van 'n vasgelegde beeld om die inligting wat in die prent gestoor is, te onttrek in 'n vorm wat gebruik kan word om 'n verskeidenheid punte in die ruimte te skep. Om dit te doen, het ek begin met 'n foto van die voorwerp op die platform saam met al die agtergrondgeraas wat die laser op die agterkant van die boks laat skyn en versprei. Hierdie prentjie het twee hoofprobleme in sy rou vorm. Eerstens is die voorwerp in 'n hoek met 'n verhoogde perspektief beskou, en tweedens was daar baie agtergrondgeraas. Die eerste ding wat ek moes doen, was om hierdie kykhoek in ag te neem, want as ons die foto gebruik, kan ons nie 'n konsekwente voorwerphoogte bepaal nie. Soos gesien in die tweede figuur, is die hoogte van die onderstebo "L" -vorm konsekwent; Omdat die een kant langer is as die ander, lyk dit asof hulle verskillende hoogtes het aan die rand wat die naaste aan die kyker is.

Om dit reg te stel, moes ek die werkruimte in die prent omskep in 'n reghoek uit die trapeziumvorm waarin dit voorheen was. Om dit te doen, gebruik ek die kode wat deur hierdie skakel verskaf word, wat, wanneer 'n beeld en vier punte gegee word, die beeld tussen die vier punte sny en die geknipte beeld transformeer om te vergoed vir die perspektief. Hierdie transformasie gebruik die vier punte om 'n reghoek in plaas van 'n trapeziumvorm te vorm, soos in die derde figuur gesien.

Die volgende probleem wat opgelos moes word, was die van agtergrondgeraas in die vorm van buite lig en lig wat deur die laser self gereflekteer word. Om dit te doen, het ek die lig gefiltreer met behulp van die inRange () -funksie van OpenCV. Ek stel die drumpel om slegs rooi lig op 'n sekere vlak op te tel. Om die korrekte waarde te kry, het ek begin met 'n ligte drumpel en die drempelvlak verhoog totdat die enigste lig wat opgetel is, die laserlig op die voorwerp was wat geskandeer is. kry 'n lyn van een pixel per ry wat aan die linkerkant van die laserlyn grens. Elke pixel is dan omgeskakel na 'n hoekpunt in 3D -ruimte en gestoor in 'n skikking, soos beskryf in die afdeling vir die skep van gaas. Die resultate van hierdie stappe kan in die vierde figuur gesien word.

Motorbeheer

Nadat ek 'n enkele prent suksesvol kon verwerk om die sny van die voorwerp te kry, moes ek die voorwerp kan draai om 'n nuwe prentjie met 'n ander hoek te neem. Om dit te doen, het ek die stapmotor onder die platform waarop die voorwerp geskandeer is, beheer. Ek het 'n grondslag vir ons stapfunksie gebou deur 'n veranderlike te skep om die toestand van die motor op te spoor en mikrostappe deur elk van die vier motorinsette te skakel.

Mesh Creation Om 'n gaas van al die verwerkte beelde te skep, moes ek eers elke wit pixel in die verwerkte beeld omskep in 'n hoekpunt in 3D -ruimte. Omdat ek individuele snye van die voorwerp met silindriese simmetrie versamel, was dit sinvol om silindriese koördinate te begin versamel. Dit was sinvol, aangesien die hoogte van die prent die z-as kan voorstel, die afstand van die middel van die roterende tafel die R-as kan verteenwoordig, en die rotasie van die stapmotor die theta-as kan verteenwoordig. Omdat ek ons data egter in silindriese koördinate gestoor het, moes ek elkeen van hierdie hoekpunte omskakel in kartesiese koördinate.

Sodra hierdie hoekpunte geskep is, is dit in 'n lys gestoor en die lys is in 'n ander lys gestoor wat die hoeklyste bevat wat vir elke prentjie gemaak is. Sodra al die beelde verwerk en in hoekpunte omgeskakel is, moes ek die hoekpunte kies wat ek eintlik in die finale maas wou voorstel. Ek wou hê dat die boonste hoekpunt en die onderste hoekpunt ingesluit moet word, en dan op grond van die resolusie, kies ek 'n ewe groot aantal hoekpunte om vir elke prent te gebruik. Omdat nie alle hoeklyste ewe lank was nie, moes ek dit gelykmaak deur die lys met die kleinste aantal hoekpunte te vind en hoekpunte van alle ander lyste te verwyder totdat hulle almal gelyk was. skep 'n gaas. Ek het gekies om ons maas te formateer volgens die.obj -lêerstandaard, aangesien dit eenvoudig en 3D -drukbaar is.

Ingebedde funksie

Nadat die toestel funksioneel was, het ek dit gepoleer deur die volledige ingeboude funksie by te voeg. Dit beteken dat die sleutelbord, muis en monitor verwyder moet word en dat ons die.obj -lêer draadloos na die verwerking moet stuur. Om te begin, het ek die.bashrc -kode verander om outomaties aan te meld en die hoof -luislangprogram by die aanvang van stapel te stuur. Dit is gedoen deur sudo raspi-config te gebruik en "Console Autologin" te kies en deur die reël "sudo python /home/pi/finalProject/FINAL.py" by /home/pi/.bashrc. te voeg. 'n knoppie en status -LED bygevoeg vir invoer en uitvoer van gebruikers. Met die knoppie kan die gebruiker die toestel vertel wanneer hy moet begin skandeer, en die LED sal die gebruiker van die toestand van die masjien vertel. As die LED aan is, is die toestel gereed om 'n nuwe skandering te begin. As die LED knipper, skandeer die toestel tans. As die LED in die kantoor is, is daar 'n sagtewarefout, wat vereis dat die stelsel herlaai moet word. Laastens het ek die toestel in staat gestel om die.obj -lêer per e -pos te stuur. Dit is gedoen deur die smtplib- en e -posbiblioteke te gebruik. Hierdie vermoë om e -posse te stuur, het ons 'n baie maklike en draadlose manier gegee om die vervaardigde lêer aan die gebruiker te stuur om op baie verskillende platforms toegang te verkry.

Stap 7: Integrasie

Integrasie
Integrasie

Nadat ek die verskillende stukke van die toestel vervaardig het, het ek dit bymekaargemaak. Die figuur hierbo wys in volgorde:

(a) gemonteerde boks buite

(b) gemonteerde boks binne met kamera en laser

(c) binnekant van elektroniese bed

(d) agterkant van die Pi met toegang tot Pi -poorte en die 5V -motorinvoer

(e) drukknop met LED -ring en statuslig aan die voorkant van die toestel

Stap 8: Resultate

Resultate
Resultate
Resultate
Resultate
Resultate
Resultate
Resultate
Resultate

Die laser 3D -skandeerder kon voorwerpe met behoorlike presisie skandeer. Die voorwerpe se kenmerke is duidelik en herkenbaar, en die dele was baie maklik om in 3D te druk met behulp van 'n snyprogrammatuur soos Repetier. Bogenoemde figure toon voorbeelde van skanderings van 'n stuk hout en 'n rubber eend.

Een van ons grootste bevindings en suksesse wat ek tydens die toets ontdek het, was die konsekwentheid van die toestel. Tydens verskeie proewe van dieselfde voorwerp kon die skandeerder elke keer 'n.obj -lêer produseer wat baie dieselfde was, selfs al het ons die plasing van die voorwerp effens verander. Soos in die drie afsonderlike skanderings gesien word, lyk hulle almal baie dieselfde, met dieselfde besonderhede en dieselfde hoeveelheid besonderhede. Ek was oor die algemeen baie beïndruk met die konsekwentheid en robuustheid van ons stelsel.

Een van die veranderlikes wat ek regtig kon afstel, is die resolusie van die skanderings. Omdat daar 400 trappe in die stepper is, kan ek kies hoe groot elke ΔΘ die hoekresolusie moet bepaal. Ek het standaard die hoekresolusie op 20 iterasies gestel, wat beteken dat elke raam, die motor met 20 stappe draai (400/20 = 20). Dit is hoofsaaklik in belang van tyd gekies - dit neem ongeveer 45 sekondes om 'n skandering op hierdie manier te voltooi. As ek egter 'n scan van baie hoër gehalte wil hê, kan ek die aantal herhalings tot 400 verhoog. Benewens die hoekresolusie, kan ek ook die vertikale resolusie, of die verskillende punte wat ek kies om langs die laserskyf te peil, aanpas. Vir 'n soortgelyke belangstelling in tyd, het ek hierdie standaard op 20, maar ek kan dit verhoog vir beter resultate. Deur te speel met hierdie parameters van hoekresolusie en ruimtelike resolusie, kon ek die resultate van verskillende skanderings hieronder in die laaste figuur saamstel. Elke etiket is so geformateer dat dit die hoekresolusie x ruimtelike resolusie is. Soos gesien in die standaard skandeerinstellings, is die eend se kenmerke herkenbaar, maar nie gedetailleerd nie. Terwyl ek die resolusie verhoog, begin individuele presiese kenmerke verskyn, insluitend die oë, bek, stert en vlerke op die eend. Die beeld met die hoogste resolusie het ongeveer 5 minute geneem om te skandeer. Dit was 'n baie groot sukses om hierdie hoogtepunt van 'n haalbare resolusie te sien.

Beperkings

Ondanks die suksesvolle resultate van die projek, is daar nog 'n paar beperkings op die ontwerp en implementering. Met die gebruik van die laser kom daar baie probleme met die verspreiding van die lig. Baie voorwerpe wat ek deurskynend, glansend of baie donker probeer skandeer het, was lastig om te sien hoe die lig van die oppervlak af weerkaats. As die voorwerp deurskynend was, sou die lig geabsorbeer en versprei word, wat 'n baie raserige lees van snye moontlik maak. In blink en donker voorwerpe word die lig gereflekteer of geabsorbeer tot die punt wat dit moeilik sou wees om op te neem. Omdat ek 'n kamera gebruik om die kenmerke van voorwerpe vas te lê, word die waarneming daarvan beperk deur sy siglyn, wat beteken dat konkawe voorwerpe en skerp hoeke dikwels deur ander dele van die voorwerp geblokkeer word. Dit word in ons rubber -eend -voorbeeld getoon, aangesien die stert soms sy kromming tydens die skandering sal verloor. Die kamera kan ook slegs oppervlakstrukture opspoor, wat beteken dat gate of interne meetkunde nie vasgevang kan word nie. Dit is egter ook 'n algemene probleem wat baie ander skanderingoplossings het.

Volgende stappe

Alhoewel ek tevrede was met die resultate van ons projek, was daar 'n paar dinge wat geïmplementeer kon word om dit beter te maak. Om mee te begin, in die huidige toestand, kan die skanderingsresolusie slegs verander word deur die veranderlike van die hardgekodeerde resolusie in ons kode te verander. Om die projek meer ingebed te maak, kan 'n resolusiepotentiometer ingesluit word, sodat die gebruiker die resolusie kan verander sonder om 'n monitor en sleutelbord by die skandeerder aan te sluit. Boonop skep die skandeerder beelde wat soms kronkelrig kan lyk. Om dit reg te stel, kan gaasverstrykingstegnieke geïmplementeer word om onreëlmatighede en harde hoeke uit te skakel. Laastens het ek gevind dat pixelkoördinate nie goed in die werklike wêreld pas nie. Die maas wat ek geskep het, was 6 tot 7 keer groter as die werklike voorwerp. In die toekoms sal dit voordelig wees om 'n manier om gaasvorming te vergroot, sodat dit meer akkuraat is met die werklike grootte van die voorwerp.

Stap 9: Hulpbronne

Ek het die kode, STL -lêers om te druk en DXF -lêers vir die hele projek ingesluit.

Framboos Pi -wedstryd 2020
Framboos Pi -wedstryd 2020
Framboos Pi -wedstryd 2020
Framboos Pi -wedstryd 2020

Eerste prys in die Raspberry Pi -wedstryd 2020

Aanbeveel: