NDS3

Aus Nibo Wiki

Wechseln zu: Navigation, Suche
NDS3 Erweiterung
NDS3 Erweiterung
Nibo2 mit NDS3 Erweiterung

Der NDS3 (Nibo Distance Scanner 3) ist eine Erweiterung, die es dem NIBO 2 ermöglicht Distanzen in einem Bereich zwischen 10 cm und 80 cm genau zu ermitteln. Es handelt sich um eine Kombination aus einem Servo, einem Sharp Distanzmesser und einem ATtiny84 als Mikrocontroller zur Datenverarbeitung.

Für einen Scan benötigt das NDS3 ca. 2 Sekunden. Anschliessend stehen die Distanzwerte von -90 bis +90 Grad zur Verfügung. Der Sensor kann auch in eine bestimmte Richtung geschwenkt werden und dort kontinuierlich die Distanz messen.

Zusätzlich stellt das NDS3 vier Port-Bits zur freien Vefügung, die als digitale Ein- und Ausgänge oder als analoge Eingänge verwendet werden können.

Da der ATtiny84 über einen integrierten Temperatursensor verfügt steht auch diese über den I²C-Bus zur Verfügung.



Bibliotheksunterstützung

Um das NDS3 Modul ansprechen zu können muss in den Compiler-Optionen die Option -DNIBO_USE_NDS3 eingetragen werden. Zusätzlich muss die libnds3.a eingebunden werden. Die Bibliotheksfunktionen sind hier dokumentiert.


Protokoll

Jeder Zugriff über den I²C Bus beinhaltet einen Schreib- und einen Lesezugriff und ist nach folgendem Schema aufgebaut:

Address Write Command W-Data Address Read R-Data
7 Bit 1 Bit 8 Bit [m Byte] 7 Bit 1 Bit [n Byte]

Falls Keine Daten zurück übertragen werden entfällt das zweite Datenpaket.

Im folgenden Abschnitt werden die verschiedenen Befehle nach folgendem Muster aufgelistet:

Command: Name (W-Data) -> (R-Data)


Kommandos

Distanzmessung:

0x00: Reset () -> ()

0x01: Move (int8_t pos) -> ()

0x02: Measure (int8_t pos, uint8_t step) -> ()

0x03: Read (int8_t pos, uint8_t step) -> (uint8_t data[])

0x04: GetPos () -> (int8_t pos)

0x05: GetDist () -> (uint8_t dist)

0x06: GetBusy () -> (uint8_t busy)


Portfunktionen:

0x10: SetDDR (uint8_t value) -> ()

0x11: SetPort (uint8_t value) -> ()

0x12: GetPin () -> (uint8_t value)

0x13: GetAnalog (uint8_t idx) -> (uint16_t value)


Kalibrierung:

0x20: MoveServo (uint16_t value) -> ()

0x21: GetServoCalib () -> (uint16_t lo, uint16_t hi)

0x22: SetServoCalib (uint16_t lo, uint16_t hi) -> ()

0x23: GetDistCalib () -> (int16_t v0, int16_t d0, int16_t alpha)

0x24: SetDistCalib (int16_t v0, int16_t d0, int16_t alpha) -> ()

Persönliche Werkzeuge
Werbung