Spaceloop v2
Project Spaceloop v2 | |
---|---|
Status | Completed |
Contact | User:Juerd |
Last Update | 2012-05-22 |
TL;DR
Het ledje geeft de status van de gehele spaceloop aan.
Knipperend rood betekent dat je voordat je weggaat eerst nog een raam of deur moet sluiten. Op het schermpje staat waar.
FAQ
Waarom geven de ledjes de status van de gehele spaceloop aan?
Of de deur of het raam waar je bijstaat open of dicht is, dat kun je zelf wel zien. Daar heb je geen ledje voor nodig. Vanaf die plek kan je echter niet de rest van de space zien, en daarom wordt de algemene status met 't ledje weergegeven.
Als je een raam dichtdoet, en het ledje blijft rood knipperen, dan weet je er nog ergens anders een raam of deur open is. Als het ledje groen wordt, dan hoef je verder geen spaceloop-schakelaars meer te checken.
Voor debuggen is het handig om te weten welke schakelaar nog open staat. Dat kun je aflezen op het schermpje.
Als het ledje groen wordt, is dan alles dicht?
Niet per se, want nog niet alle ramen zijn van 'n schakelaar en sensor voorzien. Alleen alles in de spaceloop is dicht als de ledjes groen worden.
Waarom "spaceloop" als het geen loop is?
De eerste versie van de spaceloop was een lus met schakelaars. De loop was dicht of open, zonder dat je wist waar de lus onderbroken was. De vervanging (spaceloop2) bestaat uit vier 1-wire-bussen; veel van de UTP-kabels van de oude spaceloop zijn hiervoor hergebruikt. Twee van de bussen volgen samen nog steeds fysiek de lus-structuur rondom de space, behalve dan dat ie ergens in het midden onderbroken is.
Zones
Zone 1 t/m 8 komen overeen met die van het schoonmaakbord.
Elke ruimte heeft alvast een nummer gekregen, ook als er nog geen sensors hangen. Deuren krijgen niet pre-emptive een zonenummer; alleen bewaakte deuren zijn relevant.
- 0: Gereserveerd
- 1: Ingang
- 2: Arcade
- 3: Handwerklokaal
- 4: Keuken
- 5: Lounge
- 6: Hacklab
- 7: Studio
- 8: Toiletten
- 9: Dakterras (+deur)
- 10: Doka
- 11: Lift (+deuren)
- 12: Liftmachinekamer
- 13: Serverhok
- 14: Storage (achter serverhok)
- 15: Room 101
- 16: Stookhok
- 17: Nooduitgang (+deur)
- 18: Dubbele deur
- 19: Voordeur
- 20: RevSpace (space-status)
Onderdelen
Arduino Nano v3
Een lief klein Arduino'tje met atmega328 wordt gebruikt als controller voor alle onderdelen van de spaceloop. Hij kent twee modi, waarvan er steeds één tegelijk actief is: de normale modus en de programmeermodus.
De source staat op http://github.com/Juerd/spaceloop2
Wanneer de Arduino opstart of wordt gereset, scant ie de 1-wire-bus. Nieuwe devices worden dan vanzelf herkend. Daarna worden nieuwe devices niet meer gevonden. Een uitzondering geldt voor als bij scannen een raam/deur open was. Dan wordt voortdurend opnieuw gescand totdat alle ramen/deuren dicht zijn. Als dit het geval is, dan reageert het systeem trager op schakelaars.
Knipperen de LEDs rood, dan is ergens in de space een raam/deur open. Snel knipperen (2 Hz) is normaal bedrijf, traag knipperen (½ Hz) is voorgenoemde tragere modus.
Zijn de LEDs continu groen, dan zijn alle ramen/deuren dicht.
Zijn de LEDs uit, dan is de programmeermodus actief of ergens iets stuk :)
Bij de aanduiding met licht is rekening gehouden met kleurenblindheid; het patroon (continu aan, knipperend aan/uit, continu uit) is ook uniek.
Knipperend groen of continu rood betekent dat het verkeerd om is aangesloten.
Tekstscherm
In de normale modus geeft dit tekstscherm aan welke ramen of deuren geopend zijn, of als alles dicht is, de huidige temperatuur.
In de programmeermodus heeft dit tekstscherm nog geen functie.
Multiplexed IO
Dit bordje, sku 81873 van DX, heeft acht 7-segment-tekens met punt, acht tweekleuren-LEDs en acht knopjes, die allemaal door de TM1638 gemultiplext worden. De verbinding met de Arduino voor deze 80 LEDs en 8 knopjes kost maar 3 digitale pinnen.
In de normale modus zijn de LEDs groen of rood net als de LEDs van de schakelaar-blokjes, behalve LEDs 4 en 5, die zijn altijd groen. Als knopjes 4 en 5 tegelijk worden ingedrukt, geef je de controller de opdracht alle op dat moment openstaande ramen/deuren te vergeten.
In programmeermodus geeft het schermpje instructies en de huidige nummers. Met de knopjes kunnen bits aan en uit worden gezet. De bijbehorende LEDs branden rood voor bitwaarde 1 en zijn uit voor bitwaarde 0. LED 2 brandt in de programmeermodus groen, om aan te geven dat je met knopje 2 de invoer bevestigt.
1-wire-bussen
Op de bussen worden alleen DS18B20-sensoren verwacht. Deze zijn geprogrammeerd zodat de twee user-bytes van de EEPROM van de sensor de locatie en het sensornummer bevatten. Het maakt niet uit op welk van de twee bussen een sensor wordt aangetroffen; de scheiding is puur vanwege de kabellengte. Wel moet een sensor op dezelfde bus blijven tijdens bedrijf.
De drie meest significante bits van byte 1 zijn gereserveerd voor toekomstig gebruik. In de vijf resterende bits wordt een zonenummer opgeslagen. Dit zonenummer moet groter zijn dan 0. Er zijn 31 zones mogelijk binnen het systeem.
De meest significante bit van byte 2 geeft aan of het raam of de deur gesloten moet zijn voordat de space dicht gaat.. Zo niet (0), dan worden wel notificaties gegegven, maar wordt de sensor verder genegeerd. Zo wel (1), dan telt het ding mee voor de "sluiten voor vertrek"-status. De twee volgende bits zijn gereserveerd voor toekomstig gebruik. In de vijf resterende bits wordt het sensornummer opgeslagen. Per zone en soort moet dit nummer uniek zijn.
Is het schakelaar-nummer 0, dan wordt het nummer niet in beeld gegeven. Dat is zinnig als een zone maar één deur of raam heeft.
Er zijn 4 bussen. In willekeurige volgorde:
- Eentje linksom langs de rand van de space
- Eentje rechtsom langs de rand van de space
- Eentje naar beneden (voordeur en spacestate)
- Eentje dwars door de space, richting de bar (nog niet in gebruik)
H-brug
Tussen de Arduino en de keten tweekleuren-LEDs zit een H-brug van sterke PNP- en NPN-transistoren zodat er genoeg stroom geleverd kan worden.
De tweekleuren-LEDs van de keten hebben twee pinnen. De feitelijke diodes zijn antiparallel geplaatst, zodat de stroomrichting de kleur bepaalt.
Schakelaar-blokjes
Deze blokjes hebben vier functies:
- Met tweekleuren-LED aangeven of er ergens een raam/deur open is.
- Een schakelaar bewaken; als de schakelaar open is.
- Temperatuur meten.
- Twee kabels aan elkaar verbinden zodat er doorgelust kan worden.
Het blokje heeft 2 female RJ45-connectoren, draadjes naar een schakelaar, en inwendig een LED met weerstand en een DS18B20-sensor.
UTP-kabel
De kabel die de blokjes aan elkaar verbindt wordt als volgt gebruikt:
RJ45-pin | T-568B-kleur | Functie | Kleur in blokje | Kleur in blokje2 | Opmerking |
---|---|---|---|---|---|
1 | oranje/wit | GND/NC | blauw | oranje | |
2 | oranje | TX/NC | oranje | blauw | Alleen in bus die langs 't serverhok komt. |
3 | groen/wit | NC | zwart | geel | |
4 | blauw | LED_A | rood | groen | Korte pootje, platte kant |
5 | blauw/wit | LED_B | groen | rood | Lange pootje, via weerstand |
6 | groen | VCC | geel | zwart | Rechter pootje sensor (bolle kant van je af, pootjes naar beneden) |
7 | bruin/wit | GND | bruin | wit | Linker pootje sensor (bolle kant van je af, pootjes naar beneden) |
8 | bruin | 1-wire | wit | bruin | Naar buiten(schakelaar) |
X | X | X | Kies wat leuks | X | Tussen buiten(schakelaar) en middelste pootje sensor |
We gebruiken blauwe RJ45-plugjes voor dit project, zodat je kan herkennen welke plugjes bij de spaceloop horen :)
NB: Bij het allereerste kabeltje, van de headers op het bordje van de controller naar het eerste plugje, zijn oranje er blauw verwisseld.
Thermometers
Aan het systeem kunnen ook extra temperatuursensoren (DS18B20) worden aangesloten, die permanent verbonden blijven. Dat kan in twee uitvoeringen: in een RJ45-koppelstuk of als los stekkertje via de netwerkbekabeling in het gebouw.
We hebben ook grafiekjes.
Sensor toevoegen
Nooit zomaar sensors toevoegen aan de bus, die nog niet via dit systeem zijn voorbereid. Het zou goed kunnen gaan maar het maakt debuggen in de toekomst misschien erg lastig. Gebruik alleen DS18B20-sensoren die extern gevoed kunnen worden, dus geen parasitaire (DS18B20-PAR, maar -PAR staat niet op het ding zelf!).
TIP: Haal de serieel-bus even los, dat voorkomt een boel geblaat op IRC :)
- Programmeer de nieuwe sensor
- Druk gelijktijdig op het eerste en het laatste knopje om de programmeermodus te starten
- Zorg dat de programmeerbus (de onderste op het bordje) leeg is
- Steek de nieuwe sensor in de programmeerbus
- Stel een zonenummer in met de 5 meest rechtse knopjes.
- Druk op knopje 2.
- Stel een schakelaarnummer of thermometernummer in met de 5 meest rechtse knopjes, gebruik knopje 1 om te wisselen tussen schakelaar en thermometer.
- Nummer 0 is voor als een zone of raam maar één raam of deur heeft.
- Druk op knopje 2.
- Wacht tot het ding "unplug" zegt en haal de sensor uit de programmeerbus.
- Sluit de nieuwe sensor aan op de normale bus.
- (Optioneel maar wenselijk) Sluit alle bewaakte deuren en ramen.
- Reset de controller zodat ie op zoek gaat naar nieuwe devices.
Sensor verwijderen
- Sluit alle ramen en deuren.
- Als je nu knopjes 4 en 5 tegelijk indrukt, vergeet de controller alle schakelaars die niet op de bus zijn aangetroffen.
NB: sensors waarvan het "sluiten voor vertrek"-bitje uitstaat, kun je niet verwijderen op bovenstaande manier. Mocht het toch nodig zijn om daar van af te komen, volg de volgende procedure:
- Sluit alle ramen en deuren.
- Sluit de space (!!)
- Upload het EEPROM-reset-scriptje naar de Spaceloop-controller
- Upload de normale spaceloop-code naar de Spaceloop-controller