Styra reläer med ett webbinterface

Webbinterfacet har jag skrivit med php och det är krångligt att få till en bra USB-kommunikation därifrån. Därför valde jag en lite annorlunda väg som visar sig fungera riktig bra, även om flera skulle vara inne på samma webbsida samtidigt.

Varje kommando som användaren skickar genom att klicka på en växel eller ett spår skrivs med php in i en mysql-databas. Samtidigt har jag på min raspberry pi ett python-skript som kontinuerligt letar efter nya rader i databasen, tolkar dessa och skickar rätt kommando via USB till Arduino-kortet.

För att minska belastningen av SD-kortet sparas denna tabell i databasen enbart i minnet. Det görs med kommandot engine=memory. Nackdelen med att ha tabeller enbart i minnet är att innehållet försvinner när datorn stängs av. Men eftersom kommandos bara sparas i den en mycket kort tid, tills python-skriptet har läst och tagit bort raden ut tabellen, är det i det här fallet inget problem.

För att få till en bra svarstid fick jag göra en liten anpassning på Arduino-kortet. Dels kommunicerar jag med 115200 baud (standard är 9600) och så satte jag den seriella timeouten till 50ms, standard är 1000ms.

void setup() {
Serial.begin(115200);
Serial.setTimeout(50);


}

Skillnaden mellan 9600 baud och 115200 baud märks faktiskt inte, mina kommandos är bara några enstaka tecken. Däremot blev det stor skillnad när jag ändrade Serial.setTimeout till 50ms. Denna tid specificerar hur många millisekunder Arduino-kortet fortsätter väntar på data efter att sista tecknet har tagits emot. Med andra ord, sålänge den var satt till 1000ms blev det alltid en fördröjning på 1s mellan att kommandot skickades tills den utfördes. Med 50ms, som fortfarande är tillräcklig lång, känns det som ingen fördröjning alls.

Skuggbangårdens styrsystem

Själva styrsystemet inklusive ett webbgränssnitt till skuggbangården är numera på plats. Min Raspberry Pi används både som webserver och som huvudcontroller till det USB-anslutna Arduino-kortet, som i sin tur ställer reläerna till växlarna och spåren samt skickar tillbaka information om vilka spår som är upptagna och vilka som är lediga.

 Stora reläkortet med de blåa kablarna och totalt 16 reläer uppe till vänster på bilden används för att styra växlarna. Det lite mindre med röda kablar och 8 reläer nedanför styr strömmen till de 7 spåren. Det lite ensamma reläet är min huvudströmbrytare som slår på eller av all ström till loken för hela skuggbangården. Det kan till exempel användas som nödstopp ifall man vill stoppa ett eller flera tåg oberoende på var de befinner sig. Det lilla kortet längst nere till höger är egentligen bara en strömfördelare.

Det mest spännande kortet, i mitten, består av 2 stycken 16-kanal multiplexer (74HC4067), ett 8-bitars skiftregister (74HC595), en Arduino Nano samt några motstånd och kopplingstrådar. Jag har använd mig av både multiplexer och 74HC595 dels för att lära mig båda teknikerna och dels för att de har sina för och nackdelar. Ena multiplexer används för att styra reläerna till växlarna och det andra för att kunna koppla in upp till 16 analoga sensorer/värden (0-5V) till en analog ingång. 8-bitars skiftregistrer styr reläerna till spåren. Nackdelen med multiplexern jämfört med skiftregistret är att de kräver fler digitala utgånger från Arduinon samt att bara ett relä kan vara aktiv åt gången. Med skiftregistret kan flera reläer vara aktiva samtidigt, vilket är trevligt om man vill sätta på eller stänga av elen till flera spår oberoende av varandra. När det gäller växlarna så är det fullt tillräckligt att bara kunna styra ett relä åt gången. För att styra en växel slår jag på ett relä, väntar 100ms, och stänger sedan av reläet igen. 100ms är mer än tillräcklig med tid för växlarna att reagera och växla enligt önskemål.

Planeringen av skuggbangården

Jag tänker bygga anläggningen från det lägsta nivån uppåt. Det betyder att det första som ska byggas och utvecklas är skuggbangården under anläggningen. Denna förvaringsplats för tåg kommer ha 7 stycken spår. På grund av platsbristen kommer det inte vara 7 parallella spår utan först 4 parallella och sedan 3 parallella.

De röd markerade växlarna kommer vara elstyrda och den icke-markerade växlarna kommer vara handväxlar. Det är bara de elstyrda växlarna som måste kunna styras i normal drift. De gröna siffrorna är spårnumreringen.

Jag kommer inte använda mig av några ställpult för att styra växlarna eller elen i spåren utan en för skuggbangården dedikerat Arduino Nano kommer vara ansvarig för detta. Denna Arduino kommer kopplas med USB till huvudstyrenheten, min Raspberry Pi. Arduinon kommer i sin tur styra reläer, som är kopplade till spåren och växlarna. Totalt kommer det behövas 2×7=14 reläer till växlarna samt 7 stycken till spåren. Det finns färdiga reläkort med 1, 2, 4, 8 och 16 stycken reläer att köpa och jag ska använda ett med 8 och ett med 16 stycken reläer. På bilden nedan syns ett kort med 16 stycken reläer:

Första inlägget

Hej och välkommen!

Det här är bloggets första inlägg och därmed starten av dokumentationen av min nya Märklin tåganläggning som jag tänker bygga. Denna anläggning byggs i z-skalan, vilket är Märklins minsta.

Förutom en väl fungerade tågtrafik på flera nivåer är tanken att växlarna, signalerna och alla andra spår ska styras genom ett webinterface. Själva centralenheten kommer vara en Raspberry Pi 3 som i sin tur är kopplat till både Arduinos och annan hårdvara.  Jag valde den senaste Raspberry Pi på grund av dess inbyggda WLAN-kortet.

Tanken med bloggen är att dokumentera bygget av själva tåganläggningen såväl som både mjukvaran och hårdvaran för att styra denna.