ITTT_3
De volledige projectbeschrijving met stappenplan, logboek ed. zijn opgenomen in de bijlage:
- "30-07-2020_Boersma_Floris_ITTT_ProjectDocumentatie_v3.pdf".
------------------------------------------------------------------------------------------------------------
Deze opdracht is onderdeel van mijn opleiding. Het concept dat ik wilde uitwerken m.b.v. Arduino was van het begin af aan al bedoeld een vorm van entertainment te zijn. Ik wilde een concept uitwerken dat mensen van hun stuk zou brengen, zou laten schrikken, of laten lachen. Ik kwam op het idee van een spin, na wat gepieker, sinds een spin over het algemeen een gevreesd dier is, over de hele wereld. Een spin, dat sluit goed aan op mijn concept of boodschap vind ik, en dan van iets als rubber. Dat maakt de spin naar extra kriebelig en friemelig.
Supplies
Software & Hardware en onderdelen nodig voor het project:
- Arduino 1.8.1 software t.b.v. de sketches
- Standaard arduino-kit met o.a. buzzer en batterijvoeding 5V met kabels en aansluitmateriaal
- 2X LED-lampjes (voor de ogen van de spin)
- weerstanden
overige hardware en constructiemateriaal:
- relais
- speaker uit een muziekkaart (met “Happy” als afspeelgeluid)
- extra stroomtoevoer 3X AA-Batterijen t.b.v. de 1,5V LED-verlichting (optioneel groen, geketend, in serie)
- Boomschors (voor de hardware) en een houten plank als fundering, 2X houten stok
- Rubberen spin en 2X Plastic spin (optioneel)
Gereedschap:
- Soldeerbout en soldeer, printplaat
- Boormachine met boortjes en een lijmpistool
Het Plan Van Aanpak (stappenplan):
Voor de aanpak van de opdracht heb ik een plan van aanpak gevolgd. Een aantal stappen herhalen zich steeds, zoals bijvoorbeeld het programmeren. Ik kijk steeds met nieuwe code of de gewenste effecten in de Arduino elektronica optreden en of de foutverbetering lukt.
Plan van aanpak:
- Bestuderen van de opdracht
- Verkennen van de mogelijkheden van de Arduino starterkit (video-files Youtube en arttikelen)
- Plan met idee uitgewerkt aan de hand van een korte brainstorm met een mindmap
- Uitwerken storybook adh van Arduino mogelijkheden
Eerste acties uitgevoerd:
- Programma installatie om Arduino aan te sturen op mijn PC geïnstalleerd
- Arduino script ideeën schrijven
- Programmeren, compileren en uploaden naar de Arduino
- Try out met fritzel
- Bekabeling en componenten voormonteren op het breadboard
Resultaatscontrole:
- Tests uitvoeren en kijken of het gewenste resultaat is bereikt
Bijsturen:
- herprogrammeren en weer tests uitvoeren tot het gewenste resultaat en uitgewerkt in mijn storybook
Daarna:
- Uitwerken en vertalen naar de spider met solderen (op basis van de breadboard setup
- Demonstreren en reacties van proefpersonen beschouwen
- Logboek bijhouden en verslaglegging incl. de steeds gemaakt foto’s en video’s voor presentatie
Beschrijving Van Het Ontwerp
Mijn Concept
Mijn concept was van het begin af aan al bedoeld een vorm van entertainment te zijn. Ik wilde een concept uitwerken dat mensen van hun stuk zou brengen, zou laten schrikken, of laten lachen. Ik kwam op het idee van een spin, na wat gepieker, sinds een spin over het algemeen een gevreesd dier is, over de hele wereld. Een spin, dat sluit goed aan op mijn concept of boodschap vind ik, en dan van iets als rubber. Dat maakt de spin naar extra kriebelig en friemelig.
Ik wil mensen verrassen met mijn spin, hopelijk ook laten schrikken als de ogen van de spin bij benaderen fel rood oplichten, en de spin begint te piepen. Het idee of concept van een teddybeer opvullen met elektronica was bekend, zo stelde een van de docenten. Dat gaf mij een idee: ik vul geen zachte knuffel met elektronica, nee ik geef er mijn eigen draai aan. Mijn concept was een minimale hoeveelheid elektronica in een friemelend rubber beest stoppen, en dat beest versterken met setting en attributen. De elektronica zou ergens anders zitten, verstopt in of achter het geheel.
Toen ik doorkreeg dat ik een willekeurige wenskaart kon slopen en de muziek kon spelen bij mijn concept, was het concept eigenlijk al compleet. Zeker als de muziek een vervormde versie van het liedje ‘Happy’ is van Farrell Williams. Persoonlijk vind ik namelijk dat stukje herkenning het project versterkt, samen met een ongewone mutatie daarop. Dit laatste complimenteert zo het geheel; mensen zijn nieuwsgierig naar mijn opstelling. Mensen komen kijken, schrikken als de spin gaat piepen en de ogen opvlammen, en zijn dan een tel of twee verward (of geamuseerd) als ze doorkrijgen dat het geheel een valse variant van de bekende ‘Happy’ kan afspelen.
Het vervormde liedje en de glow in the dark- spinnetjes brachten mij op het idee om de setting radioactief vervuild te maken, wat naar mijn mening die corrupte, vervormende sfeer complimenteert. Daarnaast liet ik mij inspireren door games zoals de Fallout-serie van Bethesda.
Techniek en vormgeving:
Het technische gedeelte bestaat uit de Arduino zelf in combinatie met electronische componenten voor sensoren, bekabeling en een printplaat. Het programma, waarmee functies worden uitgevoerd en sensoren worden bediend wordt later toegelicht. Met behulp van solderen worden na testen op een breadboard de uiteindelijke componenten zoals sensoren en voeding en verlichting definitief in de basisopstelling verbonden.
Los van de standaard arduino-kit, heb ik voor mijn project extra hardware gebruikt zoals een relais en een nieuwe buzzer. Niet te vergeten: de speaker met Happy heb ik uit een Hallmark-wenskaart gehaald, zo een die bij het open slaan van de kaart een mechanisme activeert. Naast een 5V-stroomtoevoer heb ik een 1,5V LED-verlichting gebruikt. Deze is vanwege de lagere werkspanning verbonden via een weerstand met de voeding.
Ook qua uitvoering kwam er enig “technisch” knutselwerk aan te pas. Met boren en lijmen en zagen heb ik een basisopstelling gebouwd. Deze basis wordt zodanig opgemaakt dat er als het ware een enge scenery ontstaat van een gevaarlijk spin met rode ogen in een giftige (lekkende gifvaten) omgeving. Dit door alle elementen zoals spin, gifvaten en sensoren te bevestigen aan de basis.
Belangrijk was ook om de verschillende componenten zoals voeding, bekabeling, maar ook de akoestische afstandsmeting sensor en de Arduino zelf te verbergen in de basisopstelling. De meeste componenten zijn dan ook weggewerkt achter de boomschorsplak.
Gebruikte bronnen:
Onderdelen en bestellen van onderdelen
Tutorials, hulp, forums en kennisvergaring
www.viralsciencecreativity.com, www.youtube.com, www.arduino.cc, www.codementor.io, www.instructables.com,www.lynda.com
Klaarmaken Fundering En Scenery
De arduino met de elektronica moest een plek hebben om in gestald te worden, het schors was daar meer dan geschikt voor sinds dit hol liep als een soort cylinder. Ik had dit tijdens het tuincentrumbezoek al bedacht, toen ik daar naar stukken schors stond te kijken, als decor en ondergrond voor de spin. Het schors fungeerde zo als behuizing, decoratie en ondergrond. Ook koos ik schors om het geheel wat natuurlijker te maken, hetzelfde geldt voor de houten fundering. Ik vond spinnen op metaal, plastic en dergelijken toch net te veel van het goede om het zo te stellen. De spin paste er toen niet echt in.
De scenery geeft de sfeer aan van mijn concept. Een gevaarlijk ogende spin.
De scenery is tevens fundering om dingen aan vast te maken en om sensoren en andere hardware te verbergen. Boor gaten in de fundering voor de stokken. De stokken moeten aan 1 kant gelijmd worden aan de boomschors, voor de basis van het geheel.
Schematische Opzet Bekabeling
Handig om van te voren de proefopstelling te bouwen, de code te schrijven en te testen voordat er definitief gesoldeerd wordt. Daarvoor heb je het breadboard om de hardware alvast op te zetten en te testen op functionaliteit. Je kunt ook gebruik maken van handige hulpprogramma's zoals "Fritzing" om de schakeling te simuleren. Het programma Fritzing bestaat uit drie delen, een breadboard view, een schema view, en een printplaat view.
De drie views zijn aan elkaar gekoppeld, een wijziging in één van de views betekent dat het in de andere twee wordt bijgewerkt. Het is de bedoeling dat je eerst een werkende schakeling natekent in de breadboard view, het schema controleert en daarna de print ontwerpt.
Toelichting op de foto 1:
1 = Arduino Uno Board
2 = Relay/ Relais (Onderdeel van muziek-aansturing)
3 = Stroomvoorziening 1 (muziek)
4 = Stroomvoorziening 2 (arduino)
5 = Hoofdschakelaar
6 = Afstandssensor (Akoustisch, sonar)
7 = Buzzer
8 = LED 1 (via weerstand)
9 = LED 2 (verlichting, via weerstand)
10 = Muziek speaker
11 = Muziek chip (uit de post kaart)
12 = Bread board
Voorbereiden Hardware in De Spin
Boor gaten in de rubberen spin, dit hoeft overigens niet met een boor maar kan ook door de
metalen uiteinden van de ledjes in de spin te prikken.
Maak de gaten waar de ogen moeten komen en 1 gat onder de kop voor de bedrading.
---------------------
De glow in the dark spinnetjes
Deze spinnetjes complimenteerde mijn setting en de hoofdspin te goed om weg te laten. Simpel, compact maar veelzijdig bleken deze goedkope spinnetjes mijn project amper te hinderen. Het ontleden van de spinnetjes bleek naast makkelijk, zelfs profijt-gevend. Ik heb er LED lampjes in gestopt, om zo de spinnen te laten opgloeien, alsof ze zijn gemuteerd. Dit is precies een van de dingen die ik in mijn project wilde versterken: een setting waarin alles lijkt vervormd of bestraald. Ook liet het de spin, de hoofdspin dus, extra opgaan in zijn element en andersom; door het toevoegen van de spinnetjes lijkt het alsof de grote de moeder is, of dat de spinnen in ieder geval verbonden zijn.
De muziekspeler
Ik heb een oude wenskaart gebruikt als muziekspeler. Daarvoor bleek wel een eigen batterij stroomtoevoer , apart geregeld via een relais, nodig. Het geluid klonk via deze oplossing met extra batterijcapaciteit helder, zuiver en luider. Tot mijn milde teleurstelling, want dat valse toontje vond ikzelf nou net zo uniek eraan. Ik heb geprobeerd hetzelfde effect te behalen door andere sensoren en weerstanden te gebruiken, waaronder een potentiometer. Maar dit laatste zorgde bijvoorbeeld voor een lager volume en een lagere kwaliteit audio: er kwam een ruis bij. Hoe hoger de weerstand, hoe meer ruis en ook effect op andere aangesloten componenten.
Wel wilde ik juist het valse toontje gebruiken in mijn project. Tijd om het internet te raadplegen: de vervormde toon kwam door een onvoldoende voltage, waardoor de speakers op lagere kwaliteit muziek vervormd laten horen. Later ontdekte ik per ongeluk, tijdens wat rondklooien met de LED-verlichting van het tuincentrum, dat de ‘Corrupte Farrell’ terug was, met een zwakke verlichting erbij. De lichtjes lijken op de maat van de muziek te gaan, doordat het circuit van ‘Happy’ en de lichtjes toen dus per ongeluk verbonden waren. Het (andere) interessante hier was, dat de schakeling omgekeerd was. Als de schakelaar van de verlichting uit was, gebeurde het voorheen genoemde. Stond de schakeling aan, gebeurde dit niet: geen muziek en zuiver en constant brandende LED-lichtjes. Om dit unieke geluid en beeld dus te behouden, heb ik deze ‘onbedoelde’ schakeling gebruikt voor mijn project. Perfectie in imperfectie, in zekere zin. Dit is te zien in mijn code: als de relayPin op LOW staat, gaat ‘Happy’ juist spelen en andersom.
Hardware in De Scenery Voorbereiden
Al je andere hardware in het circuit plaats je achter de schors, uit het zicht voor de presentatie.
Verbind nu je arduino chip met de printplaat. Daarna verbind je de stroomtoevoer met de chip.
Arduino Code, Programmeren
Schrijf het programma voor je arduino-software. Daarna doe je een upload naar de Arduino.
Mijn Arduino Sketch Code is ook opgenomen als aparte bijlage "Arduino_ITTT_Code.txt".
De broncode met toelichting ( Arduino Sketch code ) staat hieronder:
Een arduino programma, ook vaak een scetch, schets, genoemd, bestaat uit minstens twee programma blokken: De void setup en de void loop.
In mijn programma heb ik de akoestische sensor gebruikt voor het bepalen van de afstand “spin – hand”. Deze afstand wordt in een loop met een bepaalde frequentie gemeten delayMicroseconds(10).
Er zijn twee afstands triggers gedefinieerd waarmee de led-ogen van de spin gaan knipperen met buzzergeluid en een tweede die als verassing het liedje “happy” laat horen.
Led’s en bijvoorbeeld een buzzer op het moederboard kunnen worden aan en uitgezet (geactiveerd en gedeactiveerd) door de pinwaarden High en Low.
Hieronder worden de pinsettings vastgelegd voor de gebruikte pinnen 2,8,9,10,11 en 13 op het moederboard. Ook het int (integer) commando wordt gebruikt om diverse waarde van variabelen op te slaan in het geheugen zoals bijvoorbeeld int distance.
// RELAIS (MET HAPPY)
const int touchPin = 2; //connect output
const int relayPin = 8; //deze pin stuurt de muziek aan, positie 8 op arduino
//Ultrasonic Distance alarm
const int echoTrig = 9; //de trigPin van de sonar-sensor op plaats 9 op de arduino
const int echoPin = 10; //de echoPin van de sonar-sensor op plaats 10 op de arduino
const int buzzer = 11; //de buzzer op plaats 11 op de arduino
const int ledPin = 13; //de ledPin op plaats 13 op de arduino
// defines variables
long duration;
int distance; // de afstand (sonar sensor)
int safetyDistance;
Aan het begin van het programma staat de void setup().
In de void setup() staat wat ik allemaal gebruik qua variabelen, pinnen etc. De void setup() wordt eenmalig gedraaid bij opstarten van de code.
void setup() {
//Hier benoem ik via welke pin de Relais wordt aangestuurd waarmee muziek wordt afgespeeld
pinMode(relayPin, OUTPUT);
//VIRALSCIENCE EchoBuzzer met LED's
pinMode(echoTrig, OUTPUT); // Zet de echoTrig als een Output
pinMode(echoPin, INPUT); // Zet de echoPin als een Input
pinMode(buzzer, OUTPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Start de seriële communicatie om op de pc de waarden te laten zien
}
void echoCheck () { //ververst de sonar sensor
// Verfrist de echoTrig
digitalWrite(echoTrig, LOW);
delayMicroseconds(2); //(voor 2 microseconden op LOW, daarna op HIGH voor 10)
// Zet de echoTrig op HIGH state voor 10 micro seconden
digitalWrite(echoTrig, HIGH);
delayMicroseconds(10);
digitalWrite(echoTrig, LOW);
}
// In de volgende functie of subroutine void runSong () wordt de happy muziek afgespeeld.
Dit gebeurt doordat het relais wordt geschakeld waarmee er stroom komt op de electronicatie met de luidspreker die de muziek laat horen.
Na activeren digitalWrite(ledPin, LOW) wordt 5Volt op de pin gezet; dit gebeurt tijdens een specifieke tijdsduur via het commando delay(10000) waarna het relais weer terugschakelt naar de basisstatus met digitalWrite(relayPin, HIGH) (0 Volt) en de stroom voorziening naar de muziek weer wordt afgeschakeld. Het relais is gebruikt om een aparte stroomvoorziening te schakelen voor de muziek waarmee niet alle stroom wordt afgetapt van het Arduino board. Ter controle wordt op de console met het commando Serial.print("Happy is playing!") het bericht getoond.
De functies ‘void runSong () ‘ en ‘void flickerEyes () ‘. De void functies losten het probleem op dat de muziek stopte met spelen na het deactiveren van de Sonar Sensor. Het idee is namelijk, dat bij genoeg benadering, de spin stopt met piepen en Happy afspeelt. Hier stopte het abrupt mee als een object (zoals mijn hand) het detectieveld dus weer verliet. Door een void hier te gebruiken, voerde hij bij activering de void uit, die het liedje dus met lengte afspeelt, ook nadat de Sonische Sensor gedeactiveerd was. De void stopt namelijk niet halverwege met het uitvoeren van zijn taak (in normale omstandigheden), het is een functie.
void runSong () { //speelt de happy muziek af, print op de console een bericht.
digitalWrite(ledPin, HIGH); //Activeert de ogen van de spin
digitalWrite(relayPin, LOW);
delay(10000); //Aanpasbare tijdsduur
digitalWrite(relayPin, HIGH);
Serial.print("Happy is playing!"); //Deze lijn code print in de console een bericht
}
// In de subroutine void flickerEyes () wordt het knipperen van de ogen (Leds) van de spin geregeld. Dit gaat direct via de pinnen van het Arduino board.
De Leds knipperen vijf keer achterelkaar door een integer te gebruiken
for (int i = 1; i < 5; i++)
De knipperfrequentie is geregeld door de LED’s met een aantal miliseconden delay(200) die aan en uit worden gezet digitalWrite(ledPin, LOW en digitalWrite(ledPin, HIGH met een delay(250).
void flickerEyes () { // de ogen van de spin die gaan knipperen, 5 keer (door de i <5)
for (int i = 1; i < 5; i++){
digitalWrite(ledPin, LOW);
delay(200);
digitalWrite(ledPin, HIGH);
delay(250);
}
}
// In de subroutine void loop() wordt de continue akoestische afstandsmeting gedaan tussen sensor en object (hand). Deze waarde wordt steeds vastgelegd in de variabele distance en daarna als waarde safetyDistance die wordt vergeleken met twee vaste triggerwaarden: (safetyDistance <= 70) en (safetyDistance <= 20). De afstand wordt berekend aan de hand van de tijd die de geluidsgolf nodig heeft om van en naar de sensor te gaan met: distance= duration*0.034/2;
Er worden dan twee triggers (afstandsmetingen) gebruikt.
- De eerste triggers activeert de buzzer en de led ogen. De spin gaat piepen en met de ogen knipperen bij het dichterbij komen dan de eerste triggerwaarde. (safetyDistance <= 70).
- De tweede trigger bij (safetyDistance <= 20) activeert de subroutine runSong () waarmee de muziek wordt afgespeeld.
Uiteindelijk worden afhankelijk van de afstandsmeting de buzzer geactiveerd met het commando digitalWrite(buzzer, HIGH) en ook de leds die knipperen voor de ogen van de spin met het commando digitalWrite(ledPin, HIGH).
Wanneer de tweede triggerwaarde wordt behaald safetyDistance <= 20 dan worden eerst de ogen en de buzzer uitgeschakeld door de comando’s digitalWrite(ledPin, LOW) en
digitalWrite(buzzer, LOW) waarna gelijk de subroutines runSong () wordt aangeroepen om de muziek af te spelen (uitleg hierboven en de ogen te laten knipperen via de subroutine flickerEyes ();
void loop() {
digitalWrite(relayPin, HIGH);
echoCheck();
// Leest de geluidsgolf (afgelegde) tijd in microseconden
duration = pulseIn(echoPin, HIGH);
// berekenen van de afstand
distance= duration*0.034/2;
safetyDistance = distance;
if (safetyDistance <= 70){ // het getal hier bepaalt de afstand dat de spin gaat piepen
digitalWrite(buzzer, HIGH);
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
digitalWrite(buzzer, LOW);
}
if (safetyDistance <= 20){ // het getal bepaalt wat de muziek speelt en de ogen knipperen
digitalWrite(ledPin, LOW);
digitalWrite(buzzer, LOW);
runSong (); // happy speelt af via de void die dat uitvoert
flickerEyes (); //ogen van de spin knipperen
}
Ter controle kan de afstand sensor-hand steeds op een nieuwe regel (println) getoond worden via serielle monitor optie in het Arduino sketch programma op de pc. Dit doe ik via de commando’s Serial.print("Distance: ") en Serial.println(distance).
Het Arduino board moet dan wel via de USB poort zijn verbonden met de pc.
// Print de distance op de Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
}
Downloads
Verbinden Van De Hardware
De relais die verbonden is aan je chip via kabels, verbind je nu aan de speakers.
Zo stuur je de speakers aan via de code op je chip.
Vergeet niet de serie-verlichting aan te sluiten en te voeden met een stroombron (de AA-batterijen).
Klaarmaken Printplaat, Solderen En Verlijmen Spinnen
Soldeer nu de respectievelijke componenten om ze te verbinden (via de printplaat).
De spin(nen) kan je op het schors lijmen en verbinden met het circuit door een gat in het schors te boren.
Controleren Resultaat
Om te kijken of alles werkt zoals bedacht was en getest was op het breadboard, kun je het eindresultaat nu controleren.
- kijk naar de verschillende afstanden waarop de sensor de spin activeert etc.
Als iets niet functioneert controleer dan;
- alle verbindingen op de printplaat;
- op kortsluiting;
- of de arduino code voor typfouten of overige errors.