ITTT Merlijn De Heus | Shy Head

by merlijndeheus in Circuits > Arduino

49 Views, 1 Favorites, 0 Comments

ITTT Merlijn De Heus | Shy Head

head.png

Voor ITTT heb ik een verlegen hoofd gemaakt. Een piepschuimen manequin hoofd dat weg kijkt wanneer iemand te dichtbij komt. Dit is het laatste vak dat ik nodig heb voor mn propedeuse en hiermee heb ik bijna genoeg punten voor jaar 3.

Supplies

https://www.tinytronics.nl/nl/platformen-en-systemen/m5stack/accessoires/m5stack-servo-kit-360

https://www.tinytronics.nl/en/sensors/distance/ultrasonic-sensor-hc-sr04

https://www.tinytronics.nl/en/sensors/sound/czn-15e-electret-condenser-microphone

https://solow.nl/products/piepschuim-model-hoofd-vrouw-wit

Brainstormen

MindmapITTT.png
sketches.png

Ik ben dit project begonnen met het brainstormen van verschillende ideeën middels een mindmap. En wat grove schetsen.

Concrete Concepten

Concepts.png

Hierna ben ik meer concrete concepten gaan schrijven voor het project.

Eerst heb ik in korte woorden concepten uitgelegd voordat ik vervolgens een keuze maakte op basis van haalbaarheid en persoonlijke interesse. Het concept dat ik koos was "een hoofd dat berekend waar geluid vandaan komt en naar de oorsprong kijkt."

Dit idee ben ik vervolgens verder uit gaan werken.

Keuze Uitwerken/testen

WatchConcept.png
triangulationsketch.png
MicSoldeer.jpg
TriangulationSetup.jpg
Head.jpg

Eerst ben heb ik een korte omschrijving opgesteld van mijn concept met daarnaast de benodigdheden.

Dit was ook het eerste onderdeel waarvoor ik heb gesoldeerd. Het idee was dat ik de waardes uit 3 microfoons zou gebruiken om geluidsbronnen te trianguleren en op basis daarvan een hoofd de juiste richting in te sturen. Dit concept bleek uiteindelijk niet haalbaar te zijn. Dit kwam grotendeels door de ruis uit de microfoons die accurate readings niet toestond. Hierdoor heb ik uiteindelijk moeten overstappen tot een ander concept. Hierbij heb ik gekozen voor een concept dat erg leek op dat waar ik al mee bezig was om zo niet helemaal opnieuw te hoeven beginnen. Mijn grootste les hieruit was om realistisch te blijven en niet iets te proberen te maken dat te ingewikkeld/onhaalbaar is.


Niet goed werkende code voor triangulation project:


#include <Servo.h>


const int mic1 = A0;

const int mic2 = A1;

const int mic3 = A2;

Servo myservo;


void setup() {

 Serial.begin(9600);

 myservo.attach(9);

 pinMode(mic1, INPUT);

 pinMode(mic2, INPUT);

 pinMode(mic3, INPUT);

}


void loop() {

 int mic1Value = analogRead(mic1);

 int mic2Value = analogRead(mic2);

 int mic3Value = analogRead(mic3);

  

 int direction = determineDirection(mic1Value, mic2Value, mic3Value);

 myservo.write(direction);

  

 delay(100); // Short delay to avoid excessive readings

}


int determineDirection(int val1, int val2, int val3) {

 // Basic algorithm to determine direction based on signal strength

 if (val1 > val2 && val1 > val3) {

  return 0; // Assume 0 degrees for mic1

 } else if (val2 > val1 && val2 > val3) {

  return 90; // Assume 90 degrees for mic2

 } else {

  return 180; // Assume 180 degrees for mic3

 }

}



Overstappen Naar Ander Concept

Shy Concept.png
PrototypeShy.jpg

Toen mijn triangulation code niet werkte (waarschijnlijk vanwege teveel ruis) besloot ik over te stappen naar een ander idee uit mn concepten dat leek op was ik al had zodat ik niet veel nieuwe componenten nodig zou hebben en door kon met waar ik al mee bezig was.

Dit concept was een hoofd dat verlegen weg kijkt wanneer je te dichtbij komt. Ik vond het idee dat technologie hier een "emotie vertoond" erg interessant.


Code uiteindelijk project.


#include <Servo.h>


const int trigPin = 9;

const int echoPin = 10;

const int servoPin = 7;

Servo myservo;


bool hasMoved = false;


void setup() {

 Serial.begin(9600);

 myservo.attach(servoPin);

 pinMode(trigPin, OUTPUT);

 pinMode(echoPin, INPUT);

}


void loop() {

 long duration;

 int distance;


 // Clear the trigPin

 digitalWrite(trigPin, LOW);

 delayMicroseconds(2);


 // Set the trigPin HIGH for 10 microseconds

 digitalWrite(trigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(trigPin, LOW);


 // Read the echoPin

 duration = pulseIn(echoPin, HIGH);


 // Calculate the distance

 distance = duration * 0.034 / 2;


 // Print the distance to the Serial Monitor

 Serial.print("Distance: ");

 Serial.println(distance);


 // Move the servo based on the distance

 if (distance > 0 && distance <= 32) {

  if (!hasMoved) {

   myservo.write(100); // Move clockwise

   Serial.println("Moving clockwise...");

   delay(1000); // Move for 1 second

   myservo.write(90); // Stop

   Serial.println("Stopped");

   hasMoved = true;

  }

 } else if (hasMoved && distance > 32) {

  myservo.write(80); // Move counterclockwise

  Serial.println("Returning to original position...");

  delay(900); // Slightly reduced move time to prevent overshoot

  myservo.write(90); // Stop

  Serial.println("Stopped");

  hasMoved = false;

 }


 delay(100); // Short delay to avoid excessive readings

}

Debugging/uitwerken

Toen dit laatste onderdeel werkte heb ik alles samengevoegd en heb ik de elektronica in een schoenendoos verwerkt.

Ook heb ik exacte waardes in mijn code iets getweaked om betere meer accurate resultaten te krijgen.

Ik heb ervoor gekozen om het in een schoenendoos de verwerken omdat het mij interessant leek om dit te maken met het idee dat je dit in een zolder of opslagruimte zou kunnen verbergen zodat gebruikers die het tegenkomen een onverwachte interactie hebben. Een andere verklaring zou mogelijk een moderne indie horror escape room zijn in een woonhuis.