Projects/Dagobert

From Bitlair
Jump to: navigation, search


DagobertDisplay.jpg
Project Dagobert
Name Dagobert
Start 2017/03/15
End
Contact Linor, Vuurtorenjeroen
Website https://github.com/bitlair/dagobert
Information Administratiesysteem voor Lasercutter
Status Production


Intro

Recent is er een fundraiser gestart om weer een nieuwe buis voor de Lasercutter te kopen. Reden voor deze 'crowdfunding' is dat er niet voldoende geld op het bank account van de lasercutter is gekomen om een nieuwe buis aan te schaffen. Dit is deels te wijten aan de korte levensduur van onze afgelopen buizen, maar ook doordat niet al het gebruik goed is bijgehouden.

Om dit in de toekomst te voorkomen, en omdat de vooruit betaalde uren van de fundraiser ook goed bijgehouden moeten worden ben ik begonnen aan een automatische registratie van de gebruikte tijd, vergelijkbaar met Graaf Tel van Revspace. Als uitbreiding op dit systeem gaat gebruik gemaakt worden van de iButton van de deelnemers om de lasercutter te ontgrendelen en het gebruik van de laser te koppelen aan een persoon.

Beoogde opzet

Het bestaande safety board wordt uitgebreid met een iButton reader en aangesloten de 'laser on' en 'exhaust enable' pins op de LAOS (dit laatste is geen foutje, althans, niet van ons maar van de LAOS firmware). Hierop staat tijdens een job een PWM signaal waardoor we kunnen zien wanneer een job begint en eindigt. Daarnaast zal vanuit het safety board ook de LAOS interlock worden geschakeld. Extra toevoeging is een temperatuur sensor om de temperatuur van het koelwater bij te houden, en in een latere fase wellicht het starten van een nieuwe job bij te hoge temperatuur te blokkeren (hiervoor moet eerst data verzameld worden).

Het safetyboard zal via serieel communiceren met een Raspberry/Orange PI om unlock instructies te ontvangen, en start/stop/temperatuur events door te geven. Deze worden vervolgens na een wat permanentere plek doorgestuurd (VM?) om in de administratie te worden verwerkt, en idealiter ook rechtstreeks af te schrijven van het revbank account van de betreffende gebruiker.

Research

Laser signalen

Een van de eerste zaken die nodig was om dit systeem mogelijk te maken is dat we kunnen bepalen wanneer de laserjob begint en eindigt. Hiervoor heb ik samen met Jeroen een tweetal osciloscopen aangesloten op header pins op het LAOS board. Uiteindelijk is hier uitgekomen dat de Laser ON en Exhaust Enable pin de bruikbare PWM signalen genereren. Wat wel belangrijk om rekening mee te houden is dat de laser on ook langere tijd on kan zijn, bijvoorbeeld bij het snijden van een lijn.

iButton reader

Is al eerder gebruikt deur systeem, voor de volledigheid hier de functie van de verschillende draden:

geel gndled
groen ledgroen
wit data
bruin ledrood
grijs gnd

Temperatuur sensor

De door User:mro meegebrachte temperatuur sensor is een waterdichte versie van de ds18b20 die ook gebruikt is in de Arduino workshop. Informatie en code was hier dus ook al voor beschikbaar.

Proefopstelling

Omdat werken aan het safetyboard in de lasercutter niet handig is, en met het idee dat als het straks werkt, het niet handig is om de lasercutter buiten bedrijf te moeten stellen tijdens ontwikkelwerk (en ja, ook gewoon omdat het kan), heb ik een ontwikkel versie gemaakt van het safetyboard en componenten. De relais en andere niet na te bootsen apparatuur (zoals voedingen, ledstrips, waterkoeling e.d.) zijn vervangen door een rij met LEDs zodat makkelijk gezien kan worden welke al zijn ingeschakeld.

Simulatie van het laser gebruik wordt gedaan met een extra Arduino Pro mini, zodat de software op de Arduino Mega exact hetzelfde kan blijven als in de lasercutter zelf.

Safety board vervanging

De vervangende software voor het safety board is inmiddels geschreven. Met behulp van een state machine kunnen de volgende states worden aangenomen:

  • Locked, hier wordt gewacht op het aanbieden van een iButton
  • Unlocked, status scherm na unlocken en na afloop van een job. Bied mogelijkheid tot uitloggen en eventueel maintenance mode
  • Laser active, tijdens een laser job, heeft een teller van de verstreken tijd en de daarbij bijbehorende kosten
  • Maintenance mode, bied mogelijkheid om alle externe apparaten aan/uit te schakelen en test fires uit te voeren.

In principe zijn door een normale gebruiker zaken als afzuiging e.d. niet meer handmatig te schakelen. Dit wordt allemaal automatisch geregeld aan de hand van de state.

Serial protocol

Verbind met 9600 baud met de Arduino, deze verstuurd dan de volgende commando's (met \r\n regeleindes):

Booted Arduino ready
A<buttonid> Button met <buttonid> aangeboden
T<temperature> Water temperatuur in graden (bv 20.3)
W<waterflow> Flow van de waterpomp in L/min
S Start van laserjob
K<miliseconds> Signaal (keepalive) tijdens de laserjob, aantal seconden dat de job al actief is
E<miliseconds> Einde van de laserjob, met aantal seconden dat er gelaserd is.
M Entered maintenance mode
L Left maintenance mode

Er kunnen een aantal commando's terug gestuurd worden naar de arduino (U/F alleen tijdens de lock state, R tijdens startup), regeleinde alleen \n

U<maintenace><price><username> Unlock de lasercutter voor <username>, voor <price> in centen/minuut, <maintenance> is T of F, wat aangeeft of iemand toegang heeft tot het maintenance menu.
F<reason> Geeft een foutmelding weer tijdens het unlocken
R Orange PI klaar met opstarten

Read only filesystem

Om te voorkomen dat de geheugenkaart stuk gaat door het niet afsluiten van de OrangePI bij uitzetten van de laser is er een read-only filesystem ingesteld op de OrangePI. Basis voor deze configuratie is https://wiki.archlinux.org/index.php/Overlay_filesystem

Ter voorbereiding zijn de volgende packages geinstalleerd:

  • sysvinit-core
  • ntpdate

En de packages zijn verwijderd:

  • libpam-systemd
  • systemd
  • dbus
  • cgmanager

Zet in /etc/fstab het default filesystem op read-only. Voeg de volgende regels toe om een filesystem over het read only filesystem heen te leggen zodat alle daemons e.d. hun tijdelijke bestanden en logfiles wel weg kunnen schrijven:

devpts /dev/pts devpts defaults 0 0
tmpfs /vartmp tmpfs defaults,nosuid 0 0
overlayfs /var overlayfs lowerdir=/var,upperdir=/vartmp 0 0