Klara De Kataput Houd Niet Van Aanraking

by MetaMeta in Circuits > Arduino

199 Views, 1 Favorites, 0 Comments

Klara De Kataput Houd Niet Van Aanraking

d81f402f-129f-4797-8934-0c72d4a65810.jpg
Klara laten zien


Wat is het?

Klara is een katapult waar mee kan worden gemikt en geschoten zonder haar aan te raken. 

Klaras brein is een arduino, ze kan schieten met servo motors en leest afstand met afstand sensors. Klara heeft twee functies, je kunt haar mikken op de horizontale as en haar afvuren. Klara beweegt de servos gebaseerd op de afstand van de sonars, mikken is hoger en lager en schieten is je hand voor de sonar. Zie de video hierboven voor Klara in werking!

Het idee van Klara is gebaseerd op dat iets wilde maken wat kan schieten maar dan met een meer interessante interactie dan een katapult of pistool. Het katapult mechanisme zelf is redelijk simpel, dit heb ik sterk geïnspireerd van deze instructable. Ik heb me vooral bezig gehouden met het “niet aanraken” gedeelte van het ontwerp en welke variabelen er kunnen worden aangepast. 

Als eerste wilde ik voor testjes een prototype maken van het katapult mechanisme. Dit heb ik toen gedaan en gebruikt bij latere testen.



Iteraties van ontwerp

Initieel wilde ik dat je de katapult kon mikken, schieten en bepalen hoe ver je schiet. Zie hier ontwerptekeningen ervan:

Helaas heeft dit nooit het daglicht gehaald omdat ik mikken een interessantere variabel vond. Wel heb ik het idee van het elastiek aan de servo binden gehouden zodat Klara zichzelf kan herladen en je dus niet haar hoeft aan te raken om te herladen. 


Omdat ik mikken interessant vond was het idee om de katapult op twee assen te laten mikken, zowel horizontaal als verticaal. Dit is hoe dat eruit zou zien:


Hier zouden 3 sonars voor zijn, 2 voor mikken en 1 voor schieten. Deze schiet sonar zou dan op voethoogte zitten omdat de handen al in gebruik zijn voor het mikken op de twee assen. Om dan te schieten zou je je voet weg moeten trekken. Dit vond ik persoonlijk een erg leuke ontwerpkeuze omdat je dan echt je hele lichaam gebruikt voor de interactie, maar helaas kan het niet altijd feest zijn…


Dit ben ik gaan testen! Onder andere met andere dingen.


Het mikken zelf op de assen was dus een succes! Maar ik liep ergens anders tegen aan. 


Één van de twee servos moest alles vasthouden EN horizontaal liggen. Dit zou best zwaar worden voor een servo. Natuurlijk geloof ik niet dat dit onmogelijk was maar dit zou extensief moeten gaan testen om te kijken naar een oplossing hiervoor. Daar had ik helaas de tijd niet voor. Dus toen besloot ik de verticale as te schrappen, als ik tijd over zou hebben zou ik nog kijken naar de tweede as.


Dit werd het ontwerp:




Ik merkte nog dat ik behoefte had aan concrete logica hoe de staten van de katapult zouden zijn. Dus heb ik hier nog een diagram van gemaakt:


Toen ben ik gaan maken!


Zie nog deze video voor verschillende overige testjes: LINK HIER


Reflectie:

Ik heb enorm veel geleerd! Qua praktisch vaardigheden heb ik deze dingen voor het eerst gedaan:

  • Solderen
  • Arduino
  • Houtsnijden
  • Fysieke interactie en behuizing ontwerpen


Verder heb ik geleerd dat het cruciaal is om alles te testen met elektronica als je iets nieuws toevoegt. Omdat er zoveel factoren zijn waar het aan kan liggen, bedrading, code, kapot etc. Ook heb ik weer zoals vaker onderschat hoeveel tijd dingen kosten en al helemaal nieuwe dingen. Nieuwe dingen doen kosten eigenlijk dubbel zoveel tijd als dat je zou had ingepland. Ook merkte ik dat het enorm handig was om ALLES uit te tekenen van het ontwerp. Er zijn altijd kleine dingetjes waar je niet rekening mee houd, dan kan soms een 3D-schets ook handig zijn om een gevoel te krijgen. Testen met karton is ook een goeie hiervoor. 


Ook heb ik geleerd dat ik het enorm leuk vond. Fysiek dingen maken is een unieke maak ervaring die ik zeker vaker wil ervaren.

Supplies

Dit zijn de benodigdheden voor dit specifieke project

Mechanisme:

  • Arduino Uno compleet met USB kabel en optioneel plastic casing
  • Ook de arduino IDE om code mee te laden op de Arduino (en een PC of laptop om deze code op te schrijven)
  • 3 x Servo MG90S Micro Metalen tandwielen 180 graden
  • Voor iedere servo 3 M to M jumper kabels
  • 2 x Ultrasonic Sensor HC-SR04 
  • Voor iedere sensor 4 F to M jumper kabels
  • Breadboard optioneel voor testen
  • Éen elastiekje voor de katapult zelf
  • Frisdrank dopje voor bakje katapult
  • Gebogen paperclip om het elastiek mee vast te maken
  • Metaal ringetje om het elastiek op zijn plek te houden
  • Houten stokje als draai-as voor de katapult

Behuizing:

  • Toegang tot een lasersnijder en MDF hout van 4 mm dikte met de afmetingen van de DXF bestanden die onder bij de stappen staan vermeld
  • Stukken karton even groot als sensor hub om de sonars vast te maken, zie afmetingen van DXF bestanden
  • Protoboard voor gesoldeerde draad

Gereedschap

  • Lijmpistool
  • Soldeerset
  • Striptang 
  • Schaar 
  • Stanleymes
  • Kleine kruiskop schroevendraaier
  • Ductape
  • Schilderstape 
  • Potlood en geodriehoek om markeringen te maken waar nodig

Schema arduino:

Code 

//Kode van Raoul Scholtens, Januari 2023

//Van Raoul voor Klara

//Libraries die worden gebruikt
#include <Servo.h> //Servo library
#include <NewPing.h> //Afstand sensor library, ook wel sonar library dus

//Servos met desbetreffende pins op de arduino
Servo elastiekServo;
int elastiekPin = 8;

Servo schietServo;
int schietPin = 9;

Servo mikServo;
int mikPin = 10;

//Sonars, sonarNaam(trigger_pin, echo_pin)
NewPing mikSonar(2, 3);
NewPing schietSonar(4, 5);

//Constante Variabelen
int maxHandAfstand = 40; //Maximale afstand van hand naar schietsonar
int schietGevoeligheid = 10; //Afstand grens bij schiet sonar

int schietServoMikdraaiPos = 0;
int schietServoSchietdraaiPos = 180;

int elastiekServoOntspanPos = 0;
int elastiekServoStrakPos = 180;

//Variabele variabele
bool magMikken;
int mikServoPositie;

//UITVOERENDE METHODES
void setup()
{
  Serial.begin(9600); //Koppelen van arduino aan PC voor debugging doeleinden
  Serial.print("Begin \n");
  Kalibreren();
}

void loop() {
  if (magMikken)
  {
    Mikken();
  }
}

//METHODES DIE HET WERK DOEN
void DraaienOpAfstand(Servo gebruikteServo, NewPing gebruikteSonar, String sonarNaam)
{
  int afstand = gebruikteSonar.ping_cm(); //Deze functie leest de sonar en zet het om in cm, super handig
  Serial.print("Afstand van: " + sonarNaam +  " = " + String(afstand) + "\n");
  mikServoPositie = map(afstand, 0, maxHandAfstand, 0, 180); //Hier wordt de afstand van de sonar gemapped op de draaias van de Servo
  gebruikteServo.write(mikServoPositie);
}

void SchietCheck(NewPing gebruikteSonar, int schietGrens) {
  int afstand = gebruikteSonar.ping_cm();
  if (afstand <= schietGrens)
  {
    Schiet();
  }
}

void ServoSetup(Servo gebruikteServo, int servoPin)
{
  gebruikteServo.attach(servoPin);
  gebruikteServo.write(0);
}

//TEST METHODES, om te testen of onderdelen werken
void ServoTest(Servo getesteServo)
{
  getesteServo.write(0);
  delay(3000);
  Serial.print("gedraaid \n");
  getesteServo.write(180);
  delay(3000);
}

void SonarTest(NewPing getesteSonar, String sonarNaam)
{
  int afstand = getesteSonar.ping_cm();
  Serial.print("Afstand van: " + sonarNaam +  " = " + String(afstand) + "\n");
}

//META-METHODES, staten van functie van de katapult, zie ook state machine diagram op instructable pagina
void Kalibreren()
{
  Serial.print("KLARA KALIBREREN \n");

  //Hier worden de servos aan de pins gekoppeld en draait de servos naar 0 positie
  ServoSetup(elastiekServo, elastiekPin);
  ServoSetup(schietServo, schietPin);
  ServoSetup(mikServo, mikPin);
  delay(1000);

  Herladen();
  delay(4000);
  magMikken = true;

  Serial.print("KLARA KALIBRATIE KLAAR\n");
}

void Mikken()
{
  Serial.print("KLARA MIKKEN \n");

  DraaienOpAfstand(mikServo, mikSonar, "MikSonar");
  SchietCheck(schietSonar, schietGevoeligheid);
}

void Schiet()
{
  Serial.print("SCHIETEN VAN KLARA \n");

  magMikken = false;
  elastiekServo.write(elastiekServoStrakPos); //Elastiek strak spannen
  delay(2000);
  schietServo.write(schietServoSchietdraaiPos); //Schietservo weg draaien om te schieten
  delay(2000);
  Herladen();
}

void Herladen()
{
  Serial.print("KLARA HERLADEN \n");

  elastiekServo.write(elastiekServoOntspanPos); //Elastiek onstpannen
  delay(500); //Kleine vertraging zodat de katapult onder de schietservo beland
  schietServo.write(schietServoMikdraaiPos); //Schietservo terug draaien
  delay(2000);
  magMikken = true;
}

Uitleg code

De code volgt het Diagram van logica boven benoemd. In de code zelf staan ook opmerkingen die uitleggen hoe specifieke dingen werken. Bij elke fase staat een serial.Print methode, hierdoor kan je in de Seriele monitor zien wat de katapult aan het doen is. 

De code begint met het kalibreren van de servos, als dit klaar is dan kan er worden gemikt door je hand boven de mik sonar te bewegen. Dan checkt de schietsonar of er geschoten wordt, zodra de sonar een input meet stopt het mikken en wordt de katapult geladen en vuurt die af! Hierna wordt de katapult herladen door de servos die de elastiek en de katapult tegenhouden terug te draaien en kan er weer worden gemikt.


In de code staan ook 2 test methodes, deze zijn om de sonar en servos te testen. Of die werken. Dit vond ik tijdens het proces enorm handig en kan ik aanraden om te gebruiken, dan hoef je dat niet iedere keer opnieuw te schrijven.

Solderen

solderen 1.jpg
  1. Solderen:

Sluit de kabels op de arduino aan zoals de tekening van het schema ergens boven op deze pagina. Vervolgens zijn er een paar onderdelen die moeten worden gesoldeerd. Voor mijzelf was het de eerste keer solderen dus ik ging nog eerst even oefenen.



De kabels vast gesoldeerd aan de afstandsensoren:


En de kabels die verbonden zitten aan de GRND en 5V om het breadboard te vervangen.

Behuizing Snijden


In de bestanden hier zie je de behuizing plannen voor de sensor hub, behuizing van katapult en arduino en kleine onderdelen van het katapult mechanisme. Dit kan worden gesneden door een lasersnijder. Echter is deze behuizing zonder gaten voor kabels, zie volgende stap voor meer context.

Optionele Test Stap


Omdat het mijn eerste keer was om een behuizing te maken besloot ik om te testen of alles paste, dit deed ik met schilderstape zodat het niet permanent vast zat. Toen kwam ik erachter dat ik niet had gedacht aan een gat voor de kabels, dus is het handig om daar nog even wat voor open te snijden. Het is aan te raden om dit te verwerken in de DXF, lasersnijden gaat een stuk vlotter dan zelf snijden.

Verder is het ook aan te raden om met schilderstape wat kabels te organiseren, zie foto. Dit houd de kabels georganiseerd en als er iets los is dan is dat gelijk duidelijk door de organisatie. 

Bouwen

Dan is het nu tijd om alles aan elkaar te lijmen en permanent vast te maken.


Eerst de sensor hub. Houd de stukjes met elkaar met wat schilderstape om constructie te behouden. Vervang dan langzaam de stukjes schilderstape voor wat lijm tussen de puzzelstuk randen. 


Hier kun je 4/6 van de delen vast maken zodat er constructie is maar nog wel toegang tot de binnenkant. Verder heb ik nog een stuk karton gebruik om de sonars vast te maken. Hier zijn ook plastic casings voor beschikbaar maar die heb ik niet.

Vervolgens kun je tussen de ronde stukjes van de sonar wat lijm van het lijmpistool doen om het vast te plakken aan het karton.

 

Het is aan te raden om minstens een kant niet te lijmen, zodat je altijd toegang hebt tot de binnenkant wanneer nodig.


Dan de behuizing van de katapult:

Hier komt de katapult op te staan én de arduino en alle kabels in te liggen.


Hier heb ik zelf de bovenste en een van de zijpanelen los gelaten, zodat er genoeg toegang is om de kabels goed vast te zetten en de arduino te monteren.


Dan kan er op de bovenkant alvast 1 van de 3 servos worden gemonteerd met lijm:


Dan is het tijd voor het katapult mechanisme.


Hier is het handig om het middel van de onderkant te markeren om het draaistuk van de servo goed te monteren. Verder heb ik nog 2 stukjes hout van de sensor hub hergebruikt om meer lijm oppervlak voor de 2 servos te creëren. Lijm de elastiek vast op de katapult en het dopje als bakje. Verder kun je nog het metalen ringetje in tweeen knippen en vast lijmen om het elastiek op zijn plek te houden.

 


Code

Dan is het tijd om de code op de arduino te zetten. Met de Arduino IDE. Het is handig om nog even de code te checken op errors door op het vinkje te klikken. Als alles oke is dan kun je op het pijltje klikken om de code op de arduino te zetten.

Kabels Organiseren

Dit project heeft aardig wat kabels, daarom is het handig om dit een beetje te organiseren. Hier zijn wat fotos van hoe ik dit deed. Met schilderstape probeerde ik de kabels die naar dezelfde plek gaan te bundelen en met duct tape heb ik de kabels vastgemaakt aan de behuizing. Ook heb ik de arduino zelf vast gelijmd aan de plastic casing voor extra stevigheid en de printplaat met ductape semi-vast getaped. Zie de video voor nog meer inzicht in de binnenkant van Klara.

Klaar!

DANKJEWEL

DANKJEWEL AAN:

Youri voor hulp met solderen, levensadvies en soldeerkit, Botsop voor hulp en advies met solderen en met testen en enthousiasme. Yannick Mul en Yannick Broeks voor hulp met Arduino tech. Ravi bedankt voor enthousiast zijn voor mijn katapult, dat hielp enorm met mijn motivatie <3. Silver bedankt voor een lieffie zijn en camera vasthouden bij testjes. Verder nog:

  • Nadja
  • Ravi
  • Wessel
  • Aiden
  • Michael Yamada
  • Michael Smith
  • Zubi

bedankt voor het delen van jullie documentatie voor inspiratie.


Deze instructable voor katapult inspiratie: https://www.instructables.com/Automatic-Rubber-Band-Catapult/