Kategorie-Archiv: Software

IR-Empfang der Sensoren

Foto 27.09.14 17 21 02Da ich ja nicht soooo oft Neuigkeiten poste, erlaube ich mir jetzt einfach mal ein klein wenig öfter zu schreiben. Ich bin immer noch bei meinen neuen Sensoren. Bisher konnten die Sensoren vom Master zum leuchten und blinken gebracht werden.

Wofür das eigentlich?

Als erstes um dem Angreifer einen Treffer zu signalisieren. Schadenstreffer werden grundsätzlich in rot dargestellt.

Warum dann eine RGB-LED in den neuen Sensoren?

Neben Rot als Signalfarbe, wird es auch Grün geben, um empfangende Heilung anzuzeigen. Außerdem möchte ich das System sehr anpassbar gestalten. Das bedeutet, dass jeder Spieler, wie in Laser Domes üblich, in eigenen Teamfarben leuchten kann. Wenn man das nicht möchte, können Teamfarben eben einfach deaktiviert werden.

IR-Empfang

Ich habe nun die Funktionen für den Empfang der 2 Bytes + Prüfbit eingebaut. Der Sensor empfängt nun zuverlässig das Signal, und prüft es auf Korrektheit. Fehlerhafte oder nur teilweise empfangene Signale werden ignoriert. Sollte das Signal in Ordnung sein, leitet der Sensor die Daten (2 Bytes ohne Prüfbit, weil verifiziert ist das Signal bereits im Sensor) zusammen mit seiner eigenen SensorID an den Master. Im Master werden die Daten dann ausgewertet und entschieden, wie die Sensoren blinken müssen. Das Mitsenden der eigenen SensorID ist dafür nötig, um auswerten zu können, von wo der Schuss registriert wurde. Jede SensorID ist theoretisch mit einer Position am Körper logisch verknüpft.

Kurz und knapp: ES GEHT!!

Kleiner Nachtrag zu meinem Blogpost von gestern:

Kurz nachdem ich den Beitrag verfasst hatte, habe ich eine E-Mail mit einem angehängten Foto vom Hersteller bekommen, welches die Platinen kurz vor dem Versand zeigt.

elecrow shipping image

 

Gnihihihihi …. jetzt 3 Wochen warten…. Gnaahhh

Redesign der Sensoren mit i2c-Bus

sensor_in_devEs geht weiter im Pewduino-Projekt. Unser erster Meilenstein ist die Entwicklung von funktionierenden Sensoren. Zur Zeit wird der Sensor noch auf einem Mini-Breadboard mit Arduino Nano entwickelt. Wie ich im vergangen Post schon erwähnte, findet ein Atmel Mikrokontroller Platz in jedem Sensor.

Verbunden werden die Sensoren über den i2c-Bus. Der Arduino unterstützt die i2c-Kommunikation mittels der Wire-Library.

I2C muss man sich wie das heimische Netzwerk (LAN) vorstellen, nur eben viel simpler, aber ähnlich, denn jedes Gerät bekommt eine eigene Adresse zugewiesen. Allerdings gibt es keine automatische IP-Adressenvergabe, wenn ein neues Gerät in das “Netzwerk” angeschlossen wird. Und um maximale Benutzerfreundlichkeit zu gewährleisten, war die erste Hürde, dass jeder Sensor eine einzigartige Adresse im i2c-Netz bekommt, ohne dabei jeden Sensor manuell konfigurieren zu müssen. Es soll Plug-n-Play sein. So einfach. Keine kabelgebundene Konfiguration über den PC oder per Schalterchen auf dem Sensorboard.

Und da das i2c keinen “DHCP-Server” vorsieht, musste an dieser Stelle so etwas erst einmal entwickelt werden. Sehr simpel und rudimentär, aber es funktioniert.

Neue Sensoren bekommen vom Master, der Microcontroller der im Markierer steckt, eine Adresse zugewiesen, und prüfen selbstständig, ob die Adresse im Netz doppelt vorkommt. Denn das muss dringend vermieden werden!

Als nächsten Schritt muss die i2c-Kommunikation funktionieren. Der Sensor wird auf Befehle des Markierers reagieren, und andersrum. Aus dem Grund könnte im nächsten Blogpost wieder mal ein Video folgen. Yeah.

 

weiterführende Links:
http://www.i2c-bus.org/de/i2c-bus/
http://de.wikipedia.org/wiki/I%C2%B2C
http://arduino.cc/en/pmwiki.php?n=Reference/Wire

Timer Funktionen im Atmel Atmega328

Arduino Duemilanove 328

Arduino Duemilanove 328

Also bislang hatte ich in meinem pewduino Code noch keine Timer verwendet. Ich habe aber gemerkt, dass die eingebauten Timer ziemlich nützlich sein können :) Also habe ich mal im Internet gestöbert um nachzulesen, was Timer genau sind, und wie sie funktionieren.

Viele Anleitungen und Tutorials zu Timern sind aber ziemlich unverständlich für einen Programmier-Laien, finde ich. Allerdings habe ich eine Seite gefunden, die es trotzdem hingekriegt hat, die Fakten verständlich auf den Punkt zu bringen.

Und diese Seite möchte ich nun teilen (Links siehe unten)

Summary:  In my actual pewduino code, i didn’t use any timer function. I stumbled through the internet to learn something about it. Most of the tutorials are hard to understand, but i found a site which explained it very well. With this post, i want to share it:

http://extremeelectronics.co.in/avr-tutorials/avr-timers-an-introduction/
http://extremeelectronics.co.in/avr-tutorials/timers-in-compare-mode-part-i/
http://extremeelectronics.co.in/avr-tutorials/timers-in-compare-mode-part-ii/

Außerdem gibt es für Timer1 und Timer3 (nur Arduino Mega) auch eine Library vom Arduino Playground:

http://playground.arduino.cc/code/timer1