projects:spacemap:start

You are not allowed to perform this action

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 de schermen A, B en C afwisselende schermen weergegeven volgens het onderstaande tijdsschema dat zich elke 5 minuten herhaalt. Met de onderste knop aan de zijkant van het scherm kun je ook de schermen handmatig wisselen.

spacemap_scherm1_naamstate.jpeg 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.

spacemap_scherm3_scroll.jpg 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.

spacemap_scherm2_grafiek.jpg 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.

spacemap_scherm4_statenotificatie.jpeg 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.

all_of_fame_deurbel.jpg De SpaceMap luistert via MQTT naar de deurbel van TDvenlo. Wanneer er op de deurbel word gedrukt verschijnt de knipperende tekst “Deurbel!” en wordt het deurbelgeluid afgespeeld. Het geluid kun je op de configuratiepagina aan- en uitzetten.

Zie ook:

Via het menu kun je meerdere instellingen van de SpaceMap veranderen. 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.

spacemap_scherm5_menu.jpeg

Alle menu-items in een tabel

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

De klok kun je verstellen door op de configuratiepagina van de webinterface een tijdzone in te stellen. De SpaceMap haalt dan de tijd op van een NTP server en past zich automatisch aan aan de zomer- en wintertijd.

spacemap_scherm6_verbinden.jpg 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.

De SpaceMap serveert een webpagina waarop je informatie kunt inzien en bepaalde configuraties kunt doen. Via MQTT publiceert de SpaceMap zijn IP adres waarop je de webpagina kunt bereiken. Via het menu-item "Wifi info" kun je ook het IP adres vinden.

all_of_fame_main_page.jpg Op de hoofdpagina van de SpaceMap, die hier links is te zien, worden meer gegevens weergegeven dan dat er op de fysieke kaart weergegeven worden. Hier kun je onderandere statistische informatie inzien. Bijvoorbeeld hoeveel succes de SpaceMap heeft bij het opvragen van de status van elke hackerspace en hoeveel tijd dit kost. Waneer er een fout optreedt zal dit met een HTTP code weergegeven worden in de kolom State.

Op deze pagina is ook de grafiek te zien die aangeeft hoeveel hackerspaces er de laatste 5 uur open zijn geweest. Gewoon omdat het kan. Ook is er een landkaart te zien met stippen en namen van de hackerspaces die met javascript is opgebouwd.

all_of_fame_config_page.jpg Op de configuratiepagina van de SpaceMap kun je instellingen wijzigen van MQTT, NTP en de deurbel. Zie hiernaast een screenshot van deze pagina. Hieronder in de tabel staan alle parameters beschreven.

Parameter Beschrijving
MQTT_Domain MQTT broker adres
MQTT_Port MQTT broker poort
MQTT_User MQTT gebruikersnaam
MQTT_Password MQTT wachtwoord
MQTT_Name Root naam voor MQTT publishing topics, en WiFi host naam.
NTP_Server Het adres van de NTP server waarvan de SpaceMap de tijd van ophaalt.
NTP_TimeZone De tijdzone die de SpaceMap gebruikt om de klok in te stellen. Zie deze lijst met tijdzones.
DEURBEL_Topic De MQTT topic van de deurbel.
DEURBEL_Audio Het geluid van de deurbel in of uitschakelen. 1=geluid 0=geen geluid

Zie hieronder de MQTT topics die de SpaceMap gebruikt:

Topic Payload Beschrijving
PUB spacemap/ip raw (0.0.0.0) IP adres
PUB spacemap/ontime raw (int 0) Aantal seconden sinds inschakelen
PUB spacemap/operating_hours raw (float 0.00) Aantal bedrijfsuren
PUB spacemap/status/num_open raw (int 0) Aantal open hackerspaces
PUB spacemap/status/num_closed raw (int 0) Aantal gesloten hackerspaces
PUB spacemap/status/num_unknown raw (int 0) Aantal hackerspaces met onbekende status
PUB spacemap/status/num_null raw (int 0) Aantal hackerspaces met niet-geïnitialiseerde status
PUB spacemap/status/num_spaces raw (int 0) Totaal aantal hackerspaces
PUB spacemap/status_change_msg raw (string) Bericht voor de lichtkrant dat wordt verstuurd wanneer een hackerspace van status veranderd. Geopend: “+TDvenlo” Gesloten: “-TDvenlo”
PUB spacemap/status_change_msg_json json Een json bericht dat wordt verstuurd wanneer een hackerspace van status veranderd. Zie hieronder de opbouw van de payload.
SUB toegangscontrole/voordeur/deurbel raw (int 0) De SpaceMap luistert naar de deurbel en toont een bericht en maakt geluid wanneer de waarde van 0 naar 1 veranderd.

spacemap/status_change_msg_json payload

{
  "name": "Hack42",
  "oldState": "Open",
  "newState": "Closed",
  "epochSec": 1674855392
}

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

Zie hieronder een lijst van onderdelen die voor de SpaceMap worden gebruikt.

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:

Voor de behuizing van de SpaceMap is een posterlijst gebruikt die aan de achterzijde is uitgebouwd met hout. 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.

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)
  • WS2812 8mm led pixels
  • Bedraad volgens kaart (zie rechts)
  • Eerste led start onderaan
  • In de streng zitten meerdere condensatoren over 5V en GND.

  • 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.

De software van de SpaceMap is oorspronkelijk geprogrammeerd in Arduino en is laterna omgezet naar PlatformIO. Hieronder staan de verschillende softwareversies in een tabel opgesomd. Ook is er beschreven hoe je een hackerspace toe kunt voegen.

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 PlatformIO Omzet naar PlatformIO en code opschonen PlatformIO
spacemap_v1.7_platformio.zip Toevoeging deurbel met geluid PlatformIO 26-1-2023
spacemap_v1.8 PlatformIO WIP Buienradar API toegevoegd PlatformIO 10-5-2023

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)

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 :)
  • projects/spacemap/start.txt
  • Last modified: 04/10/2023 14:25
  • by ron