Go Down

Topic: Electronisch Jurerings Systeem (Read 19 times) previous topic - next topic

YvesD

Hallo,

Ik ben een nieuweling in het Arduino gebeuren, en ik kan best wel wat hulp gebruiken  :smiley-red:

Ik zit hoofdzakelijk in de honden wereld, en lang, lang geleden heb ik wat electronica gestudeerd op school.
Nu zijn we met een nieuw project bezig waarvoor we een EJS nodig hebben.

Wat doet zo'n EJS?
Het is een tijdsregistratiesysteem dat aangestuurd wordt door 2 rijen fotocellen per baan (2 parallelle banen per wedstrijdring)
Maar eer de honden van start mogen gaan is er een lampcyclus die doorlopen wordt (een beetje zoals in de formule1 racing)
Dus het gaat als volgt :
Rode lamp licht op, 0,80sec later de eerste oranje lamp er net onder, nog eens 0,80sec de tweede oranje lamp daaronder, en tenslotte na nog eens 0,80sec de groene lamp daaronder.
Op het moment dat de groene lamp (SMD 5050 LED strip) aanslaat, begint er een teller te lopen (de stopwatch zeg maar).
Als de eerste hond te vroeg door de eerste sensorlijn (sensorlijn IN) loopt, dient er een wit licht aan te gaan (foutieve start)
De kunst zit hem erin om met de eerste hond zo dicht mogelijk bij het startsignaal door de eerste sensorlijn te gaan.

Nadat de eerste hond terug komt met een bal in de mond en zodoende eerst en vooral de tweede sensorlijn (sensorlijn UIT) doorkruist, dan pas mag de volgende hond door de eerste sensorlijn (sensorlijn IN) gaan. Doet de tweede hond dit te vroeg, dan is dit een foutieve wissel van honden.

Zo gaat dit door tot alle vier de honden om een bal geweest zijn op een correcte wijze.

Voorwaar geen simpele kwestie, maar dit is nog niet alles!
Als er een hond onderweg een fout begaat (bvb bal laat vallen, of naast de baan terugkomt), dan dient er een welbepaalde kleur van lamp op te lichten (1ste hond - rood, 2de hond - blauw, 3de hond - geel, en tenslotte 4de hond - groen.
Dit wordt door lijnrechters op beide banen nagezien, en de foutlampen moeten manueel kunnen aangezet worden met een eenvoudige schakelaar per hond.

Als er een foutieve kruising gebeurd dan moet dit ook auditief hoorbaar zijn (buzzer), dit wil zeggen dat de tweede hond bvb vroeger de start/finischlijn kruist dan dat de vorige hond dit doet, op die manier kunnen de lijnrechters de gepaste schakelaar overhalen om de fout visueel aan te duiden op de lampwand

Als alles correct verlopen is moet de data ook kunnen uitgelezen worden op een PC met twee schermen (1 per parallelle baan dus) met daarop de tijden :
hoeveel te laat was de eerste hond sinds de groene startlamp aanging...
hoeveel tijd zat er tussen de eerste hond zijn sensorlijn UIT en de 2de hond zijn sensorlijn IN
hoeveel tijd zat er tussen de 2de hond zijn sensorlijn UIT en de 3de hond zijn sensorlijn IN
hoeveel tijd zat er tussen de 3de hond zijn sensorlijn UIT en de laatste hond zijn sensorlijn IN
hoeveel is de totaaltijd voor de vier honden samen
hoeveel kruistijd was er voor alle vier de honden (dus het tekort van de start + de tekorten van de drie daaropvolgende honden)

hieronder een link naar de bedoelde hondensport http://www.youtube.com/watch?v=OqEpc2AvF8k


Tot zover de uitleg over wat de te overwinnen moeilijkheden zijn.
Nu is mijn vraag :

Kan ik dit volledig aansturen via Arduino componenten en shields?
En welk Arduino board zou ik best aanschaffen hiervoor?
Ik moet namelijk tijdsmeting uitvoeren (en terugkoppelen naar een PC), LED strips in RGB aansturen, fotosensors detecteren, en manuele schakelaars detecteren die dan weer de LED strips moeten aansturen
Bestaat er een mogelijkheid om de resultaten via android op tablets te krijgen met een Arduino?
Kun je een scheidsrechter een afstandbediening laten gebruiken om de startprocedure in gang te zetten met een Arduino?

MVG,
Yves

robtillaart

#1
Oct 04, 2013, 03:28 pm Last Edit: Oct 19, 2013, 12:37 am by robtillaart Reason: 1
Tijd registratie is geen probleem, het aantal IO lijnen dat gemonitord moet worden lijkt me ook te overzien.

Quote
Als er een hond onderweg een fout begaat (bvb bal laat vallen, of naast de baan terugkomt), dan dient er een welbepaalde kleur van lamp op te lichten (1ste hond - rood, 2de hond - blauw, 3de hond - geel, en tenslotte 4de hond - groen.
Dit wordt door lijnrechters op beide banen nagezien, en de foutlampen moeten manueel kunnen aangezet worden met een eenvoudige schakelaar per hond.


Moet de arduino dit ook registreren?

In elk geval zou ik een - http://www.ladyada.net/make/logshield/ - aanschaffen zodat logging naar SD kaart kan .
Een LCD voor de scheidsrechterstafel

Ik denk dat je per baan een Arduino UNO nodig hebt zo even een twee drie.
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

YvesD

Hoi Rob,

alvast bedankt voor het vlotte antwoordje

op je vraagje in de quotes :

Neen, als er een hondje in de fout gaat (naar een andere baan, zonder bal door de sensors komt, of gewoon naast de baan terugkomt naar de geleider) dan bedienen de lijnrechters, die elk hun eigen baan in de smiezen houden, een schakelaar waardoor de voor die hond bedoelde lamp oplicht.

Nu is het zo dat deze sport erin bestaat, om met vier honden, een foutloos parcours te lopen.
Dwz, als er honden in de fout gegaan zijn (en "hun" licht aan is), dat ze ogenblikkelijk teruggstuurt worden, nadat de laatste van de vier honden (al dan niet foutief) binnen is gelopen door de sensors.

Zo kan je met beginnende teams, met nieuwe honden, best wel een mooie kerstverlichting hebben, totdat alles correct gelopen is.

Tot zover de uitleg omtrent de fouten.

Nu, ik ben echt een totale nieuweling in het Arduino verhaal, maar ik zie vooral de uitdaging zitten in het leren kennen van de verschillende mogelijkheden, en ik heb best wel wat jaartjes ervaring met programmeren (vroeger foxbase & clipper, nadien Pascal, Delphi en nog later PHP, alles via zelfstudie geleerd, en uren plezier aan beleefd  :) )

Ik zit te popelen om weer eens m'n tanden in zo'n totaalproject te zetten, goed wetende dat ik vaker een stap achteruit ga zetten dan voorwaarts  :smiley-red:

Hoe kan ik best zo'n project starten? Een goed model van Arduino boardje aanschaffen (ik had gedacht aan een MEGA, omdat die nogal veel I/O's heeft, of is dit een stap te hoog voor een beginner?)
Dan de programmeeromgeving gaan ontdekken, en vooral veel opzoeken en leren uit andere projecten, zoals ik vroeger altijd al gedaan had. Trouwens bestaan er eigenlijk naslagwerken over Arduino toepassingen, of is alles via het web na te lezen (Functions, Libraries, en dergelijke)

Zoals ik eerder al vermelde, ik zal waarschijnlijk nog wel vaker eens met vragen op dit forum belanden, maar de uitdaging is te mooi om te laten liggen....

Grtz,
Yves

robtillaart

#3
Oct 05, 2013, 08:09 pm Last Edit: Oct 05, 2013, 08:54 pm by robtillaart Reason: 1
Hoi Yves,

ik zou zelf beginnen met een UNO en een bak LEDs en weerstandjes en een paar button's en 3 avonden door de tutorial sites gaan om wat na te bouwen om zo de ins en outs van de Arduino extensies tbv HW aansturingte leren. IN de tutorials
- http://arduino.cc/en/Tutorial/HomePage -
zitten zoveel snippets code die bruikbaar zijn dat je heel veel herbruikbare stukjes ziet.

Omdat timing in je code zo belangrijk is moet je Blink without delay kunnen dromen. Dat is in feite niets meer dan hoe kan ik meerdere taken zeer kort na elkaar doen zonder dat ik de Arduino blokkeer.

Een stukje voorbeeldcode (want ik vind het een leuke sport omdat de honden er plezier in hebben)

Code: (incompleet maar toch) [Select]

//
//    FILE: dogRaces.ino
//  AUTHOR: Rob Tillaart
// VERSION: 0.0.01
// PURPOSE:
//    DATE:
//     URL: http://forum.arduino.cc/index.php?topic=191458.msg1417059#msg1417059
//
// Released to the public domain
//

// STATE
#define IDLE          0
#define START_RED     1
#define START_ORANGE  2
#define RUN           3

int state = IDLE;


// COLOR LEDS
#define RED     0
#define ORANGE  1
#define GREEN   2
#define WHITE   3

int dogCount = 0;  // aantal honden op de baan
int dogsReady = 0; // aantal honden binnen

uint32_t redLedTime = 0;
uint32_t orangeLedTime = 0;
uint32_t startTime = 0;


void setup()
{
  Serial.begin(115200);
  Serial.println("Hondenrace 0.0.01");

  waitForStart();

  redLedTime = millis();
  do_led(RED);
  state = START_RED;
}

void loop()
{
  if ((state == START_RED) && ((millis() - redLedTime) > 800))
  {
    do_led(ORANGE);
    orangeLedTime = millis();
    state = START_ORANGE;
  }
  if ((state == START_ORANGE)  && ((millis() - orangeLedTime)  >  800))
  {
    do_led(GREEN);
    startTime = millis();  // officiele begintijd, de hond mag aanlopen
    state = RUN;  // hond mag nu rennen
  }

  // DETECTORS
  if (checkSensorLijnIn() == true)  // hond vertrokken
  {
    if ( state != RUN)  // te vroeg vertrokken
    {
      do_led(WHITE);
    }
    if (state == RUN)  // hond vertrokken
    {
      dogCount++; // aantal dogs in de baan
      if (dogCount >= 2)
      {
        // te vroeg vertrokken !! ring de alarms
      }
    }
  }

  if (checkSensorLijnUit() == true)
  {
    if (state == RUN)
    {
      dogCount--; // hond binnen gekomen
      dogsReady++; 
    }
    else
    {
      // FOUT SITUATIE
    }
  }

  if (dogsReady >=4)  // race klaar.
  {
    Serial.println(millis() - startTime);
  }

  // ETC
}

bool waitForStart()
{
  // WACHT OP KEYPRESS VAN DE JURY
  // while (readDigital(START_PIN) == LOW); // ok this is a blocking call!
  return true;
}

void do_led(int color)
{
  Serial.print(millis());
  switch(color)
  {
  case RED :
    Serial.println("\tROOD");
    // TODO SET LED PIN HIGH OR SO FOR EACH COLOR
    break;
  case ORANGE:
    Serial.println("\tORANGE");
    break;
  case GREEN :
    Serial.println("\tGREEN");
    break;
  case WHITE :
    Serial.println("\tWHITE");
    break;
  }
}

bool checkSensorLijnIn()
{
  // return (readDigital(LIJN_IN_PIN) == HIGH));
  return false;
}

bool checkSensorLijnUit()
{
  // return (readDigital(LIJN_OUT_PIN) == HIGH));
  return false;
}
// -- END OF FILE --

Bovenstaande code is verre van werkend, maar geeft je een idee hoe eea kan gaan werken voor een baan.
Voor meerdere banen moet je arrays maken.

korte telling
OUTPUT
- LED ROOD, ORANJE, GROEN, WIT  (4 outputs), LCD (I2c = 2 pinnen)
INPUT
- LIJNIN, LIJNUIT, START, RESET  (4 inputs)

1 Arduino UNO is voldoende om een baan te monitoren, cq te prototypen.
met een MEGA kun je meerdere banen monitoren, maar ik denk dat je beter per baan een autonoom systeem moet maken (in geval van failure is er maar een baan stuk, en goedkoper te vervangen.

De start en reset knop moet je naar iedere UNO sturen..

YOur turn ;)

Update: code geupdate tot een begin dat een beetje werkt. :)
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

YvesD

Hey Rob,

ik ben nog even aan het wachten op mijn bestelling (china)

Daar zit een MEGA in en ook een SMD 5050 30leds/meter RGB rolletje van vijf meter.
Ik heb nog geen goedkope dealer gevonden voor 32 fotocellen van degelijke kwaliteit, maar dat hoeft geen probleem te zijn natuurlijk.

Ik zou kiezen voor de MEGA omdat ik massa's I/O's nodig heb, en de beide banen moeten aan elkaar gekoppeld zijn voor de wedstrijdopstelling natuurlijk.

Bovendien moet ik dan nog snippets of code gaan opzoeken die de tijdsregistratie kan afwikkelen binnen diezelfde microcontroller.

Van zodra dit binnen is begin ik het prototypen.
Ga ook nog wat transistortjes kopen omdat ik moet via 12v moet sturen op de ledstrip met een externe voeding die voldoende power kan leveren.

Heb de software al gedownload, en ben al volop aan het neuzen in de snippets en zo (ook de verschillende lib's ben ik aan het napluizen...

Ik heb je opmerking gelezen omtrent de vertraging die kan optreden, is die dan zo groot mss?

Grtz,
Yves

Go Up