Maand van de slimme stad Nijmegen

logo_nijmegenOp 16 en 18 november 2016 mochten wij een tweetal workshops organiseren voor de Gemeente Nijmegen. Het onderwerp: De maand van de slimme stad! Een initiatief van Paul Geurts, werkzaam bij de gemeente als Informatie Architect.

Dankzij de populariteit van technologieën zoals LoRaWAN en ontwikkelboards als Arduino en Raspberry, is het draagvlak om deze technieken in de praktijk toe te passen en er mee bezig te zijn in zeer korte tijd véél groter geworden. Om goed koers te kunnen bepalen, is het belangrijk allereerst correct geïnformeerd te worden over waar we momenteel staan, welke mogelijkheden binnen handbereik zijn en welke stappen dus het beste als eerste gezet kunnen worden.

Het technologie landschap is aan het veranderen. Na de industriële en de digitale revoluties zijn we beland in een wereld waarin de verbinding tussen de digitale en fysieke wereld steeds belangrijker aan het worden is. In deze semantische leef- en werkomgeving staat alles in verbinding met elkaar. De infrastructuur van het internet, de (opensource) hard- en software en de (draadloze, opensource) communicatieprotocollen zijn de fundamenten om IoT zo toegankelijk te maken als water uit de kraan.

De presentatie werd verzorgd door Rogier van Onna (Elonisas) en Gérard Dijkslag (Promteg). Ook Marc van Blijderveen (Technica Electronica) was hierbij aanwezig. Tijdens de workshop legden we niet alleen uit welke technieken inmiddels voorhanden zijn, we gaven ook praktijkvoorbeelden hoe je zelf aan de slag kunt gaan met de hard- en software.

Bekijk hier de diverse (Arduino) oefeningen die we hebben samengesteld. Spoedig zullen er ook voorbeelden bij komen om aan de slag te gaan met de Sodaq One (http://support.sodaq.com/sodaq-one/).

Arduino Oefening 4 – Poort manipulatie

In deze oefening werken we met poort manipulatie om de aangesloten LED’s in of uit te schakelen.

Middels poort manipulatie geven we in één enkele byte aan het poort register door welke poorten binnen een bepaald segment van de Arduino Board ingeschakeld (1) of uitgeschakeld (0) moeten worden (PORTB) en of het om IN of OUTPUT gaat (DDRB). Meer weten? Lees er hier meer over.

Benodigdheden

  • Arduino Board
  • Breadboard & aansluitkabels
  • Rode LED met ingebouwde weerstand of een 220 ohm weerstand
  • Groene LED met ingebouwde weerstand of een 220 ohm weerstand
  • Gele LED met ingebouwde weerstand of een 220 ohm weerstand
  • Pushbutton
  • 10K ohm weerstand

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en LED’s in diverse kleuren met ingebouwde weerstand. Ook de pushbutton en de 10k ohm weerstand zijn inbegrepen.

Aansluitschema

Oefening-4

Code

/*
 Geschreven door: Rogier van Onna (Elonisas IOT)
 Datum bijgewerkt: 8-3-2016
 Port Manipulation Voorbeeld
*/

const long interval = 10000;

int buttonPin = 2;
bool buttonWaarde;
bool disco;

void setup() {
  DDRB = B11111111;
  pinMode(buttonPin, INPUT);
}

void loop() {

  buttonWaarde = digitalRead(buttonPin);

  if(buttonWaarde==HIGH) {
    disco = !disco;
    delay(1000);
  }

  if(disco) {
    switch(millis() % interval) {
      case 0: { PORTB = B00011100; break; }
      case 1000: { PORTB = B00011100; break; }
      case 2000: case 5000: { PORTB = B00010000; break; }
      case 3000: case 6000: { PORTB = B00011000; break; }
      case 4000: case 7000: { PORTB = B00011100; break; }
      case 8000: { PORTB = B00000000; break; }
      case 9000: { PORTB = B00001110; break; }
      case 10000: { PORTB = B00000000; break; }
    }
  } else {
    PORTB = B00000000;
  }
 
}

Met segment B worden de poorten 8 tot 13 aangestuurd. We vermijden de delay-functie en gebruiken in plaats daarvan de millis-functie om te bepalen welke byte weggeschreven moet worden naar PORTB.

Arduino Oefening 3 – NTC

In deze oefening lezen we de waarde van een warmte gevoelige weerstand uit (NTC) en tonen deze via de seriële monitor wanneer er op de pushbutton (knopje) gedrukt wordt.

Een NTC-weerstand, ook wel Thermistor genoemd, reageert op temperatuur. Wanneer de temperatuur stijgt, neemt de weerstand van de NTC af. Lees er hier meer over.

Benodigdheden

  • Arduino Board
  • Breadboard & aansluitkabels
  • Pushbutton
  • 10k Warmte gevoelige weerstand (NTC)
  • 2x 10K ohm weerstand

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en een LED met ingebouwde weerstand. Ook de pushbutton, 10k ohm NTC en de 10k ohm weerstanden behoren tot de inhoud.

Aansluitschema

Oefening-3

Code

/*
 Geschreven door: Rogier van Onna (Elonisas IOT)
 Datum bijgewerkt: 28-02-2016
 NTC Temperatuur gevoelige weerstand (voorbeeld code)
*/

#define NTCPIN A0 // NTC sensor pin

float waarde;

int buttonPin = 2;
bool buttonWaarde;

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT);
}

void loop() {
 
  waarde = analogRead(NTCPIN);
  buttonWaarde = digitalRead(buttonPin);

  if(buttonWaarde==HIGH) {
    Serial.print("NTC waarde: ");
    Serial.println(waarde);
  }
 
  delay(1000);
 
}

De parameter ‘waarde’ bevat de waarde van de NTC (ongeveer tussen de 300 en 800). Wanneer op de knop wordt gedrukt (buttonWaarde), wordt de waarde weggeschreven naar de seriële monitor (Serial.print).

Arduino Oefening 2 – PWM poort

In deze oefening bepalen we de lichtsterkte van een LED d.m.v puls breedte modulatie (PWM – Pulse Width Modulation) met behulp van een potmeter. Nieuwsgierig hoe dit precies werkt? Lees er hier meer over.

Een potmeter is een draaibare weerstand. Door te draaien wordt de weerstand bepaalt. Sommige potmeters hebben een zogenaamde center click zodat je weet waar het midden zit.

Benodigdheden

  • Arduino Board
  • Breadboard & aansluitkabels
  • LED met ingebouwde weerstand of een 220 ohm weerstand
  • 10k ohm Potmeter

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en een LED met ingebouwde weerstand. Ook de 10k ohm potmeter incl. draadknop zijn inbegrepen.

Aansluitschema

Oefening-2

Code

/*
 Geschreven door: Rogier van Onna (Elonisas IOT)
 Datum bijgewerkt: 28-02-2016
 Potmeter (voorbeeld code)
*/

#define POTMETER A0
int ledPin = 3;
int waarde;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  waarde = analogRead(POTMETER) / 4;
  analogWrite(ledPin, waarde);
  //Serial.print("Waarde: ");
  //Serial.println(waarde);
  //delay(500);
}

De waarde van de potmeter (maximaal 1024) delen we door 4 en vervolgens bepalen we daar de waarde van de PWM poort mee (maximaal 255).

Arduino Oefening 1 – LDR

In de volgende oefening sluiten we een licht gevoelige weerstand (LDR) aan om, wanneer het donker wordt, een LED te laten branden!

Een LDR (light-dependent resistor) is een elektrisch component waarvan de weerstand wordt bepaalt door de hoeveelheid licht die wordt opgenomen door het zonnepaneel-achtige oppervlak van het component. Nieuwsgierig hoe een LDR nou precies werkt? Lees er hier meer over.

Benodigdheden

  • Arduino Board
  • Breadboard & aansluitkabels
  • LED met ingebouwde weerstand of een 220 ohm weerstand
  • Licht gevoelige weerstand (LDR)
  • 10k ohm weerstand

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en een LED met ingebouwde weerstand. Ook de LDR en 10k ohm weerstand behoren tot de inhoud.

Aansluitschema

Oefening-1

Code

/*
 Geschreven door: Rogier van Onna (Elonisas IOT)
 Datum bijgewerkt: 28-02-2016
 LDR Lichtgevoelige sensor (voorbeeld code)
*/

#define LDRPIN A0 // LDR sensor pin

float waarde;

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
 
  waarde = analogRead(LDRPIN);
 
  //Serial.print("LDR waarde: ");
  //Serial.println(waarde);

  digitalWrite(13,(waarde < 550 ? HIGH : LOW));

  delay(1);
 
}

De LDR wordt uitgelezen via een analoge poort (A0 in dit geval). De parameter ‘waarde’ bevat de waarde die de LDR terug geeft (ongeveer tussen de 300 en 800). Is deze waarde lager dan 550, dan wordt de LED ingeschakeld.

De 10k ohm weerstand die op GND (ground) aangesloten is, voert de overtollige spanning af. Dit is noodzakelijk zodat de waarde, die via de analoge poort wordt doorgegeven, klopt.

 

Aan de slag met de Arduino Board

We vertellen graag wat meer over de Arduino Board. De eerste board werd in 2005 gelanceerd. Het doel van deze board was om het voor beginners en professionals op een eenvoudige en laagdrempelige manier mogelijk te maken apparaten te creëren die interactie hadden met hun omgeving middels sensoren en actuatoren. Doormiddel van op de Arduino Board geprogrammeerde instructies worden de sensoren uitgelezen en de actuatoren in werking gesteld.

Getting Started

De eerste stap om aan de slag te kunnen met de Arduino Board is het installeren van de Arduino Software. Deze is hier te downloaden.

De tweede stap is het aansluiten van de Arduiono Board op de USB poort van je computer. Vervolgens kan in de software aangegeven worden welk type Arduino aangesloten is.

We beginnen met de meest eenvoudige oefening. Het aansluiten van een LED die we vervolgens laten knipperen. Het is een van de voorbeelden die meegeleverd worden met de Arduino Software. Uitgebreide uitleg over deze oefening en meer basis oefeningen zijn hier te vinden.

Benodigdheden

  • Arduino Board
  • LED met ingebouwde weerstand of een 220 ohm weerstand

De kit aangeschaft? Dan ben je in het bezit van een Arduino UNO Board en een LED met ingebouwde weerstand.

Aansluitschema

Sluit de LED aan op GND (ground) met het korte pootje en op poort 13 met het lange pootje. Let op! Controleer of je de juiste LED gebruikt (met ingebouwde weerstand). Mocht dat niet het geval zijn, gebruik dan een 220 ohm weerstand tussen poort 13 op de Arduino Board en het langste pootje van de LED.

GettingStarted

Code

De boel aangesloten? Upload dan de volgende code naar de Arduino Board. De LED begint nu te knipperen.

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the Uno and
  Leonardo, it is attached to digital pin 13. If you're unsure what
  pin the on-board LED is connected to on your Arduino model, check
  the documentation at http://www.arduino.cc

  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
 */


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Werkt het? Probeer dan eens de delay te veranderen naar bijv. 500 (een halve seconden) of 2000 (2 seconden). De LED gaat nu sneller of minder snel knipperen.