Pages: [1] 2   Go Down
Author Topic: Anfänger braucht Hilfe mit uno  (Read 1535 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

muss erstmal sagen das ich blutiger Anfänger bin und mir einen Arduino uno mit zweizeiligem Display zugelegt habe weil ich tolle Dinge im Youtube gesehen habe die von Usern gebastelt wurden.

Habe folgende Idee, würde gerne eine Zeitmessung für meine Slotbahn programmieren die dann im nächsten Step grafisch auf einem PC dargestellt werden kann.
Stelle mir das so vor....jede Spur wird mit einem Reed Schalter ausgestattet und löst die Zeitmessung für die jeweilige Spur über einen Digitaleingang aus.

Das könnte Display 2x16 so aussehen:

1: 7:12 SR 6:05
2: 8:34 SR 7:23

1: für Slot 1 und die aktuwelle Rundenzeit und SR für die schnellste Rundenzeit.

wäre wirklich für jede verständliche Hilfe dankbar

Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 721
42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hilfe bei was? Aufbau, Programmierung?
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich denke der aufbau ist kein Problem, eher die Programmierung

zum Aufbau, wollte eben mit zwei Reed kontakten in die digitalen eingänge gehen das sollte soweit kein Problem sein denke ich.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 125
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was für ein Display hast du den ?
Die Idee ist gut , hast du die Sache schon
gebaut?
Logged

Everybody makes mistakes, me too smiley

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja soweit alles fertig gebaut, mir fällt nur gerade auf das ich ja keine digitale eingänge habe sondern nur analoge oder?

habe das das zweizeilige lcd shield von sainsmart
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.sainsonic.com/zen/albums/ebay/sainsmart/20-011-805%202560+V5+XBee+LCD/IMG_2210.jpg

habe mal den link von dem display eingefügt smiley-wink
Logged

Germany
Offline Offline
Edison Member
*
Karma: 47
Posts: 2320
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie sieht denn dein bisheriger Sketch aus? Wo hängt es denn genau? Oder soll hier jemand die komplette Programmierung übernehmen?
Ein paar Threads weiter ging es schon um eine Stoppuhr, vielleicht kannst du dir da ein paar zusätzliche Inspirationen holen.

Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wäre wirklich für jede verständliche Hilfe dankbar

Da Slotcars schnell sind und daher nur (wenn überhaupt) extrem kurze Schließzeiten an den Reedkontakten verursachen, kannst Du die beiden Hardwareinterrupts an Pin-2 und Pin-3 (D2, D3) des UNO verwenden, um ein Signal abzugreifen.

Da der UNO nur zwei Hardwareinterrupts hat, wäre "zwei" zugleich auch die maximale Anzahl von überwachbaren Eingängen.

Bevor Du das komplett aufbaust, würde ich allerdings erst mal mit Hilfe eines Test-Sketches, Reedkontakt und der Pin-13 LED auf dem UNO austesten, ob Reedkontakte überhaupt zur Erfassung geeignet sind. Oder bist Du Dir diesbezüglich schon sicher, weil es andere Slotcarbastler auch mit Reedkontakten machen?

Hier mal ein Test-Sketch, wobei ich davon ausgehe, dass der Reedkontakt ein einfacher Schließkontakt ist und zwischen Ground und D2 angeschlossen wird. Beim Auslösen sollte dann die PIN-13 LED auf dem UNO für eine halbe Sekunde angehen, und zwar auch bei extrem hoher Fahrgeschwindigkeit.

Code:
#define LEDPIN 13
#define REEDPIN1 2
#define REEDINTERRUPT1 0
long roundStart1=-9999;


void setup() {
  // put your setup code here, to run once:
  pinMode(LEDPIN,OUTPUT);
  pinMode(REEDPIN1,INPUT_PULLUP);
  attachInterrupt(REEDINTERRUPT1, timing1, CHANGE);
}

void timing1()
{
  boolean static lastState;
  boolean state;
  state=digitalRead(REEDPIN1);
  if (state!=lastState && state==LOW)
    roundStart1=millis();
  lastState=state;  
}

void loop()
{
  if (millis()-roundStart1<500)
    digitalWrite(LEDPIN,HIGH);
  else  
    digitalWrite(LEDPIN,LOW);
}

Für das endgültige Programm müßten natürlich noch ggf. prellende Kontakte softwaretechnisch entprellt werdenn, die Rundenzeiten ermittelt und auf dem Display ausgegeben werden. Aber am Blinken der LED im Test-Sketch könntest Du schon mal erkennen, ob der Aufbau mit Reedkontakt überhaupt prinzipiell zur Signalerfassung geeignet und der Reedkontakt schnell genug für Deine Slotcars ist.
« Last Edit: April 06, 2013, 07:42:52 am by jurs » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich kenne mich überhaupt nicht aus, weiss auch nicht genau wie ich da anfangen soll.

habe also noch keinerlei anfänge in einem sketch

will aber auch nicht das mir jemand den ganzen sketch vorsagt...will nur einen einstieg. ist es denn richtig das die reed kontakte in die analogen eingänge müssen oder gibt es digitale eingänge?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke jurs für diesen wirklich sehr verständlichen Beitrag smiley-wink

habe es gerade getestet und siehe da, es klappt. selbst bei maximaler Geschwindigkeit reagiert der Reed Kontakt und LED 13 sind an.

Noch eine Frage zu den I/O´s....habe gerade gelesen das ich...weil es ja I/O´s sind mit Hilfe des Pin Mode befehls sagen kann ob es eingang oder ausgang ist. warum habe ich dann nur zwei und nicht 12 eingänge?

Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich kenne mich überhaupt nicht aus, weiss auch nicht genau wie ich da anfangen soll.

habe also noch keinerlei anfänge in einem sketch

will aber auch nicht das mir jemand den ganzen sketch vorsagt...will nur einen einstieg. ist es denn richtig das die reed kontakte in die analogen eingänge müssen oder gibt es digitale eingänge?

Ein Reedkontakt ist ein Schalter, der kennt nur "ein" und "aus", das ist ein digitales Signal und das wird digital abgefragt.

Und wenn es um extrem schnelle Signale geht, die auf schnarchlangsamen Geräten ausgegeben werden sollen (LCD-Display löschen dauert z.B. zwei Millisekunden), dann kommt nur eine Abfrage der Eingänge per Interrupt in Frage. Beim Polling der Leitung kann es Dir sonst passieren, dass auf Deiner Rundenzeitanzeige gerade eine langsame Aktualisierung der Anzeige läuft, während gerade der Rennwagen den superkurzen Impuls gibt, und dann bekommt der Wagen für eine Runde keine Rundenzeit oder beim nächsten Durchfahren als Rundenzeit die Zeit für eine Runde angeschrieben in der er tatsächlich zwei Runden gefahren ist.

Ein Polling der Eingänge reihum funktioniert nur dann, wenn die Summe der Zeiten für das Abfragen sämtlicher zu überwachenden Eingänge plus die Summe der Zeiten für die langsamste Aktualisierung der Anzeigen  sehr klein ist im Verhältnis zur Auslösezeit, während der Reedschalter Kontakt gibt.

Rechenbeispiel:
Mal angenommen die langsamste Abfrage und Display-Aktualisierung dauert 4 Millisekunden  (zwei Leitungen abfragen, Display löschen, zwei Zeilen auf Display ausgeben) und der Reed-Kontakt gibt einen Kontakt, während das Slotcar eine Fahrstrecke von 10 mm zurücklegt, dann darf die Geschwindigkeit bei Polling-Abfrage maximal betragen:
0,01 m / 0,004 s = 2,5 m/s.
D.h. bei Abfrage per Polling statt Interrupt können Dir im ungünstigsten Fall ab einer Fahrgeschwindigkeit von mehr als 2,5 m/s einzelne Rundenimpulse verloren gehen, wenn nämlich gerade das Display aktualisiert wird während der nächste Wagen durchfährt. Dies würde immer dann eintreffen, wenn der nachfolgende Wagen nahezu gleichauf ist, also wenn er weniger als 10mm hinter dem ersten Wagen hängt, dann würde beim Polling nur die Rundenzeit des ersten Wagens ermittelt und die Runde des nur wenige Millimeter hintendran hängenden Fahrzeugs würde komplett unter den Tisch fallen, weil der Kontakt auslöst, während gerade das Display des knapp voranfahrenden Fahrzeugs aktualisiert wird.

Dies vermeidest Du durch die Nutzung von Hardware-Interrupts: Solange der Reedkontakt einen noch so kurzen Kontakt gibt, wird der Impuls korrekt erfaßt, auch wenn das Programm gerade dabei ist, die Anzeigetafel zu aktualisieren. Deshalb die Nutzung von Hardware-Interrupts und deshalb auch der Test bei Maximalgeschwindigkeit.

habe es gerade getestet und siehe da, es klappt. selbst bei maximaler Geschwindigkeit reagiert der Reed Kontakt und LED 13 sind an.

Na bravo! Dann kannst Du darauf aufbauen!

Noch eine Frage zu den I/O´s....habe gerade gelesen das ich...weil es ja I/O´s sind mit Hilfe des Pin Mode befehls sagen kann ob es eingang oder ausgang ist. warum habe ich dann nur zwei und nicht 12 eingänge?

Ein UNO hat sogar 20 digitale Ein-/Ausgänge, nämlich 14 digitale und 6 analoge, wobei aber auch die analogen Eingänge wie digitale Eingänge genutzt werden können. Das Problem bei schnellen Timings ist aber: Du hast NUR ZWEI INTERRUPTS auf einem Uno. Und daher kannst Du per Interrupt nur zwei Timings machen.

Mit Polling (nacheinander alle Eingänge abfragen) könntest Du zwar bis zu 20 Fahrzeuge einzeln timen, aber wie oben vorgerechnet: Bereits ab einer Fahrgeschwindigkeit von 2,5 m/s und höher würde bei einer sehr knappen Abfolge der Fahrzeuge immer nur das erste erfaßt werden: Wenn das wenige Millimeter hintendranhängende Fahrzeug folgt, ist ein Polling-Programm nämlich dabei gerade das langsame Display zu aktualisieren, und dann geht der Impuls verloren.

Wenn es nicht so genau drauf ankommt, dass in manchen (seltenen) Fällen eine Runde gar nicht gezählt wird, kannst Du es natürlich per Polling machen. Aber wenn die Fahrzeuge dann mit mehr als 2,5m/s unterwegs sind und sie gleichzeitig ganz knapp nacheinander (also fast zeitgleich) ihre Reedkontakte auslösen, mußt Du mit Rundenverlusten rechnen.

Wie viele Fahrzeuge möchtest Du denn erfassen?
Mehr als zwei, wie es Dein ursprüngliches Posting nahelegt?
« Last Edit: April 06, 2013, 08:47:05 am by jurs » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 263
Posts: 21602
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Genaugesagt ha der arduino UNO 20 digitale Ein/Ausgänge (Numeriert von 0 bis 19)
Bestimmte pins haben Mehrfachfunktionen:
* 0 und 1 ist die Serielle Schnittstelle die mit einem USB Adapter verbunden ist und zur programmierung gebraucht wird. Falls sie nicht für die Progrrammierung gebraucht wird kann die serieller Schnittsatelle auch als serielle Schnittstelle für andere Elektronik verwendet werden oder als normale Pins.
* 2 und 3 sind Interrupteingänge mit bestimmten Funktionen (http://arduino.cc/en/Reference/AttachInterrupt) (diese Funktionen haben nur diese, ansonsten für bestimmte Funktionen können auch andere Pins verwendet werden)
*  3, 5, 6, 9, 10, und 11 sind PWM-Ausgänge
* 14 bis 19 sind analoge Eingänge
* 11,12 und 13 ist die SPI Schnittstelle dazu noch ein weiteres Pin Deiner Wahl um das angesprochene Gerät zu aktivieren.
* 18 und 19 (A4  und A5) ist die I2C Schnittstelle.

Quote
warum habe ich dann nur zwei und nicht 12 eingänge?
Weil eben nur die 2 als Interrupteingänge benutzbar sind.

Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke für diese sehr detailreiche erklärung, muss wohl nochmal in ruhe durchlesen um es zu verdeutlichen aber im groben habe ich das nachvollziehen können.

ich habe eine rennbahn mit 2 slots auf der maximal 2 autos zugleich fahren können. Also eine analoge bahn.

deshalb wollte ich auch zwei reedschalter verbauen um jeweils einen in den entsprechenden slot zu verbauen.
Hardwaremässig funktioniert es also schonmal.

jetzt muss nur noch die Programmierung klappen smiley-wink

mir würde es schon reichen wenn ich das ganze für einen slot also einen eingang habe. kann das dann wohl für den zweiten selber umsetzen.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke uwefed für die verdeutlichung der kontakte.

also muss ich meinen zweiten reed Kontakt an pin 3 anschliessen bei einem gemeinsamen GND?

Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 146
Posts: 3031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

also muss ich meinen zweiten reed Kontakt an pin 3 anschliessen bei einem gemeinsamen GND?

Ja, Reedkontakt-1 zwischen Ground und D2, Reedkontakt-2 zwischen Ground und D3.

Die Interrupts sind wie folgt zu verwenden:
D2 ==> Interrupt 0
D3 ==> Interrupt 1

Bis zu 6 Slotcars könntest Du übrigens mit einem MEGA Board per Interupt timen, siehe: http://arduino.cc/en/Main/arduinoBoardMega

jetzt muss nur noch die Programmierung klappen

Was hast Du denn als LCD?
Ein "Keypad-Shield" (LCD mit 6 Tasten) zum Aufstecken auf den Arduino?
Ein "I2C LCD" das mit nur Plus, Minus und 2 Leitungen angeschlossen wird?
Oder nur ein "nacktes" LCD mit 16 Anschlüssen, von denen Du etliche selbst verdrahten müßtest?
Logged

Pages: [1] 2   Go Up
Jump to: