Treindetectie met een Raspberry Pi Zero

Het probleem van hoe een trein te detecteren blijft me bezighouden. Eerder heb ik dit al geprobeerd met barcodes, Hall-sensoren en ultrasoon geluid. Hiervan werkt alleen de oplossing met Hall-sensoren, maar die heeft weer als nadeel dat je ze in de baan moet inbouwen.

Mijn nieuwe poging is om een bewegende trein te laten detecteren door een videocamera. Dit klinkt ingewikkeld en vooral duur, maar dat valt op zich wel mee.
Wat je nodig hebt is een Raspberry Pi Zero W, die koop je voor zo’n 10 tot 15 euro, bijvoorbeeld hier. Bij AliExpress koop je een camera voor een paar euro. Let wel op dat je eentje koopt die voor de Zero geschikt is, de aansluiting is anders dan op een ‘normale’ Raspberry Pi.
Ook heb je wellicht nog wat kabeltjes nodig om een muis, toetsenbord en monitor aan te sluiten. Dat is uiteraard niet meer nodig als alles klaar is, maar tijdens de bouw wel. Let op dat er een micro-usb aansluiting zit op de Zero voor muis en toetsenbord, en een mini-hdmi voor de monitor. Er zijn wel leuke aanbiedingen te vinden waarbij je alles in een keer koopt.
Ook heb je een micro-sd-kaart nodig. Liefst eentje van 32GB of meer. En let op: dat kaartje MOET geformateerd worden met FAT32 en dus NIET exFat of NTFS!

Als je alle spullen verzameld hebt kan je beginnen de software te installeren.
– Download Raspbian Stretch full version.
– Pak dit bestand uit, je hebt nu een .img bestand
– Zet deze image op je sd-kaart, bijvoorbeeld met balenaEtcher.
– Start je Raspberry Pi Zero met deze sd-kaart, en volg de instructies
– Start een terminal en type ‘sudo raspi-config’, en kies bij de advanced options de eerste optie om het geheugengebruik te optimaliseren. Bij de interfacing options kies je ook weer de eerste optie om de camera te activeren. Herstart hierna je Raspberry Pi Zero.
– Installeer OpenCV door weer een terminal te starten en een script te downloaden:wget http://www.alexkwak.nl/rpz/install_cv3.script. Maak dit script uitvoerbaar door: chmod a+x install_cv3.script. En voer het uit: ./install_cv3.script. Meer info vind je hier.
– Installeer de module imutils door: pip3 install imutils.
– Download nu de demo van het bewegings-herkenningsprogramma: wget http://www.alexkwak.nl/rpz/motion_detector.py en start deze met python3 motion_detector.py. Meer info vind je hier.

Dit is de basis voor (trein)detectie. In een volgend artikel zal ik ingaan op de verdere uitwerking.

Autootjes…

Niet alleen materieel op rails is nodig voor een baan, aankleding met auto’s moet natuurlijk ook.

Gisteren naar een modelautobeurs geweest, en daar voor een heel schappelijk prijsje flink wat kunnen aanschaffen

Geluid met Arduino

Stationsgeluiden, de bellen bij een overweg, enz enz.
Hartstikke leuk natuurlijk om die ook te laten horen op de baan. En dat moet dan toch kunnen met een Arduino? Ja, maar niet zonder slag of stoot…

Het probleem is dat er geen eenvoudige manier is waarmee je ‘gewoon’ een MP3 of WAV aan kunt bieden en dat die dan afgespeeld wordt.
Wat ik uiteindelijk heb gebruikt is https://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio. Probleem daarmee is dat er nogal wat onduidelijkheden staan op die site. Ik zal hier mijn bevindingen plaatsen:

Allereerst heb je iets nodig om je geluidsbestanden op te plaatsen: een SD-kaart. Ik heb deze bij AliExpress aangeschaft: https://nl.aliexpress.com/item/1PCS-Micro-SD-Storage-Expansion-Board-Mciro-SD-TF-Card-Memory-Shield-Module-SPI-For-Arduino/32523546123.html

SimpleSDAudio leest NIET het bestand dat opgegeven wordt, maar zoekt de eerste sector op de schijf op en leest daarna domweg de volgende sectoren. Als een bestand gefragmenteerd is werkt dit dus niet. Oplossing: formatteer je SD-kaart, en plaats je bestanden. Nieuw bestand toevoegen? Geen probleem…. totdat je ook een keer een bestand hebt verwijderd 🙁

SimpleSDAudio leest geen MP3 of WAV(!), maar alleen een raw-bestand dat in feite per byte het volume weergeeft. Door dat 31250 keer per seconde te doen krijg je geluid.
Zo’n raw-bestand maak je met het meegeleverde ‘sox’. Het commando dat ik gebruik en goed werkt is:

sox spoor12.mp3 --norm=-1 -e unsigned-integer -b 8 -r 31250 -c 1 -t raw converted/spoor12.raw

Let er ook op dat bestandsnamen aan de prehistorische eis van maximaal 8+3 karakters moet voldoen.

Hierna is het een kwestie van een kleine sketch maken:

#include <SimpleSDAudio.h>

void setup() {
SdPlay.setSDCSPin(4); // sd card cs pin
SdPlay.init(SSDA_MODE_HALFRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER);
play("ding.raw");
play("spoor12.raw");
}

void loop(void) { }

void play(String file) {
SdPlay.setFile(file.c_str());
SdPlay.play(); // play music
while (!SdPlay.isStopped()) { }
}

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.

Ballast

Een tijd geleden had ik al de nodige ballast gekocht van Woodland. Hiermee heb ik bijvoorbeeld de brug gedaan. Op zich is deze ballast heel er mooi: de structuur lijkt goed op de echte ballast, en de kleur is ook mooi.

Maar… het verwerken vind ik tegenvallen. Om het vast te leggen gebruik ik transparant opdrogende voorstrijk. Die zou makkelijk in de ballast moeten vloeien, maar dat gebeurt dus niet. De druppels blijven eerst een tijdje liggen voordat deze eindelijk in de ballast trekken. Hierdoor ontstaat een soort maanlandschap, niet mooi dus.

Toevallig moest ik ook een paadje aanleggen en gebruikte ik hiervoor een soort ballast van Busch. En dat werkte echt vele malen beter! Dus op naar de winkel en het laatste zakje Busch 7070 ballast gekocht. Net zo’n mooie kleur, alleen is de korrel wat meer afgerond waardoor het net wat minder echt lijkt. Het zij zo.

De ‘oude’ laag Woodland is inmiddels verwijderd (met spiritus, gaat prima) en nu verder bezig de nieuwe laag te leggen.