projects:spacemap:start

SpaceMap

spacemap_main_image.jpg De SpaceMap is een elektronische landkaart die van alle hackerspaces in Nederland aangeeft of ze open of dicht zijn. Op de locatie van elke hackerspace zit een lampje die met kleur de status aangeeft. Bij het opvragen van de status wordt gebruik gemaakt van WiFi en de SpaceApi standaard. Naast de lampjes op de landkaart worden de namen van de hackerspaces ook weergegeven op een led matrix. Wanneer een hackerspace open of dicht gaat zal er ook een geluid klinken.

Op dit moment wordt de status van de volgende 15 hackerspaces op de SpaceMap weergegeven: Frack, Hackerspace Drenthe, TkkrLab, Hack42, Bitlair, TechInc, RevSpace, The Space Leiden, Pixelbar, RandomData, NURDspace, Hackerspace Nijmegen, Hackalot, Hackerspace TDvenlo, Ackspace .

Om een hackerspace aan de kaart toe te voegen moet deze in de software toegevoegd worden, samen met een nieuwe LED op de landkaart. SpaceAPI urls worden van de SpaceAPI directory opgehaald.

Van start project tot aan de muur bij TDvenlo: Juni 2019…Juni 2020
Ron Theelen

Op de led matrix worden drie afwisselende schermen weergegeven:

Naam en status [A]
Van alle hackerspaces wordt een voor een de naam en de status op regel 2 en 3 weergegeven. Van de hackerspace die weergegeven wordt gaat het lampje op de kaart knipperen. Op regel 4 wordt weergegeven hoeveel hackerspaces er open of dicht zijn. Met de bovenste twee knoppen aan de zijkant van het scherm kun je handmatig door alle hackerspaces scrollen.
Aan de rechterzijde staat een balkje waar elke led een hackerspace voorstelt. Aan de linkerzijde van het balkje geeft een witte led aan welke hackerspace er op dat moment op het scherm weergegeven wordt. Aan de rechterzijde geeft een blauwe led aan waar op dat moment de status van opgehaald wordt.

Scrollende namen [B]
De namen van alle hackerspaces scrollen een voor een voorbij verdeeld over drie regels. De status van elke hackerspace wordt met kleur aangegeven.
Een leuk feitje: Een hackerspace verschijnt telkens op een andere regel omdat het aantal hackerspaces geen veelvoud van 3 is.

Grafiek [C]
De gestapelde grafiek geeft weer hoeveel hackerspaces er de laatste 5 uur en 20 minuten open en dicht zijn geweest. Elke 5 minuten wordt de status opgeslagen in het flashheugen met een maximum van 64 samples. De nieuwste sample verschijnt aan de rechterkant en schuift elke keer door naar links. De getallen onderaan het scherm geven de hele uren aan.

Tijdschema
De bovenstaande schermen wisselen zich af volgens het onderstaande tijdschema dat zich elke 5 minuten herhaalt. Met de onderste knop aan de zijkant van het scherm kun je ook de schermen handmatig wisselen.

Notificatie
Wanneer er een hackerspace open of dicht gaat wordt dit aangegeven met een notificatie. Hierbij wordt de naam en de nieuwe status van de hackerspace weergegeven omringd door gekleurde balken die een cirkelende beweging maken. Naast de visuele notificatie klinkt er ook een geluid waaraan je kunt horen dat een hackerspace open of dicht is gegaan.

Via het menu kun je meerdere dingen van de SpaceMap instellen. Het menu wordt bediend met de vier knoppen aan de zijkant. De symbolen op het scherm geeft de functie van elke knop aan. Je komt in het menu door twee aangrenzende knoppen tegelijkertijd ingedrukt te houden.

Klok verstellen
Met het menu-item “Tijd instelling” kun je de klok bijstellen wanneer zomer of wintertijd ingaat. De klok synchroniseert via het netwerk, maar past zich niet automatisch aan aan de zomer- of wintertijd.

Wifi-netwerk instellen
Met het menu-item “Wifi instellen” kun je het wifi-netwerk wijzigen of instellen waarmee de SpaceMap verbinding maakt. Dit gaat via een wifiportal. Dit wilt zeggen dat de SpaceMap zelf een netwerk opzet waarmee je met jouw telefoon verbinding mee maakt. Jouw telefoon zal een melding tonen dat je bij dit netwerk in moet loggen. Als je hierop drukt kom je op een webpagina waar je het wifi-netwerk van de SpaceMap in kunt stellen.

Wanneer de SpaceMap verbinding aan het maken is met het netwerk zal dit scherm getoond worden. De scrollende witte tekst laat zien met welk netwerk er verbinding wordt gemaakt. Deze tekst wordt vergezeld door een mooie regenboogkleurige golf. Als het verbinden mislukt zal de wifi portal voor 60 seconden geactiveerd worden. Na deze tijd zal nogmaals geprobeerd worden om te verbinden.

Alle menu-items in een tabel

Menu-item Beschrijving
1Tijd instelling Het verstellen van de klok
2Audio volume Het volume van geluiden aanpassen
3Led helderheid Helderheid van de leds op de kaart aanpassen
4Matrix helderheid Helderheid van het scherm aanpassen
5Wifi info Geeft het IP adres van de SpaceMap weer
6Wifi instellen Activatie van de Wifi protal om het netwerk in te stellen
7Bedrijfsuren Weergave van het aantal uren dat de SpaceMap aan heeft gestaan vanaf 8-5-2020
8Reset alle instellingenReset van de instellingen: 1,2,3 en 4

Houtwerk
Hieronder is het achteraanzicht van de SpaceMap te zien toen het houtwerk bijna klaar was. Hiervoor zijn geen 3D/cad tekeningen gemaakt en is er gewoon gezaagd en gevijld totdat alles op zijn plek viel.

Beschrijving Onderdeel
Microprocessor Heltec WiFi Kit 32 (ESP32)
Scherm P3 smd RGB 32×64 led matrix
Donker plexiglas Plexiglas plaat GS smoke 923 3mm
Leds op kaart WS2812 8mm led pixels
MP3 module MP3-module serieel
Speakers Speakerset 8Ω 5W WS-14595
Audio versterker Adafruit 2x10W (aparte voeding)
Level shifter TXS0108E module
Voeding1 Meanwell RS-25-5 (5V 5A)
Voeding2 (Audio) Stekkervoeding 12V 1A
Poster Posterpoint 50x70cm Nederland
Wissellijst 50x70cm aluminium frame
Hout Vuren balken, MDF platen

Blokdiagram:

Led matrix
Het scherm van de SpaceMap is een RGB led matrix van 64×32 pixels. Deze panelen worden normaal gesproken gebruikt om grote videoschermen te maken. Gelukkig zijn ze ook met een ESP8266 of ESP32 vrij gemakkelijk aan te sturen. Het enige nadeel is dat deze schermen actief aangestuurd moeten worden omdat de leds met shiftregisters aan worden gestuurd. Dit betekend dat de ESP rij voor rij de leds moet afgaan en de gewenste kleuren inschakelt. Dit gebeurt zo snel dat het met het oog niet te zien is. Deze manier van aansturen heet multiplexen. Om het voor de ogen iets prettiger te maken om naar de matrix te kijken heb ik voor de matrix donker een getinte plaat van plexiglas geplaatst. Dit vergroot ook het contrast.

  • Resolutie: 64×32 leds
  • Pixelafstand: 3mm (tussen middelpunten)
  • Kleuren: Rood, groen, blauw
  • Voeding: 5V 5A (2A is te weinig)
  • Aanstuurwijze: Actief multiplexen (1/16 scan)

Adresseerbare leds

  • WS2812 8mm led pixels
  • Bedraad volgens kaart (zie rechts)
  • Eerste led start onderaan
  • In de streng zitten meerdere condensatoren over 5V en GND.

MP3 module

  • Speelt geluiden af wanneer een hackerspace open of dicht gaat.
  • De geluiden bevinden zich op een SD kaart die in het voedingscompartiment gevonden kan worden. Deze steekt door een kleine gleuf in het hout.
  • De geluidsuitgang van de MP3 module wordt versterkt met een aparte geluidsversterker die met een aparte netvoeding wordt gevoed. Dit is om hem te ontkoppelen van de stoorsignalen die door het aansturen van de led matrix ontstaan.
  • De speakers zitten aan de linker en rechter zijkant van de SpaceMap.

SpaceMap op breadboard

Geprogrammeerd met Arduino.

Broncode

Versie Beschrijving IDE Datum
spacemap_v1.2.zip The Space Leiden en Hackerspace Drenthe toegevoegd (zonder LED) Arduino
spacemap_v1.3.zip Probleem opgelost bij het ontvangen van HTTP code 404 Arduino 9-6-2021
spacemap_v1.4.zip Leds toegevoegd voor The Space Leiden en Hackerspace Drenthe Arduino 11-8-2021
spacemap_v1.5 MQTT functionaliteit toegevoegd. Arduino
spacemap_v1.6 Omzet naar PlatformIO en code opschonen PlatformIO

Verbetering voor 1.5:

  • MQTT functionaliteit toevoegen
  • Een MQTT bericht publishen voor de lichtkrant wanneer een hackerspace van status veranderd
  • Url van Hackerspace Drenthe vervangen door de key in SpaceAPI directory. (“Hackerspace Drenthe”)

Gebruikte libraries en boards

Library Auteur Versie Bron
FastLED Daniel Garcia 3.3.3 Arduino Library Manager
U8g2 oliver 2.25.10 Arduino Library Manager
PxMatrix Dominic Buchtaller 1.7.0 Arduino Library Manager
ArduinoJson Benoit Blancho 6.14.1 Arduino Library Manager
ESP_WiFiManager khoih-prog 1.7.2 https://github.com/khoih-prog/ESP_WiFiManager
Board Auteur Versie Board Manager URL
esp32 Espressif Systems 1.0.4 https://dl.espressif.com/dl/package_esp32_index.json

Taken verdeeld over 2 cores

Core Prio Taak Beschrijving
0 2 task_updateLEDS Aansturen van leds op landkaart
0 2 task_drawDisplay Naar de buffer van de led matrix schrijven
0 0 task_manageWifi Wifi gerelateerde taken uitvoeren
1 2 task_displayUpdater Aansturen van de led matrix (multiplexen)

Een hackerspace toevoegen
Alle hackerspaces worden in het geheugen geladen als een array van het object space.

//LEDpx is the distance in mm from the left side of the map
//LEDpy is the distance in mm from the bottom side of the map
//Sort all spaces with LEDpy in decending order. (The spaces are displayed in this order)
//Spaces with no spaceAPI url get the following url string: ""
 
//space(LEDindex, LEDpx, LEDpy, display name, city name, spaceAPI url or name)
space spaces[] = {
/* 0*/  space(14, 317, 567, "Frack"     , "Leeuwarden"  , "Frack"                ),
/* 1*/  space(13, 434, 454, "H.Drenthe" , "Coevorden"   , "https://hackerspace-drenthe.nl/spaceapi.json"  ),
/* 2*/  space(12, 448, 362, "TkkrLab"   , "Enschede"    , "TkkrLab"              ),
/* 3*/  space(11, 328, 320, "Hack42"    , "Arnhem"      , "Hack42"               ),
/* 4*/  space(10, 268, 350, "Bitlair"   , "Amersfoort"  , "Bitlair"              ),
/* 5*/  space( 9, 195, 388, "TechInc"   , "Amsterdam"   , "Technologia Incognita"),
/* 6*/  space( 8, 155, 345, "Sp.Leiden" , "Leiden   "   , "The Space Leiden"     ),
/* 7*/  space( 7, 137, 332, "RevSpace"  , "Leidschendam", "RevSpace"             ),
/* 8*/  space( 6, 143, 297, "Pixelbar"  , "Rotterdam"   , "Pixelbar"             ),
/* 9*/  space( 5, 230, 332, "RandomData", "Utrecht"     , "https://api.thingspeak.com/channels/886012/feed/last.json"), /*Not using spaceAPI!! Created a special.*/
/*10*/  space( 4, 300, 307, "NURDspace" , "Wageningen"  , "NURDSpace"            ),
/*11*/  space( 3, 326, 279, "H.Nijmegen", "Nijmegen"    , "Hackerspace Nijmegen" ),
/*12*/  space( 2, 280, 197, "Hackalot"  , "Eindhoven"   , "Hackalot"             ),
/*13*/  space( 1, 363, 182, "TDvenlo"   , "Venlo"       , "TDvenlo"              ),
/*14*/  space( 0, 339,  81, "ACKspace"  , "Heerlen"     , "ACKspace"             ),
};
#define numSpaces 15 //Please count manually :)

Het aantal seconden dat de spacemap aanstaat.

Payload:
INT

Geeft aan hoeveel hackerspaces er open zijn.

Payload:
INT

Geeft aan hoeveel hackerspaces er gesloten zijn.

Payload:
INT

Geeft aan van hoeveel hackerspaces de status onbekend is.

Payload:
INT

Geeft aan van hoeveel hackerspaces er in totaal zijn.

Payload:
INT

Een bericht die verzonden wordt waneer een hackerspace van status veranderd.

Payload:
JSON

{
  "displayName": "TDvenlo",
  "oldState": "Closed",
  "newState": "Open",
  "epochSec": 1649181077
}

States: “Open”, “Closed”, “Unknown”, “NULL”
epochSec: Timestamp in epoch seconden (unix time)

  • MQTT functionaliteit afronden
    • + IP adres
  • Space states beschrijven
  • OTA toevoegen
  • Tijd ophalen met tijdzone om automatisch van zomer- naar wintertijd te gaan. Dit is al geïmplementeerd bij de Lichtkrant.
  • projects/spacemap/start.txt
  • Last modified: 17/08/2022 12:26
  • by ron