donderdag 20 juli 2017

Murakami schrijverstafel met arduino en rfid

Tijdens de digitale week 2017 stonden er een aantal 'installaties' in de bib die samen een 'leesroute' vormden rond de Japanse schrijver Haruki Murakami. Eén van die 'installaties' was de schrijverstafel van Murakami, losjes geïnspireerd op de zijn website.

Op de tafel lagen een aantal objecten (honkbal, jazz-cd, gelukskat, etc) met een rfid-tag. Als je die op een rfid-doosje legde dan kreeg je informatie te zien op een computerscherm. Die informatie staat eigenlijk op een lokale website die rfid-tags inleest. In deze tekst leer je stap voor stap hoe je zo'n rfid-installatie kan maken. De getoonde voorbeelden zijn
van een ander gebruik van deze techniek om onze mediawijze werking in de bib te demonstreren.

Opmerking:

Deze blog is gemaakt voor 'de schuur van Destelbergen', een mediawijs project van de bibliotheek van Destelbergen waarbij jongeren 'dingen maken met elektronica' onder begeleiding van enkele vrijwilligers.
De stappen zullen dus soms uitgebreider zijn dan strikt noodzakelijk om iets te maken. Onze ervaring leert dat sommige details op deze of verwante pagina's soms heel erg snel achterhaald zijn - iets maken is steeds ook oplossingen zoeken, prutsen, vloeken ... en doorzetten.

Stappen:

- (1) een arduino leren programmeren
- (2) USB en een arduino leonardo
- (3) rfid programmeren met arduino
- (4) met een raspberry pi leren werken
- (5) webserver apache en php installeren
- (6) test.php (communicatie arduino en raspberry pi webserver)
- (7) test2.php (rfid codes if/then else)
- (8) automatisch opstarten webbrowser
- (9) upgrade: database gebruiken voor gebruiksgemak
-(10) upgrade: een doosje 3d printen voor je rfid-reader

Uitwerking:

  • (1) een arduino gebruiken
Je kan de arduino IDE software downloaden van de officiële website en installeren op je pc.

Als je nog nooit met een arduino gewerkt hebt, kan je best eerst hier leren ledjes programmeren met een arduino uno.









  • (2) USB en een arduino leonardo
Het is de bedoeling dat de arduino de rfid-tag leest en doorgeeft aan de pc of aan de raspberry pi waar we een webserver draaien die dan steeds een andere website toont.
De communicatie zou in principe kunnen via Serial maar na wat lezen kwamen we tot een beter alternatief. Sommige arduino's zoals de leonardo kunnen gebruik maken van de USB-bibliotheek Keyboard. De arduino leonardo fungeert dan als een usb-toetsenbord. Een eenvoudig script ter demonstratie:


#include <Keyboard.h>
void setup() {
  Keyboard.begin();
  Keyboard.println("Arduino toetsenbord typt test!");
}

void loop() {
  // hier kan je uiteraard ook Keyboard.print() commando's geven maar opgelet: het kan een beetje onhandig zijn je arduino te uploaden terwijl hij zich als als een volautomatische schrijmachine gedraagt
}

In ons programma moet hij uiteraard alleen een code verzenden wanneer we een (nieuwe) rfid-tag inscannen.


  •  (3) rfid programmeren met arduino

Om rfid-tags te verwerken gebruiken we een RFID RC522 based reader.
Om deze te programmeren ùmet een arduino hebben we een extra softwarebibliotheek nodig die we kunnen downloaden/clonen van https://github.com/miguelbalboa/rfid.
Dit bestand moeten we na het downloaden unzippen in de 'libraries' map die je kan vinden in de 'arduino' map waar je eigen projecten staan. Afhankelijk van je versie van je arduino IDE kan het ook door: Schets > Bibliotheek gebruiken > .ZIP bibliotheek toevoegen.
In de toegevoegde map vind je informatie en voorbeelden om de bibliotheek te gebruiken.

Wij maakten dit script voor onze schrijverstafel:  https://drive.google.com/file/d/14_lUG7zd9pPxFWTPMv7bL5_45vDWie01/view?usp=sharing

Hoe je de rfid-module moet aansluiten op de arduino kan je vinden in de rfid-master map die je hebt geïnstalleerd in je libraries-map.



  • (4) met een raspberry pi leren werken
Een computer ontvangt een code en laat dan een specifieke webpagina zien. Idealiter moet je deze computer nooit afzetten en start hij automatisch op in kiosk-mode zodat de gebruikers niet 'per ongeluk' de computer op een andere manier gebruiken. Dat is misschien wel mogelijk met een windows-pc maar veel gemakkelijker (en goedkoper) met een raspberry pi. Bijkomend voordeel is dat we ook een beetje linux leren - veel makers-projecten zijn op maat van linux gemaakt.

Het besturingssysteem van een raspberry pi staat op een sd-kaartje. Om het standaard besturingssysteem op je raspberry pi te zetten download je eerst het "raspbian jessie met desktop"-zipbestand van de officiële site: https://www.raspberrypi.org/downloads/raspbian/
Op deze plaats vind je ook de methode om het zipbestand op een sd-kaartje te copiëren. 
Raspbian is een versie van Linux speciaal gemaakt voor de hardware van de raspberry pi. Als je nog nooit met linux hebt gewerkt dan kan deze introductie handig zijn
Om software te installeren en configureren maken we gebruik van een "terminal' waarin we commando's intikken.
Om bijvoorbeeld de arduino IDE te installeren is dit eenvoudig: sudo apt-get install arduino



  • (5) webserver apache en php installeren
Meer info, bijvoorbeeld:  https://howtoraspberrypi.com/how-to-install-web-server-raspberry-pi-lamp/

Start LXTermial en tik één voor één volgende commando's:

sudo apt upgrade
sudo apt update
sudo apt-get install apache2
sudo chmod -R 770 /var/www/html/sudo chown -R pi:www-data /var/www/html/ 


Je kan nu de browser chromium (of een andere) opstarten en wanneer je in de adresbalk localhost of 127.0.0.1 intikt dan verschijnt de test-startpagina van je lokale website.

Tik dit commando in LXTerminal:
sudo apt install php php-mbstring

Om te controleren of je webserver nu php scripts ondersteunt verwijder je /var/www/html/index.html en maakt je een nieuw tekstbestand (bijvoorbeeld met /hulpmiddelen/Text Editor) index.php met daarin één regel:
<?php phpinfo();?>

Als je nu de pagina http://127.0.0.1 ververst dan krijg je informatie over de php module van je webserver.


  • (6) test.php (communicatie arduino en raspberry pi webserver)
Wij gebruikten deze simpele pagina die we opslaan in /var/www/html: test.php

Als je dan in je browser Chromium gaat naar http://127.0.0.1/test.php krijg je een pagina waar je codes kan intikken en op ok drukken ... Als je nu de arduino aanschakelt en je legt een rfid-tag op je arduino dan krijg je een pagina te zien waarop ondermeer de code van de rfid-tag te zien is

  • (7) test2.php (rfid codes if/then else)
Vervolgens is het natuurlijk zaak om de test.php aan te passen zodat hij bij elke rfid-tag andere informatie laat zien.
Een voorbeeld hiervan is deze: test2.php

Op de foto links zie je hoe de pagina eruit ziet bij het opstarten, wanneer er geen rfid-code is geselecteerd. De belangrijkste code in test2.php staat tussen <?php en ?>. Het arduino-script zendt 'RFID' waarde door als je een tag op het rfid-doosje legt. In de eerste regels wordt deze code gelezen en opgeslagen in de variabele $rfid en daarna vergeken met een aantal rfid-codes van $lego, $microbit etc:
if(strcmp($rfid,$lego)==0){
 ...
}else if(strcmp($rfid,$microbit)==0){
 ...
}
Tussen die accolades wordt dan de html-code  die moet verschijnen op de website geschreven met behulp van het commando echo" ..."; Als je binnen die "" een " wil gebruiken moet je \" gebruiken.

Onderaan de pagina staat er weer een invoerveld met naam RFID zodat een volgende rfid-tag kan ingetikt of ingescand worden. Wanneer je de rfid-tag inscant die overeen komt met de variabale $microbit dazn wordt de html-code tussen else if(strcmp($rfid,$microbit)==0){ en } getoond in de browser Chromium:



  • (8) automatisch opstarten webbrowser
Raspbian is het standaard besturingssysteem van de raspberry pi om "dingen te maken". Raspbian is een versie van linux die je zelf nog heel erg kan aanpassen en waarvan de basisversie zelf ook heel wat wijzigingen heeft ondergaan. Daardoor kan je op internet heel veel zaken lezen die "niet meer werken" of "anders werken". Dat is zeker het geval voor het automatisch laten opstarten van programma's in een grafische omgeving (='windows').

Tot voor kort moest er één bestandje aangepast worden: /etc/xdg/lxsession/LXDE-pi/autostart
In april 2018 merkte ik dat dit niet meer werkte.
De eerste stap die je nu moet doen is LXTerminal opstarte: hier tik je dan in:

cp /etc/xdg/lxsession/LXDE-pi/autostart /home/pi/.config/lxsession/LXDE-pi/autostart

Hetzelfde bestand staat nu in je home map in de 'verborgen map' .config
We kunnen het bestand autostart nu aanpassen met dit commando (nog steeds in LXTerminal):

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

We voegen deze 3 regels toe opdat het scherm niet in slaap- of screensavermodus gaat
@xset s off
@xset -dpms
@xset s noblank

Deze regel voegen we doe opdat de browser Chromium in kioskmodus wordt opgestart met als opstartpagina http://127.0.0.1/test2.php

@chromium-browser --incognito --kiosk http://127.0.0.1/test2.php

We sluiten af met Ctrl-X en dan J(Ja, opslaan!).

  • (9) upgrade: database gebruiken voor gebruiksgemak
Als dit geen éénmalig project is, dan kan je één en ander een beetje automatiseren. Alle gegevens opslaan in een databank (bivoorbeeld MySQL) is een evidente upgrade.


  • (10) upgrade: een doosje 3d printen voor je rfid-reader
Om de electronika wat te verbergen kan je de rfid-lezer tesamen met de arduino leonardo in een doosje stoppen. Rudi van de bib van Melle maakte twee stl-bestanden die je hiervoor kan gebruiken. Voor de werkwijze (algemene .stl bestanden omzetten naar .gcode bestanden specifiek voor jouw 3D-printer): zie de instructies om Cura te gebruiken in het 3D-printer projekt.

- Leonardboxbottom.stl
- Leonardoboxtop.stl

Geen opmerkingen:

Een reactie posten