Nous allons faire cuire : scanner 3D basé sur l’Arduino et traitement (9 / 13 étapes)

Étape 9: traitement

Pourquoi traiter ? Parce que c’est facile à utiliser, avec grande référence et tutoriel de base. Il est également très similaire à l’arduino. Cela signifie que la probabilité d’erreur au cours de la diminution d’écriture de code. Les bibliothèques sont bien documentés également.

Première chose à faire dans le traitement est l’installation de la bibliothèque de GSVideo. Sont a-t-il des instructions d’installation et de téléchargement : http://gsvideo.sourceforge.net/
Donc en gros ordre ressemble à quelque chose comme ça, mais il est divisé en 2 boucles (faire les photos et le reste) :
faire des photos = > trouver des pixel plus brillante à tous les rangs = > enregistrer l’image de pixels plus brillantes représentation = > trouver la distance entre le milieu de la photo et pixel plus brillante dans tous les rangs = > convert se sont réunis les coordonnées polaires pour kartesian XYZ = > enregistrer le fichier ASC avec nuage de points.
On trouvera des explications en commentaires dans le code.
Première chose doit être fait preety est bientôt réglage où la valeur Z est égal 0. Maintenant, Z = 0 est définie non pas sur le centre de la plate-forme, mais sur la première ligne de la photo. Cela entraîne que le nuage de points de sortie est inversée.

Code :
import codeanticode.gsvideo.* ;
Import processing.serial.* ;

objets
PFont f ;
Cam GSCapture ;
Serial myPort ;
PrintWriter sortie ;

couleurs
couleur black=color(0) ;
couleur white=color(255) ;

variables
int RIR ; itération
float pixBright ;
flotteur maxBright = 0 ;
int maxBrightPos = 0 ;
int prevMaxBrightPos ;
int cntr = 1 ;
int rang ;
int col ;

paramètres du scanner
flotteur odl = 210 ;  distance entre la webcam et l’axe de rotation, [mm], ne pas encore utilisé
flotteur etap = 120 ;  nombre de phases de profilage par révolution
float katLaser = 25 * PI/180 ;  angle entre laser et caméra [radian]
float katOperacji = 2 * PI/etap ;  angle entre 2 profils [radian]

coordonnées
float x, y, z ;  cartésien cordons, [milimeter].
flotteur ro ;  premier des coordonnées polaires, [mm]
flotteur fi ; deuxième des coordonnées polaires, [radian]
flotteur b ; distance entre les pixels les plus brillants et milieu de photo [pixel]
float pxmmpoz = 5 ; pixels par mm horizontalement de 1px = 0,2 mm
float pxmmpion = 5 ; pixels par mm verticalement de 1px = 0,2 mm

//================= CONFIG ===================

void setup() {}
taille (800, 600) ;
strokeWeight(1) ;
Smooth() ;
Background(0) ;

fontes
f=createFont("Arial",16,true) ;

caméra CONF.
String [] avcams=GSCapture.list() ;
Si {(avcams.length==0)
println ("il n’y a pas de caméras disponibles pour la capture.") ;
textFont(f,12) ;
Fill(255,0,0) ;
texte (« Caméra n’est pas prêt », 680, 32) ;
}
else {}
println ("caméras disponibles:") ;
pour (int i = 0; i < avcams.length; i ++) {}
println(avcams[i]) ;
}
textFont(f,12) ;
Fill(0,255,0) ;
texte ("Camera ready, 680, 32) ;
Cam = new GSCapture (this, 640, 480,avcams[0]) ;
Cam.Start() ;
}

Série (COM) CONF.
println(Serial.List()) ;

myPort = nouvelle série (ce, Serial.list() [0], 9600) ;

fichier de sortie
Output=createWriter("Skan.asc") ;  plik wynikowy *.asc

}

=== PROGRAMME PRINCIPAL ===

{} void draw()

Zdjecie=createImage(cam.width,cam.height,RGB) Byte ;
Cam.Read() ;
Delay(2000) ;
pour (itr = 0; itr < etap ; RIR ++) {}
Cam.Read() ;
zdjecie.loadPixels() ;
cam.loadPixels() ;
pour (int n = 0; n < zdjecie.width*zdjecie.height; n ++) {}
Zdjecie.pixels[n]=CAM.pixels[n] ;
}
zdjecie.updatePixels() ;
Set(20,20,CAM) ;
String nazwaPliku = « zdjecie-» + nf(itr+1, 3) + ".png" ;
Zdjecie.Save(nazwaPliku) ;
obroc() ;
Delay(500) ;
}
obroc() ;
LICZ() ;
noLoop() ;

}

void licz() {}
pour (itr = 0; itr < etap ; RIR ++) {}

String nazwaPliku = « zdjecie-» + nf(itr+1, 3) + ".png" ;
Skan=loadImage(nazwaPliku) Byte ;
String nazwaPliku2 = « odzw-» + nf(itr+1, 3) + ".png" ;
Odwz Byte = createImage (skan.width, skan.height, RVB) ;
skan.loadPixels() ;
odwz.loadPixels() ;
int currentPos ;
fi = RIR * katOperacji ;
println(FI) ;

pour (rang = 0; ligne < skan.height ; ligne ++) {//starting analyse de ligne
maxBrightPos = 0 ;
maxBright = 0 ;
pour (col = 0; col < skan.width ; col ++) {}
currentPos = ligne * skan.width + col ;
pixBright=brightness(skan.pixels[currentPos]) ;
if(pixBright>maxBright) {}
maxBright = pixBright ;
maxBrightPos = currentPos ;
}
oDwz.pixels[currentPos]=Black ; définition de tous les pixels noirs
}

oDwz.pixels[maxBrightPos]=White ; pixel plus brillants de cadre blanc

b = ((maxBrightPos+1-row*skan.width)-skan.width/2) / pxmmpoz ;
RO=b/Sin(katLaser) ;
output.println (b + «, » + prevMaxBrightPos + «, » + maxBrightPos) ; J’ai utilisé cela pour le débogage

x = ro * cos(fi) ;  changement de coordonnées polaires à kartesian
y = ro * sin(fi) ;
z = ligne/pxmmpion ;

Si ((ro > =-30) & & (ro < = 60)) {//printing coordonnées
output.println (x + «, » + y + «, » + z) ;
}

} //end d’analyse de ligne

odwz.updatePixels() ;
oDwz.Save(nazwaPliku2) ;

}
output.Flush() ;
output.Close() ;
}

void obroc() {//sending commande pour activer
myPort.write('S') ;
Delay(50) ;
myPort.write('K') ;
}

Articles Liés

Nous allons faire cuire des petits gâteaux amour

Nous allons faire cuire des petits gâteaux amour

je vois toujours les moules de cake à Michael qui vous permettent de faire cuire un coeur à l'intérieur d'un gâteau. Je pense que ceux qui sont très mignons mais le moule lui-même coûte environ environ 50 $ et il n'est pas très polyvalent pour être u
Nous allons faire cuire un poisson entier !

Nous allons faire cuire un poisson entier !

Bonjour les gens !Je vais vous enseigner ma stratégie pour cuire un poisson entier. Pourquoi vous faire cuire un poisson entier comme ceci, par opposition à simplement filetage et faire cuire, ou tout simplement décongeler un morceau congelé de poiss
Nous allons faire un SmartWatch

Nous allons faire un SmartWatch

Edison est assez petit pour utiliser dans les projets de wearble, alors pourquoi ne pas nous faire une montre intelligente avec ce petit ordinateur.Etape 1: contenuIntroduction à Intel EdisonFicheMéthodes de programmationPrototypage avec EdisonPourqu
Nous allons faire des bougies de plage !

Nous allons faire des bougies de plage !

Je viens de rentrer d'un week-end super génial à Madeira Beach avec ma femme et mes parents. Alors que ma femme peut étendre au soleil pendant des heures et mes parents sont heureux de s'asseoir à l'ombre en sirotant bière et écouter Jimmy Buffet, je
Toussaint : Nous allons faire un jeu ! Tutoriel 2

Toussaint : Nous allons faire un jeu ! Tutoriel 2

Hey tout le monde pour mon second tutoriel de GameMaker. Une chose que j'ai oublié de dire c'est que pour les sprites, vous pouvez charger une image depuis votre ordinateur, en cliquant sur « Load Sprite » au lieu de « Edit Sprite. » Cela vous permet
Nous allons faire une montre Wrap

Nous allons faire une montre Wrap

je suis assez sauvage sur tout type de bijoux de pellicule donc j'étais super excité de faire cet enveloppement à regarder. Si vous êtes comme moi et que vous aimez envelopper bijoux trop, allez sur et saisir ces éléments et nous allons faire une de
Nous allons faire une épingle bourdon mignon !

Nous allons faire une épingle bourdon mignon !

Notre longue lutte pour créer une machine à espace et Centre à la succursale principale de notre bibliothèque locale d'apprentissage communautaire vient concrétiser ! Nous menons une journée portes ouvertes pre inauguration cette semaine et je voulai
Nous allons faire du beurre et de répandre l’amour !  Maintenant avec étiquette imprimable pdf !

Nous allons faire du beurre et de répandre l’amour ! Maintenant avec étiquette imprimable pdf !

Nous allons faire du beurre et de répandre l'amour cette Saint-Valentin ! {j'ai vous écouté !  Cliquez ici pour télécharger un fichier pdf des étiquettes que j'ai fait.  Il y a quatre à une feuille.  Vous pouvez également Télécharger une feuille blan
Nous allons faire un nudibranche d’argile polymère !

Nous allons faire un nudibranche d’argile polymère !

Mon nom est Josué: Bonjour vagues : je suis biologiste et crafter résolument amateur.  J'ai vécu sur la côte Atlantique toute ma vie ; par conséquent, la vie marine qui me fascine sans fin.  J'ai choisi le jeu avec le concours de l'argile comme un mo
Nous allons faire un contrôleur de jeu !

Nous allons faire un contrôleur de jeu !

J'aime jeux de vol, mais il se sent comme il n'y a jamais assez de boutons sur mon joystick.Cette instructable vous montrera comment construire votre propre panneau de commutateur en aucun temps.Il fonctionnera avec n'importe quel jeu et ordinateur q
Nous allons faire une sangle de guitare acoustique Paracord

Nous allons faire une sangle de guitare acoustique Paracord

J'ai et jouer des guitares acoustiques plus de guitares folk électro, et certains n'ont pas le plaisir petits boutons qui me permettent d'attacher un bracelet, donc je peux jouer tout en se levant. Certain temps déployé mon EWO copain Jeff (étant un
Nous allons faire le Chutney avec pastèque séchée et cerfeuil infusé Rum

Nous allons faire le Chutney avec pastèque séchée et cerfeuil infusé Rum

Quand j'ai vu le Chef ferreux : concours de pastèque j'étais perplexe. Comme un cuisinier et un boulanger, je devais faire quelque chose pour le concours, mais que puis-je faire avec la pastèque qui n'a pas été fait auparavant ? Également dans le dia
Toussaint : Nous allons faire un jeu ! Tutoriel 1

Toussaint : Nous allons faire un jeu ! Tutoriel 1

Hey tout le monde, j'ai décidé de faire un tutoriel jeu entier pour GameMaker. Parce qu'il y a tant de choses que vous pouvez faire dans GM, je vais faire une chose à la fois par le tutoriel. Dans celui-ci, je vais me concentrer sur la création d'un
Nous allons faire un iPhone dock

Nous allons faire un iPhone dock

J'ai pensé que je coud essayer, je ne sais pas si cela va fonctionner, la seule chose que je fais est essayer les idées dans la logique.Donc, nous allons lui donner un aller, hein ?Étape 1: fournitures...1. un cordon stéréo iphone2. un orateur, pas d