Breadbert - Jouw High Five Vriendje
by maartenkramer123 in Circuits > Arduino
34 Views, 0 Favorites, 0 Comments
Breadbert - Jouw High Five Vriendje
Voor dit project heb ik een high five machine gemaakt. Het leek mij leuk om een daadwerkelijke interactie te hebben met mijn Arduino apparaat. Ik vind het altijd leuk om met zulke ideeën uit te werken, dus ik besloot deze de kans te geven. Ik dacht dus dat het een leuk idee zou zijn om een charactertje te hebben die jou een high five (of low five) zou geven. Hierdoor wanneer het ontwerp een succes was, zou ik ook meteen een high five kunnen ontvangen.
Supplies
Materialen:
- 1x Arduino Uno R3
- 1x USB kabel
- 1x SG90 mini servo
- 1x Ultrasonic Distance Sensor - 5V (HC-SR04)
- 3x M/M jumperdraad (20cm)
- 4x F/M jumperdraad (40cm)
- 1x MDF-plaat (80cm x 120cm x 3mm)
- 1x Paperclip
- 1x 4mm bout
- 1x 4mm moer
- 1x zonnebril (optioneel)
Gereedschap:
- Knijptang
- Houtlijm
- Kwast
- Lasersnijder
- Kleine ster schroevendraaier
Design
Ik had dus het idee van een character die je een high five gaf. Nu moest ik dit gaan designen. Niet alleen hoe en waar de onderdelen moesten, maar ook hoe hij eruit zou zien. Ik had uiteindelijk besloten op een simpel vierkant figuurtje met een grote arm aan zijn zijde. Hierdoor zou alle elektronica er netjes in kunnen passen en had hij ook nog een grappige vorm.
Versie 1
Voor mijn eerste versie was ik gegaan voor een kartonnen design. Ik maakte gebruik van een Kellogg's Mini doosje. Het had de bouw waar ik naar zocht en de Arduino Uno paste er perfect in. Deze versie had dat de high five getriggered werd door een knop aan de linkerzijde van Breadbert. Vervolgens zou een servomotor een aantal graden draaien met een klein handje eraan verbonden. De complexiteit van de interactie in deze versie was nogal simpel en de behuizing was achteraf een slecht idee, omdat het structueel zwak was. Als ik hierop zou gaan itereren, zou het een sterke behuizing moeten hebben en een meer unieke interactie.
De Bouw
Voor mijn nieuwe behuizing wou ik gebruik maken van lasersnijden. Door middel van makercase.com bouwde ik een ontwerp voor deze nieuwe behuizing. Ik vond dat, ookal was het enigzins een pluspunt dat mijn originele ontwerp zo compact was, meer ruimte noodzakelijk was. Deze nieuwe versie zou dus 50% groter zijn dan de vorige. Vervolgens in de Makerspace ging ik dit ontwerp uitwerken tot een fysiek object.
Het lichaam bestaat uit 2 onderdelen: Een hoofd en een arm. ik heb een opening van 1x1cm aan beide kanten geplaatst zodat de draden daar netjes doorheen kunnen. De behuizing heb ik door middel van houtlijm aan elkaar gelijmd. Je kan gebruik maken van een kwast om wat van de restanten van de lijm weg te vegen.
Verder vond ik het belangrijk om ervoor te zorgen dat ieder onderdeel netjes op zijn plek bleef zitten. ik heb daarom frames gebouwd om om deze onderdelen te staan voor extra stabiliteit. Bij bijvoorbeeld de Arduino Uno zit er nu een houten frame om die ook verbonden is met de deksel. De deksel heeft ook nog een opening voor de USB kabel.
Na aanrading van een medewerker bij de Makerspace, heb ik ook gebruik gemaakt van een zelfgemaakte kruk as voor de arm beweging. hier is een MDF stuk verbonden aan de servomotor door middel van een paperclip die door beide onderdelen heen gaat. verder heeft het MDF stuk een bout boven de opening van de paperclip. Hierdoor kan het samen met de servomotor draaien
Elektronica
De Arduino Uno wordt in zijn frame geplaatst, en dan verbonden met de USB kabel. Daarnaast worden de sensor en de servo bevestigd in de bovenarm van Breadbert. De sensor wordt met Vpp verbonden met de 5V van de Arduino. De ground wordt verbonden met de ground van de Arduino. de trig wordt verbonden met poort D12, en de echo wordt verbonden met D13. Dit wordt gedaan met behulp van de F/M kabels.
De servomotor wordt verbonden doormiddel van 3 M/M kabels door de bruine kabel te verbinden met ground, door de rode kabel te verbinden met de 3.3V van de Arduino, en door de gele kabel te verbinden met poort D7.
Code
Dit is de code die ik geschreven heb voor de interactie. Upload deze code naar jouw Arduino Uno via Arduino IDE.
Ik moest veel testen om de juiste graden te vinden voor een soepele beweging. Verder was de timing van de high five ook belangrijk om goed te krijgen.
#include <Servo.h>
Servo servo_1; // servo controller
int restPosition = 90; // angle of servo at rest
int turningAngle = 90; // total angle the servo turns over during operation
int servoPin = 7; // set pin for servo control
int pos = 90; // servo starting position
const int trigPin = 12;
const int echoPin = 13;
const float actionDistance = 6;
float duration, distance;
void setup() {
servo_1.write(restPosition); // initialize servo position set during attachment
servo_1.attach(servoPin); // start servo control
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void high_five() {
for (pos = restPosition; pos > restPosition-turningAngle; pos -= 1) { // goes from rest position to turned angle
servo_1.write(pos); // tell servo to go to position in variable 'pos'
delay(6); // delay between steps, so that servo can manage operation
}
delay(1000); // wait 1 second after reaching turned angle
for (pos = restPosition-turningAngle; pos <= restPosition; pos += 1) { // goes from turned angle to rest position
// in steps of 1 degree
servo_1.write(pos); // tell servo to go to position in variable 'pos'
delay(6); // delay between steps, so that servo can manage operation
}
delay(3000); // wait 3 seconds after arriving back at rest position
}
void loop() {
// prepare the sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// determine the distance between hand and sensor
duration = pulseIn(echoPin, HIGH);
distance = (duration*.0343)/2;
// log distance information
Serial.print("Distance: ");
Serial.println(distance);
delay(100);
// induce the high five when within distance
if (distance <= actionDistance) {
high_five();
};
}
Resultaat
Ik heb dus nu een werkend prototype gebouwd van mijn ontwerp volgens de eisen die ik had gesteld voor mijn iteratie. Met een toevoeging van een echte zonnebril heeft het ook nog een humoristische kant. Alle onderdelen zitten netjes op hun plek, het is makkelijk om ieder onderdeel te bereiken, de behuizing is mooi en functioneel en de interactie is logischer en meer immersief.
Ik heb heel veel geleerd over Arduino en alles daar omheen. Ik heb verder ook ervaring kunnen opdoen in wat meer fysiek werk ten opzichte van alleen coderen. Ik vond lasersnijden het allerleukste van dit project en ik ben blij dat ik het toch geprobeerd heb. Ik heb dit project echt mijn alles gegeven. Ik gaf bij mijn eerste versie 100% en bij mijn 2e versie 200%. Ik hoop dat je mijn Arduino avontuur interessant vond!