Სარჩევი:

XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით: 5 ნაბიჯი
XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით: 5 ნაბიჯი

ვიდეო: XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით: 5 ნაბიჯი

ვიდეო: XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით: 5 ნაბიჯი
ვიდეო: კუთხეების გაზომვა გრადუსებში 2024, ნოემბერი
Anonim
XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით
XYZ წერტილოვანი სკანერი გადარჩენილი მბრუნავი კოდირების გამოყენებით

ჩემი სამუშაო ადგილიდან საკმაოდ დიდი რაოდენობის გადაგდებული მბრუნავი ოპტიკური კოდირების მოპოვების შემდეგ, საბოლოოდ გადავწყვიტე მათთან ერთად რაიმე სახალისო/სასარგებლო გამეკეთებინა.

მე ცოტა ხნის წინ შევიძინე ახალი 3D პრინტერი ჩემი სახლისთვის და რა შეიძლება შეავსოს მას უკეთესად ვიდრე 3D სკანერი! ამ პროექტმა ასევე მომცა სრულყოფილი შესაძლებლობა გამომეყენებინა ჩემი 3D პრინტერი საჭირო ნაწილების დასამზადებლად.

მარაგები

ოპტიკური კოდირება და შესაბამისი ოპტიკური სენსორები

Arduino UNO

არჩევითი პროტოტიპის ფარი

ფოლადის რელსები

3D პრინტერზე წვდომა

ნაბიჯი 1: ოპტიკური კოდირება

ოპტიკური კოდირებით
ოპტიკური კოდირებით
ოპტიკური კოდირებით
ოპტიკური კოდირებით
ოპტიკური კოდირებით
ოპტიკური კოდირებით

თითქმის ნებისმიერი მბრუნავი კოდირება შეიძლება გამოყენებულ იქნას ამ პროექტისათვის, იმ პირობით, რომ ის მოგაწვდით შედარებით მაღალი რაოდენობის "დაწკაპუნებებს" მმ -ზე. ცხადია, განსხვავებული კოდირებისთვის საჭიროა შესაბამისი სამონტაჟო გადაწყვეტა.

მე გამოვიყენე უწყვეტობის მრიცხველი ფოტო სენსორების გაყვანილობის დიაგრამის დასადგენად.

ნაბიჯი 2: 3D ნაბეჭდი ნაწილები

3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები
3D ნაბეჭდი ნაწილები

ეს ნაწილები შეიცავს მბრუნავ კოდირებას და უზრუნველყოფს სლაიდს რელსისთვის. ერთი კოდირების კორპუსს აქვს ორი ხვრელი უკანა ნაწილში, რათა ჯვრის რელსები დამონტაჟდეს. ორმაგი კოდირების კორპუსი უბრალოდ ორი ცალკეული კორპუსია, რომლებიც ერთმანეთთან შერწყმულია სწორი კუთხით.

მე დავამონტაჟე ეს საყრდენები fusion360- ზე, რათა მოერგოს კოდირებისა და რელსების არჩევანს, შიფრატორ შახტს აქვს მოკლე ნაჭერი რეზინის გარსი, რომელიც დაეხმარება მას უკეთ დაიჭიროს უჟანგავი ფოლადის ლილვი.

თქვენ გინდათ, რომ ლილვი თავისუფლად გადაადგილდეს და ვერტიკალურად დაიჭიროს კორპუსში, მაგრამ მან უნდა მოახდინოს საკმარისად ზეწოლა კოდზე, რომ არ გადაიჩეხო. რაც მე მუშაობდა იყო ის, რომ ლილვისთვის სლაიდს გადაეფარა კოდირების ლილვი 0.5 მმ -ით. Slingshot რეზინის არის რბილი საკმარისი დეფორმირება ამ ოდენობით და უზრუნველყოს კარგი წევის.

ნაბიჯი 3: გაყვანილობის დიაგრამა

გაყვანილობის დიაგრამა
გაყვანილობის დიაგრამა

წრე ძალიან მარტივია. ოპტო-სენსორები საჭიროებენ გარკვეულ დენს IR გამცემი დიოდებისთვის, მიწას და გამწევ რეზისტორებს ფოტოდიოდებისთვის.

მე გადავწყვიტე 5mA სერიის გამცემი დიოდებისთვის, ამ კონკრეტულ კოდირებაში დიოდებზე ძაბვის ვარდნა არის 3.65V. მე ვიყენებ Arduino– სგან 5 ვ მიწოდებას, რომელიც ტოვებს 1.35 ვ რეზისტორს, 5 mA– ზე ეს გამოდის 270 ოჰმ.

10k ohm შეირჩა გასაშლელებისთვის, რადგან ფოტოდიოდებს შეუძლიათ მხოლოდ მცირე დენის ჩაძირვა, 10k ohm ასევე გამოიყენებოდა ღილაკზე. არსებობს ღილაკი გამოსაყენებლად პროტოტიპის დაფაზე, რომელიც უკვე მიწასთან არის დაკავშირებული, უბრალოდ მიაწოდეთ მას გამწევი რეზისტორი და მიამაგრეთ იგი სასურველ შეყვანის პინზე.

ნაბიჯი 4: Arduino კოდი

არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი
არდუინოს კოდი

კოდს სჭირდება მცირე ახსნა, რადგან მისი მოქმედება შეიძლება დაუყოვნებლივ არ იყოს აშკარა, მაგრამ ის უნდა იყოს ოპტიმიზირებული ამ გზით, რომ შეძლოს 3 დამშიფვრის სწრაფად დამუშავება.

უპირველეს ყოვლისა, ჩვენ გვინდა მხოლოდ მიმართულების მონაცემების დამუშავება, თუ შეიცვლება კოდირების პოზიცია.

ცვლილებები = new_value ^ შენახული მნიშვნელობა;

იმისათვის, რომ მივიღო მეტი გარჩევადობა ჩემი კოდირებისგან, მე უნდა დამუშავდეს როგორც ამოსვლის, ასევე დაცემის კიდეები.

ჩემს კონფიგურაციაზე ჩემი გარჩევადობაა 24 დაწკაპუნება 1 სმ -ზე.

ეს გვაძლევს რამდენიმე სცენარს.

S1 არის მუდმივი 0 და S2 გადართულია 0 -დან 1 -მდე

S1 არის მუდმივი 0 და S2 გადართულია 1 -დან 0 -მდე

S1 არის მუდმივი 1 და S2 გადადის 0 -დან 1 -მდე

S1 არის მუდმივი 1 და S2 გადადის 1 -დან 0 -მდე

S2 არის მუდმივი 0 და S1 გადართულია 0 -დან 1 -მდე

S2 არის მუდმივი 0 და S1 გადართულია 1 -დან 0 -მდე

S2 არის მუდმივი 1 და S1 გადადის 0 -დან 1 -მდე

S2 არის მუდმივი 1 და S1 გადადის 1 -დან 0 -მდე

ეს პირობები უკეთესად არის გასაგები ზემოთ მოყვანილი სიმართლის ცხრილებში, ასევე თითოეული პირობა იძლევა "მიმართულებას", თვითნებურად დასახელებულ 0 ან 1.

დიაგრამები გვაძლევს ორ სასიცოცხლო მნიშვნელობას:

1) ერთი დიაგრამა არის მეორის სრული ინვერსიული, ასე რომ, თუ ჩვენ გვაქვს ერთი, ჩვენ შეგვიძლია მარტივად გამოვთვალოთ მეორე გამომავალი უბრალოდ ინვერსიით. ჩვენ გამოვაბრუნებთ გამომავალს მხოლოდ იმ შემთხვევაში, თუ ერთი pin იცვლება და არა მეორე, ჩვენ შეგვიძლია ავირჩიოთ ერთი თვითნებურად.

2) დიაგრამა უბრალოდ არის S1 და S2 სიგნალების XOR. (სხვა დიაგრამა არ არის ეს).

ახლა კოდის გაგება მარტივია.

// პარალელურად წაიკითხეთ PORT– ში // დაიმახსოვრეთ მიმდებარე წყვილები მიეკუთვნებიან ერთნაირად კოდირების მდგომარეობას = PINB & 0x3f; // რა ქინძისთავები შეიცვალა თუ რაიმე diff = hold ^ მდგომარეობა; // XOR მიმდებარე S1 და S2 სიგნალები სიმართლის ცხრილის მისაღებად // ყველაზე მარტივი გზა არის არსებული მდგომარეობის ასლის გაკეთება // და მისი გადატანა მარჯვნივ ერთი ბიტიანი საძიებელი = მდგომარეობა >> 1; // ახლა ბიტები გასწორებულია XOR dir = საძიებელი ^ მდგომარეობისთვის; // დაიმახსოვრე, ცხრილი უნდა იყოს შემობრუნებული, თუ ერთი // შენატანი დარჩა მუდმივი, ჩვენ არ გვჭირდება IF // განცხადება ამისათვის. ამჟამად სასურველი მიმართულების ბიტი // არის "dir" ცვლადის თითოეული წყვილის მარჯვენა ბიტი '01' ან '10' // XOR ეს 'dir' ბაიტით ან // გადაატრიალებს ან არა მნიშვნელობას. dir ^= განსხვავ; // ახლა განახლება hold ცვლადი hold = მდგომარეობა; // თუ რომელიმე ბიტი შეიცვალა ამ კოდირებისთვის, თუ (diff & 0x03) {// განსაზღვრეთ მიმართულება, თუ (dir & 0x01) {// თქვენი ჰარვერი და გაყვანილობა ++ ან ---z; } სხვა {++ z; }} // ditto დანარჩენებისთვის if (diff & 0x0c) {if (dir & 0x04) {++ y; } else {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } სხვა {++ x; }}

ღილაკზე დაჭერისას ჩვენ ვაგზავნით მიმდინარე XYZ მნიშვნელობას ტერმინალურ პროგრამაში.

სერიული მონაცემები ნელია, მაგრამ ნორმალური მუშაობის დროს კოდირების პოზიციები ამ დროის განმავლობაში მაინც არ შეიცვლება.

მონაცემები იგზავნება ნედლეულის სახით. თქვენ შეგიძლიათ გააკეთოთ მათემატიკა და გაგზავნოთ მონაცემები მმ -ში ან ინჩში და ა.შ. მე ვთვლი, რომ ნედლეულის ღირებულებები ისეთივე კარგია, რომ ჩვენ შეგვიძლია გავაფართოვოთ ობიექტი მოგვიანებით პროგრამულ უზრუნველყოფაში.

ნაბიჯი 5: პირველი სკანირება

პირველი სკანირება
პირველი სკანირება
პირველი სკანირება
პირველი სკანირება
პირველი სკანირება
პირველი სკანირება
პირველი სკანირება
პირველი სკანირება

ქულების შეგროვება ნელი პროცესია, მე დავამონტაჟე ზონდი ზედა მარცხენა კუთხეში და გადავაყენე არდუინო.

ეს აჩერებს პოზიციას, როგორც სახლს.

შემდეგ გადაიტანეთ ზონდი სამიზნეზე მდებარე ადგილას, გააჩერეთ იგი და დააჭირეთ ღილაკს "სურათის გადაღება".

ამ საკმაოდ დიდი ნიმუშის ნაწილისთვის მე ავიღე მხოლოდ ~ 140 ქულა, ასე რომ დეტალები არ არის დიდი საბოლოო პროდუქტზე.

შეინახეთ მონაცემები. PCD ფაილში და დაამატეთ სათაური

#. PCD v.7 - Point Cloud მონაცემთა ფაილის ფორმატი ვერსია.7 FIELDS x y z ზომა 4 4 4 TYPE F F F COUNT 1 1 1 WIDTH (your point count) HEIGHT 1 VIEWPOINT 0 0 0 1 1 0 0 0 ქულა (თქვენი ქულა)

სათაურში ჩაწერეთ ქულების რაოდენობა, ეს ადვილია ნებისმიერ რედაქტორზე, რომელიც მოგაწვდით ხაზის ნომრებს.

ზემოთ მოცემული წერტილები ჩანს freeCad– ში, შემდეგ ისინი ექსპორტირდება freeCad– დან, როგორც. PLY ფაილი.

გახსენით. PLY MeshLab– ზე და ზედაპირზე მოათავსეთ ობიექტი. Შესრულებულია!!

გირჩევთ: