Matrixsignaalgever
"Matrixbord"
Meh, ik snap niet waarom we die dingen matrixborden noemen. De lichtpunten zitten niet in 'n matrix. Enfin, voor info over wat het is en hoe het normaliter gebruikt wordt, zie het artikel over matrixsignaalgevers op de Wegenwiki.
Hoe komen we eraan?
Het schijnt een prototype te zijn, een model dat om een of andere reden niet goed genoeg was voor boven de weg. Althans, dat is de overlevering; we hebben 'm gekregen van Duitse hackers tijdens het CCCamp in 2015 en meer informatie dan dit hadden ze niet.
Arduino source
https://github.com/revspace/signaal/
De code doet niks anders dan continu nieuwe beelden sturen. Haal je de spanning van de arduino af, dan blijft het matrixbord zelfstandig het laatstgekozen beeld tonen.
Booten van het matrixbord (230V) duurt trouwens een paar minuten.
NB: Deze arduino zit uiteraard niet standaard in het matrixbord, maar bij gebrek aan wegkantsysteem (WKS) moesten we iets anders hebben dat 'm aanstuurt.
Protocol
Het ding wordt aangestuurd via een geadresseerde bus, maar intern gaat dat verder als 5V TTL serieel op 9600 baud. Periodiek wordt de status teruggemeld in een bericht van 10 bytes. De eerste byte is steeds 0x59, de laatste byte is een simpele XOR-checksum. We slaan de veldbus over en hebben alleen gewerkt met de interne TTL, want dat is makkelijker en genoeg om beelden tevoorschijn te toveren.
Door middel van "cat /dev/urandom | tee random.log > /dev/ttyUSB0" en een beetje geluk hebben we het protocol om plaatjes tevoorschijn te toveren uitgepluist. Ook hierbij is de eerste byte 0x59 en de laatste byte een XOR-checksum, maar daartussen zitten slechts 6 bytes voor de parameters. Met brute force hebben we de volgende info gevonden:
Bytenummer | Waarde | Gegokte betekenis |
---|---|---|
0 | 0x59 | Commando |
1 | 0x08 | ?? Bij de meeste waarden krijg je het beeld heel even, maar gaat het direct weg. Als bit 4 aanstaat (8), blijft het beeld staan. |
2 | 0x00 - 0x14 | Helderheid. Maar dimmen is nog vervelender dan felle leds want het apparaat PWM't irritant traag. |
3 | 0x01, 0x02, 0xff | Type. 1 voor snelheid, 2 voor rijstrookdingen, 255 voor de overig |
4 | 0x00 | ?? |
5 | Snelheid: 50, 70, 80, 90, 100, 120 Rijstrook: 1=↙, 2=↘, 3=↓, 4=× |
Te tonen beeld |
6 | 1=normaal, 2=gele flashers, 3=rode rand | Modifier; niet alle combinaties zijn mogelijk (bijv. ↓ in een ○ kan niet). Als de flashers aanstaan, is dat altijd 0,6 s boven, 0,6 s onder en 0,8 s uit. |
7 | ... | XOR-checksum van voorgaande bytes |
Review
Dit exemplaar lijkt ongeschikt voor het echte werk. De frontplaat is niet waterdicht (hoewel in de rest van de behuizing alles keurig waterdicht gemaakt is), de 5mm leds prikken gewoon door gaatjes heen. Er zit een knopje in waarmee je door de mogelijke beelden kunt cyclen, maar daarmee kun je ook verwarrende onmogelijke beelden krijgen die boven 'n snelweg vast tot ongevallen leiden. Het dimmen gaat via een dermate trage PWM dat compleet desoriënterend is voor iemand die daar gevoelig voor is.
Overigens heeft ie ook een demomodus die elke 5 seconden een nieuw beeld laat zien, waarin blijkbaar alleen zinnige beelden zitten. Die kun je activeren door dipswitches te veranderen. Interessant is dat de flashers in de demomodus een andere snelheid hebben dan in het echt (veel sneller).