Inhoud

Introductie

Bij deze CoderDojo gaan we verkeerslichten maken. Dat kan met:

Als je met de micro:bit of Arduino aan de slag gaat moet je zelf een circuitje bouwen. Daarvoor hebben we natuurlijk gekleurde LEDjes, en daarnaast ook knopjes en fotocellen waarmee je je verkeerslicht verder kunt uitbreiden.

Scratch

Elektronica voor verkeerslicht

Breadboard

Je kunt een circuit bouwen op een zogenaamd breadboard. Deze zijn er in allerlei soorten en maten. Op dit schema kun je zien welke gaatjes (elektrisch) met elkaar verbonden zijn.

LED

Net als batterijen hebben LED lampjes een plus en een min. Als je goed kijkt zijn de pootjes van de LED's niet even lang: het net iets langere pootje is de plus, de kortere de min.

Weerstand

Een weerstand zet een deel van de stroom die er doorheen loopt om in warmte. Hiermee kun je bijvoorbeeld andere onderdelen in je circuit, bijvoorbeeld een LED, beschermen tegen te hoge spanningen.

Fotocel

Een fotocel is een soort weerstand, met de speciale eigenschap dat de sterkte van de weerstand afhangt van hoeveel licht er op de fotocel valt. Deze hoeveelheid licht kun je meten met zowel de micro:bit als de Arduino.

micro:bit

micro:bit visueel

De verbinding testen

Een LED laten knipperen

  1. Maak het volgende circuit (met behulp van een breadboard).



    Als je geen DragonTail hebt kun je dit schema maken, je hebt dan ook een paar krokodillenbekken nodig.

  2. Schakel nu de LED in door de juiste output (pin) op 1 te zetten.
  3. micro:bit code
  4. Nu wil je dat de LED daarna ook weer uit gaat.
    micro:bit code
  5. Er zit geen tijd tussen het aan- en uitgaan!
    micro:bit code
  6. Nu wil je dit blijven herhalen.
    micro:bit code
  7. Nu hebben we 1 LED, kun jij het verkeerslicht afmaken?

De micro:bit knoppen gebruiken

Veel verkeerslichten reageren op de omgeving, bijvoorbeeld wanneer een auto tot de streep rijdt of een fietser op een knop drukt. Gebruik nu de micro:bit knoppen om het verkeerslicht op groen (of juist op rood) te laten springen. Je kunt hiervoor een als ... dan ... blok voor gebruiken.

micro:bit code

De micro:bit lichtsensor gebruiken

De LEDs voor op de micro:bit werken als een soort lichtsensor. Door de lichtniveau variabele te gebruiken kun je het verkeerslicht laten reageren op de hoeveelheid licht in de omgeving. Probeer bijvoorbeeld door je hand op de micro:bit te leggen het verkeerslicht op groen te laten springen. Je hebt hiervoor een vergelijking nodig, die vind je in het menu Logisch.

micro:bit code

De fotocel als lichtsensor gebruiken

Je kunt ook een aparte fotocel als lichtsensor gebruiken. Deze moet je aansluiten op pin 0, 1 of 2. Let op: Als je verkeerslicht 3 LEDs heeft moet je een van die LEDs aansluiten op pin 8, 12 of 16.

De fotocel sluit je als volgt aan (in dit voorbeeld op pin 2):

Net als in het vorige voorbeeld heb je een vergelijking nodig, dit keer alleen niet met lichtniveau maar met de waarde van de pin waar je de sensor op hebt aangesloten.

micro:bit code

micro:bit Python code

Je kunt op meerdere manieren Python code voor de micro:bit schrijven:

Het voordeel van Mu is dat je code rechtstreeks naar de micro:bit wordt geschreven.

Een overzicht van alle Python functies voor micro:bit vind je hier.

Een LED laten knipperen

  1. Maak het volgende circuit (met behulp van een breadboard).
  2. Begin het programma door alle functies voor de micro:bit te laden.
    from microbit import *
  3. Schakel nu de LED in door de juiste output (pin) op 1 te zetten. Dit doe je door een functie van de pin 0 aan te roepen, namelijk write_digital
  4. Python code
    pin0.write_digital(1)
  5. Nu wil je dat de LED daarna ook weer uit gaat.
    Python code
    pin0.write_digital(1) pin0.write_digital(0) from microbit import *
  6. Er zit geen tijd tussen het aan- en uitgaan! Om de code een tijdje te laten wachten gebruik je de functie sleep
    Python code
    pin0.write_digital(1) sleep(1000) pin0.write_digital(0)
  7. Nu wil je dit blijven herhalen. Dit doe je door een loop te maken die altijd waar ( = True) is.
    Python code
    while True: pin0.write_digital(1) sleep(1000) pin0.write_digital(0) sleep(1000)
  8. Nu hebben we 1 LED, kun jij het verkeerslicht afmaken?

De micro:bit knoppen gebruiken

Veel verkeerslichten reageren op de omgeving, bijvoorbeeld wanneer een auto tot de streep rijdt of een fietser op een knop drukt. Gebruik nu de micro:bit knoppen om het verkeerslicht op groen (of juist op rood) te laten springen. De toestand van knop A kun je uitlezen via pin 8: als de knop is ingedrukt geeft deze waarde 0, anders waarde 1. Met een als ( = if) kun je deze controle doen.

Python code
while True: if pin5.read_digital() == 0: pin0.write_digital(1) sleep(1000) pin0.write_digital(0) sleep(1000)

De fotocel als lichtsensor gebruiken

De lichtsensor op de micro:bit zelf werkt nog niet in Python. Je moet dus een aparte fotocel als lichtsensor gebruiken. Deze moet je aansluiten op pin 0, 1 of 2. Let op: Als je verkeerslicht 3 LEDs heeft moet je een van die LEDs aansluiten op pin 8, 12 of 16.

De fotocel sluit je als volgt aan (in dit voorbeeld op pin 2):

Net als in het vorige voorbeeld heb je een als nodig, alleen moet je dit keer de waarde van pin 2 uitlezen en vergelijken met een bepaalde waarde (zie de micro:bit visueel stap). Let op: je moet nu niet een digitale (0 of 1) waarde maar een analoge waarde uitlezen, hiervoor is weer een aparte functie.

micro:bit code
while True: if pin2.read_analog() > 250: pin0.write_digital(1) sleep(1000) pin0.write_digital(0) sleep(1000)

Arduino

Arduino visueel

Om een arduino visueel te programmeren kunnen we gebruik maken van de mblock5 editor (http://www.mblock.cc/mblock-software/).

Om een verkeerslicht te simuleren beginnen we met 1 led lampje en een arduino. Vervolgens kun je zelf aan de slag om een verkeerslicht in elkaar te zetten.

Een led laten knipperen

  1. Maak het volgende circuit (met behulp van een breadboard).
  2. Schakel nu de LED in door de juiste output op HOOG te zetten.
  3. mBlock code
  4. Nu wil je dat de LED daarna ook weer uit gaat.
    mBlock code
  5. Er zit geen tijd tussen het aan- en uitgaan!
    mBlock code
  6. Nu wil je dit blijven herhalen.
    mBlock code
  7. Nu hebben we 1 LED, kun jij het verkeerslicht afmaken?

Een led laten knipperen door een lichtsensor (de fotocel)

  1. Maak het volgende circuit (met behulp van een breadboard).
  2. We kunnen nu de waarde van deze lichtsensor uitlezen met het blok:

    Let wel op: dit blok moet gecombineerd worden met een functie. Bijvoorbeeld 'groter dan' of 'kleiner dan'.

    Kun jij nu met de lichtsensor een LED aan of uit zetten?

    mBlock code

Arduino code

Intro Arduino

Als we met Arduino een programma schrijven dan hebben we altijd 2 'functies' die we altijd gebruiken, Arduino roept deze voor ons aan.

De functies zijn als volgt:

//Deze functie wordt aangeroepen zodra de arduino opstart, //dit gebeurt dan ook maar 1 keer. void setup() { } //Zodra de setup() functie is afgerond, //wordt de loop() functie constant aangeroepen. void loop() { }

Het is dan ook verstandig om in de void setup() functie alle instellingen voor het programma uit te voeren.

Vervolgens kunnen we logica, zoals een led aan of uit zetten, in de void loop() functie zetten.

Handige Arduino functies
//Deze functie zorgt ervoor dat een pin op de Arduino als output kan functioneren. pinMode(pinNummer, OUTPUT); //Deze functie zorgt ervoor dat een pin op de Arduino als input kan functioneren. pinMode(pinNummer, INPUT); //Deze functie stuurt een HOOG signaal naar een pin digitalWrite(pin, HIGH); //Deze functie stuurt een LAAG signaal naar een pin digitalWrite(pin, LOW); //Deze functie leest een analoge waarde van een analoge pin uit. analogRead(pin); //Deze functie kan zo gebruikt worden: int value = analogRead(pin); //Deze functie laat het programma een aantal milliseconden wachten: delay(milliseconden)

Programmeren Arduino

  1. Maak het volgende circuit (met behulp van een breadboard).
  2. We gaan een led programmeren, hiervoor moeten we eerst een aantal instellingen goed zetten. We gaan bijvoorbeeld een pin hoog of laag aansturen. Dit betekent dat de arduino dus een signaal output.

    Weet jij nog hoe we een arduino pin kunnen configureren als output?

    Vergeet niet dat we instellingen in de void setup() functie plaatsen, zodat deze maar een keer uitgevoerd worden.

    Arduino code
    int groeneLedPin = 0; void setup() { pinMode(groeneLedPin, OUTPUT); } void loop() { }
  3. Nu hebben we een pin als output gedefinieerd, kun jij hier een HOOG signaal naar toe sturen?

    Arduino code
    int groeneLedPin = 0; void setup() { pinMode(groeneLedPin, OUTPUT); } void loop() { digitalWrite(groeneLedPin, HIGH); }
  4. Het ledje staat nu aan, kun jij het uit zetten?

    Arduino code
    int groeneLedPin = 0; void setup() { pinMode(groeneLedPin, OUTPUT); } void loop() { digitalWrite(groeneLedPin, LOW); }
  5. En heb je een idee hoe we het ledje kunnen laten knipperen?

    Arduino code
    int groeneLedPin = 0; void setup() { pinMode(groeneLedPin, OUTPUT); } void loop() { digitalWrite(groeneLedPin, LOW); delay(1000); //1 seconde digitalWrite(groeneLedPin, HIGH); delay(1000); //1 seconde }

Nu hebben we 1 led, kun jij een stoplicht maken met 3 ledjes ?

Een led laten knipperen door een licht sensor

  1. Maak het volgende circuit (met behulp van een breadboard).
  2. We kunnen nu de waarde van deze licht sensor uitlezen met de functie:
    //Geeft een getal terug tussen de 0 en 1023. (int) analogRead(pin); //Sla de waarde op in 'gelezenWaarde' int gelezenWaarde = analogRead(pin);
  3. We voegen nu een input toe aan ons systeem, weet jij nog hoe we dit instellen?

    Arduino Code
    int groeneLedPin = 0; int lichtSensorPin = 1; void setup() { pinMode(groeneLedPin, OUTPUT); pinMode(lichtSensorPin, INPUT); } void loop() { }
  4. Als de waarde van de lichtsensor nu hoger is dan bijvoorbeeld 500, kun jij dan de led uitzetten?

    Arduino Code
    int groeneLedPin = 0; int lichtSensorPin = 1; void setup() { pinMode(groeneLedPin, OUTPUT); pinMode(lichtSensorPin, INPUT); } void loop() { int gelezenWaarde = analogRead(lichtSensorPin); if (gelezenWaarde > 500) { digitalWrite(groeneLedPin, HIGH); } else { digitalWrite(groeneLedPin, LOW); } }
  5. Nu hebben we 1 led, kun jij een stoplicht maken met 3 ledjes en 3 licht sensoren?