Verkeerslichten met een Arduino

Had ik al gezegd dat knutselen met een Arduino verslavend is? 🙂
Nu in een uurtje een verkeerslicht gemaakt. Nou ja, de vekeerslichten zelf zijn nog in bestelling bij AliExpress, dus maar even een paar seinen gepakt. Vandaar dat groen boven zit enz.
De sessie start met knipperend oranje. Dan klik ik op een knop op de PC en gaan even alle lichten op rood, waarna de normale groen-oranje-rood cyclus wordt doorlopen, net zo lang tot ik weer op de knop klik. Dan gaat na afloop van een cyclus even alles op rood, om daarna weer oranje te gaan knipperen.

Voor meer info zie ook http://www.alexkwak.nl/elektronica/spelen-met-arduinos/

Spelen met Arduino’s

Arduino’s zijn kleine computertjes, waarmee je heel eenvoudig zaken aan kunt sturen.

Zo had ik een tijd geleden een mini-display aangeschaft, en ben er vandaag eens voor gaan zitten om hiermee een stations-informatiebord te maken. En dat was binnen een uur gepiept. Ook de koppeling met de PC is eenvoudig gemaakt. Met een klik van de muis verandert de tekst op het display:

Wil je dit zelf doen? Dat kan eenvoudiger dan je wellicht denkt.
Wat heb je nodig:
1) Een Arduino Uno, ongeveer 3 euro, bijvoorbeeld https://nl.aliexpress.com/item/Free-shipping-UNO-R3-MEGA328P-with-usb-cable-for-Arduino-Compatible-Dropshipping/32241225914.html
2) Een display, ongeveer 2 euro, bijvoorbeeld deze: https://nl.aliexpress.com/item/1pcs-0-96-yellow-blue-0-96-inch-OLED-module-New-128X64-OLED-LCD-LED-Display/32637614958.html
3) Wat kabeltjes, ongeveer 1 euro: https://nl.aliexpress.com/item/40PIN-Dupont-Lijn-10-cm-20-cm-30-cm-Male-naar-Male-Vrouwelijke-naar-Mannelijke-en/32891879068.html Voor dit project heb je alleen male-female nodig, maar als je toch besteld, bestel dan van alles wat.
4) Een USB-kabel, type A naar type B, ongeveer 1 euro: https://nl.aliexpress.com/item/Hoge-Snelheid-Transparant-Blauw-USB-2-0-Printer-Kabel-Type-A-Male-naar-B-Male-Dual/32845453952.html
5) De code, gratis. Ik heb een voorbeeld gemaakt voor een ‘sketch’ (=programma) voor de Arduino dat twee verschillende teksten kan schrijven op het display, en een C#-programma dat een commando vanaf de Windows-PC naar de Arduino kan sturen zodat je onder andere kan wisselen van tekst. Je vindt die code op deze pagina.

Installeer de Arduino-IDE (https://www.arduino.cc/en/main/software). Open de Arduino-sketch van punt 5 hierboven. Selecteer in de Arduino-IDE het juiste apparaat en de juiste com-poort, en upload de sketch.
Verbind het display met de Arduino:
SDA -> A4
SCK -> A5
VDD -> 3.3V
GND -> GND
Je moet nu het eerste scherm al op het display zien. Herstart eventueel de Arduino.

Installeer nu Visual Studio van Microsoft (https://visualstudio.microsoft.com/downloads/, gratis!) en open het C#-project van punt 5 hierboven. Voer deze uit en in het scherm dat verschijnt select de juiste com-poort en stuur commando 254. Als antwoord moet je dan krijgen: “4;Arduino Uno;NS board”.
Stuur commando 253 en de tekst op het display zal wijzigen.

LPS, Local Positioning System

Het blijft me bezighouden: hoe bepaal ik de positie van treinen en wagonnen. Dus opnieuw een idee uitgeprobeerd: met behulp van ultrasoon geluid!

Nu klinkt dat [pun intended] misschien wat raar, maar geluid gaat met een snelheid van ‘slechts’ zo’n 340 meter per seconde. Dus 34cm per milliseconde. En als je je bedenkt dat een Arduino zo ongeveer op de microseconde kan meten, dan weet je dat in principe een positiebepaling door het verschil wanneer een geluidspuls vanaf een loc bij verschillende ontvangers aankomt te meten, ook de daadwerkelijk positie heel redelijk bepaald kan worden. Eigenlijk wat een GPS-ontvanger ook doet, maar dan op kleinere schaal en met geluid in plaats van radio-golven.

Maar helaas, een eerste test verliep niet goed. Bij onze grote vriend AliExpress een stuk of wat ultrasone tranceivers gekocht, en daar mee aan het experimenteren.

Helaas blijken deze jongens heel erg richtingsgevoelig. Als je er net naast mikt wordt er meteen helemaal niets meer ontvangen. En dan wordt in de praktijk vrijwel geen enkele puls die vanaf de loc wordt verstuurd daadwerkelijk door een ontvanger ‘gezien’.

Op zoek naar een andere oplossing…

220V voorziening

Toch maar een keer alles wat met 220V te maken heeft op één plank gemonteerd. Bovenaan een kunststof behuizing met aansluitingen voor een apparaatstekker, de noodschakelaar, twee stopcontacten waarvan er een geschakeld wordt via de noodschakelaar en de andere -voor de pc- niet, en twee aanluiten naar de gelijk- en wisselstroomvoedingen.

Detectie

Om te detecteren waar een trein zich bevindt heb ik gekozen voor Hall-sensoren die tussen de bielzen geplaatst worden. De treinen en wagonnen worden voorzien van magneten, zodat elke Hall-sensor een signaal afgeeft zodra een trein of wagon over de sensor rijdt.

Per detectiepunt zijn er twee sensoren, zodat ook de beweegrichting bepaald kan worden.

En het werkt! Let op het led’je boven in beeld dat even aan gaat op het moment dat de wagon over de sensor beweegt:

 

Weer iets verder…

De Electronica-bak is weer iets verder, en de eerste vijf wissels zijn aangesloten.

Ongeveer een uur kwijtgeraakt aan een defecte trafo, maar na een paar uurtjes zweten heb je dan ook wat.

Een bak aan electronica…

De electronica voor de automatisering heeft ook ruimte nodig. Hiervoor heb ik een houten bak gemaakt met als bodem vrij dun triplex. Hierdoor is het lichtgewicht en kan er toch her en der iets met boutjes in vast gezet worden.
De bak wordt met onder de baan tegen de wand bevestigd, met scharnieren zodat ik ook nog bij de onderkant kan om de boutje aan te draaien.

Rechts tegen de wand van de doos zie je de USB naar I2C-convertor. Dit is het punt waar de PC met het geheel verbonden wordt.
De uitgang van de I2C gaat naar twee blokken van elk 16 relais. Deze bedient straks de wissels en ontkoppelrails.
Links zie je een gevoede USB-hub die zorgt voor de voeding van het I2C-gebeuren.

Een rij bedieningen voor de seinen is het volgende dat wordt toegevoegd.

De baanbesturing

Om de baan te kunnen besturen is niet alleen software nodig, maar ook een scherm om het programma op te kunnen tonen.

De bediening met een muis is lastig , maar op Marktplaats.nl heb ik een touchscreen-monitor op de kop kunnen tikken.

Baandetectie via Barcode

Een andere idee voor baandetectie is het plakken van een barcode onder elke loc en/of wagon, en in de baan met behulp van een IR-led en IR-ontvanger die barcode van een rijdende trein uitlezen. Ik heb dit nog niet uitgeprobeerd, maar al wel wat ideeën hier over:

  • De barcode mag niet symmetrisch zijn. Dat wil zeggen, je moet kunnen detecteren welke kant de loc op rijdt.
  • De barcode moet groot genoeg zijn voor een goede detectie

Baandetectie via RFID/NFC

Een tijdje geleden had ik het idee via Near Field Communication (NFC, https://nl.wikipedia.org/wiki/Near-field_communication) te detecteren waar een trein zich op de baan bevindt. Het idee is dan dat elke loc (en eventueel zelfs elke wagon, RFID-chips kosten vrijwel niets meer) een RFID-chip aan boord heeft. Onder de baan bevinden zich dan de uitlezers, en die geven hun info dan weer door aan de centrale computer die op basis van die gegevens de seinen, wissels etc aan kan sturen.

Helaas blijkt dit vooralsnog niet te werken. Het detecteren van de chip van de rijdende trein is niet betrouwbaar genoeg. En dan houdt het eventjes op 🙁