Go Down

Topic: Electronisch Jurerings Systeem (Read 19854 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

robtillaart

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

als je alles non-blocking codeert praat je over microseconden, dus niet noemenswaardig.  Als je blocking code hebt (bv delay(100)) dan kan de Arduino niks anders doen.

Ik neem aan dat de timing van de race in hondersten van seconden gebeurt?
Rob Tillaart

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

YvesD

Hey Rob,

De timing gebeurt in duizendsten (USA) maar bij ons in Europa op honderdsten.
Maar duizendsten zou ik wel leuk vinden, als ik de handel niet teveel vertraag daarmee.

Nog eens een vraagje, kan je Arduino's clusteren?

Bvb 2 Mega aansturen door een Uno of zo, ik heb zo eens zitten kijken naar wat ik van I/O's nodig heb voor twee banen, en ik moet zeggen dat ik quasi uit m'n stoel donderde...ik kom met één Mega net toe om één baan de monitoren  :smiley-roll-sweat:

Ofwel moet ik m'n ledstrip met DMX aansturen, dan kan ik 12 digitale I/O's uitsparen per baan :

1 strip/sectie die enkel wit wordt bij een fout - = 3  I/O's PWM
1 strip/sectie die rood word bij de startprocedure, en eveneens rood bij een fout van de allereerste hond - = 3  I/O's PWM
1 strip/sectie die geel/oranje wordt bij de startprocedure, maar blauw bij een fout van de 2de hond - = 3  I/O's PWM
1 strip/sectie die geel wordt bij de start procedure, en geel wordt bij een fout van de 3de hond - = 3  I/O's PWM
1 strip/sectie die groen wordt bij de startprocedure, en groen wordt bij een fout van de vierde hond - = 3  I/O's PWM

Grtz,
Yves

PS : hieronder een attach. met de startprocedure (en ook een foutieve start, een hond gaat door de sensors vooralleer de groene led oplicht)

robtillaart


Ik verwacht dat timing in millis() te doen moet zijn. Het uitlezen van een digital pin gaat in een paar usec

je moet de leds in die strips tegelijk schakelen (parallel, MOSFET transistor),
alle LEDS in een strip moeten zich toch hetzelfde gedragen? Dat scheelt je een factor 3.

En waarom moeten ze PWM zijn? is gewoon aan/uit niet voldoende?
Of wil je ze laten knipperen? zo ja met welke frequentie?

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 heb eens een soort schema gemaakt

Je hebt wel gelijk natuurlijk dat de strips absoluut niet hoeven te knipperen, maar de SMD 5050 strip moet je toch aansturen met pulsen die de waarde van de RGB-mix bevatten? Kun je dit dan ook analoog???

Als je de kleuren analoog kan aansturen, sommige strips dus 2 kleuren maximaal, dan spaar je idd best wat pins uit.

Grtz,
YVes

robtillaart

OK RGB LEDS, dat had ik even niet meegekregen.
Dan heb je wel pinnen nodig, maar ik zou er geen PWM doen, gewoon aan/uit dan kun je al 8 kleuren, toch?
Rob Tillaart

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

YvesD

Hey Rob,

net een mooi product gezien :
http://www.aliexpress.com/item/5M-5050-RGB-SMD-WS2811-IC-WS2812-Individually-Addressable-Dream-Color-LED-Strip-Light-DC5V/911123127.html

met deze strip kan ik dmv vier data pinnen elke LED afzonderlijk aansturen, dus ik kan clusters programmeren die dan elk hun eigen kleur krijgen.
http://www.youtube.com/watch?v=oatrUnDsB2w

in de video werkt die mens ook met een MEGA, en hij heeft best nog wel wat pinnen vrij op die manier...

ben nu op zoek naar de goedkoopste dealer....

Grtz,
Yves

BTW Rob kan ik jou PM'en via dit forum?

MAS3

Rob kan prima voor zichzelf spreken, maar hij heeft niet voor niets de volgende opmerking onder al zijn posts staan:
(Please do not PM for private consultancy)
Dat betekent dus dat ie het niet op prijs stelt als mensen 'm gaan PM'en.
Er zijn verder ook weinig vragen die niet op het forum behandeld kunnen worden.
Bovendien hebben anderen ook wat aan jouw vragen en de antwoorden daarop op het forum, das nou juist de kracht van zulke forums.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

YvesD

Hey MAS3,

sorry daarvoor,

ik had daar eigenlijk gewoonweg niet op gelet  :smiley-red: , ik had enkel oog voor datgene wat Rob schreef

Uiteraard heb ik daar respect voor en zal mij daar dan ook aan houden ...

Grtz,
Yves

robtillaart

Hoi Yves,

de led strip ziet er heel mooi uit.

Quote
ben nu op zoek naar de goedkoopste dealer....

goedkoop in geld of in tijd?

Ebay is vaak het goedkoopst in geld, maar kan soms 4 weken of meer duren voordat je iets in huis hebt.

bij een van de shops in NL hebben ze - https://www.iprototype.nl/search?search_string=led+strip, - op voorraad en heb je het binnen een werkdag,

en hier meer keus
- http://floris.cc/shop/en/search?orderby=position&controller=search&orderway=desc&search_query=led+strip -
maar die zijn een weekje dicht


Rob Tillaart

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

YvesD

Hey Rob,

hihi, in geld natuurlijk  :)

Maar ik ga het bij de chinezen houden, het duurt wat langer, maar ik heb voor een klein beetje meerprijs 4 of 5 meter ipv hier in de benelux 1 meter.

Wat ik wel ga doen in afwachting van de levering is het volgende kopen :
http://www.adafruit.com/products/1426
die zijn spotgoedkoop, vlot verkrijgbaar in België, en voor m'n prototyping meer dan geschikt (dan hoef ik ook nog niet ineens een speciale voedingslijn voorzien voor de strip)

Ik heb ook nog eens een post geplaatst op het internationale gedeelte met de vraag of ik nu een AT 2560 mega alleen kan gebruiken, of als ik best uitkijk naar bvb 2 UNO's en 1 MEGA 2560, en vooral als je daar in master/slave mee kan werken.

Als ik zo begin rond te kijken wat ik allemaal nodig heb (of beter : zou willen implementeren) dan ga ik nog serieus wat pinnen nodig hebben vrees ik, temeer omdat ik totaal geen ervaring heb met I2C uitbreidingen en zo (heb er daarnet wat over nagelezen op het forum, en ik moet zeggen het ging eventjes m'n petje te boven)  :smiley-roll-sweat:

NIettegenstaande dat zou ik toch het project willen binnen een bepaald budget houden natuurlijk....  :)

Grtz,
Yves

Go Up