Breadbert - Jouw High Five Vriendje

by maartenkramer123 in Circuits > Arduino

34 Views, 0 Favorites, 0 Comments

Breadbert - Jouw High Five Vriendje

c8685ed2-23dc-4f84-acea-fa795495ec1f.jpg

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

Untitled.png

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

335179eb-491d-4e7c-933b-3beb400adba9.jpg

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

b8e930d8-01e2-4353-86e3-404e28185a70.jpg
IMG_9298.jpg
IMG_9300.jpg
IMG_9305.jpg

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

Glorious_Tumelo-Hillar-2.png

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

Resultaat Arduino Project

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!