ITTT Merlijn De Heus | Shy Head
by merlijndeheus in Circuits > Arduino
49 Views, 1 Favorites, 0 Comments
ITTT Merlijn De Heus | Shy Head
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
Ik ben dit project begonnen met het brainstormen van verschillende ideeën middels een mindmap. En wat grove schetsen.
Concrete Concepten
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
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
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.