3D-Scanner mit Sharp Distanzsensor

Ein selbst gebauter 3D-Scanner auf Basis von zwei Modellbauservos, einem Atmel AVR Mikrocontroller und einem Sharp Infrarot-Distanzsensor

All available languages for this article:

3D-Scanner mit Sharp Distanzsensor [de]

Categories:

Mikrocontroller


Einleitung

Hier beschreibe ich meinen selbstgebauten 3D-Scanner auf Basis von zwei Modellbauservos, einem Atmel AVR Mikrocontroller und einem Sharp GP2Y0A02YK Abstandsmesser/Distanzsensor.

Hinweis

Ich übernehme keinerlei Garantie für die Funktion der hier vorgestellten Schaltung! Für Schäden an Bauteilen und/oder Personen oder Schäden anderer Art wird keine Haftung übernommen! Nachbau und Benutzung erfolgen auf EIGENE GEFAHR!

Aufbau

Der Aufbau ist relativ simpel: Ein Servo ist für die Rotation um bis zu 180 Grad um die X-Achse verantwortlich, ein weiteres für die Rotation um die Y-Achse. Oben ist als Distanzsensor der Sharp GP2Y0A02YK montiert. Laut Datenblatt lassen sich damit Entfernungen von etwa 20cm bis 150cm erkennen.

Die beiden Servos sind an jeweils einen digtalen Ausgang des µC angeschlossen und werden von ihm mit variablen Pulsen angesteuert. Der Ausgang des Distanzsensor ist an einen analogen Eingang des µC (ADC) angeschlossen. Der UART ist mit einem MAX232 verbunden, der die Kommunikation über die serielle Schnittstelle mit einem Laptop ermöglicht.

Arbeitsweise des Sensors

Der Sharp GP2Y0A02YK arbeitet nach dem Prinzip der Triangulation mittels eines sog. position sensitive device.

Der Sensor beleuchtet dazu das Objekt mit Infrarotlicht und misst den Winkel, in dem das Licht reflektiert wird. Das Ergebnis wird als analoge Spannung ausgegeben und kann von µC weiterverarbeitet werden. Die Kennlinie des Sensors ist im Datenblatt bei Sharp nachzulesen.

Hier ein Schnappschuss der Infrarot-Diode, mit bloßem Auge ist nur ein leichtes rotes Leuchten erkennbar:

Ansteuerung der Servos

Modellbauservos werden angesteuert, indem man auf der Signalleitung (meist Gelb oder Blau) ein Rechteck-Signal anlegt bei dem die Pulslänge variiert. Ein High-Phase von ca. 1ms entspricht der linken Endposition, eine High-Phase von ca. 2ms entspricht der rechten. Die darauf folgende Low-Phase sollte etwa 20ms betragen, kann jedoch je nach Servotyp auch variiert werden.

Es mag kompliziert klingen, die 1ms-2ms Pulse zu erzeugen, ist jedoch mit den AVRs in einer Idle-Loop sehr einfach zu bewerkstelligen.

Kurzer Code-Ausschnitt:

  /* servo ist angeschlossen an PB0 */
  sbi(PORTB, PB0); /* high */

  /* eine gewisse zeit nichts tun,
   * entweder ausrechnen oder experimentell ermitteln
   */
  for(delay=0;delay<servo_value;delay++) {
    asm("nop"); /* nichts tun */
  }

  cbi(PORTB,PB0);  /* low */

Ablauf eines Scans

Zum Steuern des Scans wird auf dem PC ein Programm benutzt, das dem µC über die serielle Schnittstelle angibt, wohin sich die Servos bewegen sollen und dann anschließend den Sensorwert (ebenfalls über RS232) ausliest. Die rohen Sensordaten werden zusammen mit den Positionsdaten in einer einfachen Textdatei gespeichert und dann mit Perl-Scripts nachbearbeitet und in die gewünschten Formate konvertiert, zum Beispiel in Bitmaps.

Beispielscans

Erster Scan, man erkennt deutlich das Multimeter, die Lötstation und den Lötkolben:

Eine RC-Car Fernbedienung, daneben in Original-Auflösung:

Oberkörper mit verschränkten Armen:

Profil von Oberkörper und Kopf:

Panorama-Scan von Zimmer:

Videos von Scans

Video von einem Scan, man sieht den Sensor, sich aus seiner Nullposition zum Scanbereich bewegend.

Download (AVI; MPEG2; 919Kb)

Video von einem Scan

Download (AVI; MPEG2; 888Kb)

Video von einem Scan mit Blick auf die LED hinter der Linse.

Download (AVI; MPEG2; 252Kb)


 
     
© 1999 - 2018 ScriptKiller
Impressum | Sitemap
Bei der Nutzung dieser Webseite werden IP-Adressen und Informationen über verwendete Browser in Logfiles gespeichert. Mit der Nutzung erkennen Sie diese Tatsache an.