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.