Robo-snail

by featherymeddling in Circuits > Arduino

111 Views, 0 Favorites, 0 Comments

Robo-snail

DSC_1418.jpg
Bon_Appetite_16_9.jpg

Concept:

Mijn concept is gebaseerd op mijn jeugd. Ik mis een beetje het buitenspelen van toen. Ik heb een super slecht richtingsgevoel, en het duurde jaren voordat ik rond mijn huis de buurt kende. Nu ben ik een paar straten verhuisd, maar ben ik steeds verdwaald. Ik heb dan ook geen reden om buiten te spelen en de buurt te verkennen… Ik besloot twee buiten-activiteiten uit mijn jeugd te combineren, zodat ik weer een reden had om buiten te spelen, namelijk: slakken pesten, en met een op afstandbestuurbare auto rond racen.

Mijn slak kan op afstand bestuurd worden, en als je met je hand boven zijn ogen beweegt, trekt hij ze in. Hiermee kan ik door de buurt rijden zodat ik die kan verkennen, en leer ik misschien ook wat nieuwe mensen kennen die mij zien en zich afvragen wat ik aan het doen ben.




Supplies

Benodigdheden:

-Twee speelgoed verrekijkers
-Een op afstandbestuurbare auto
-Een pringle's bus
-Een grote kartonnen doos
-Ijzerdraad
-Lijm
-Touw
-Plakband
-Saté prikkers

-Arduino uno
-Breadboard
-draadjes
-2x continuous rotation servo
-2x lichtsensor
-2x weerstandje (bruin, zwart, oranje, goud)
-Soldeerbout

-Soldeertin

-Powerbank

Code & Arduino Set Up

Screenshot 2021-05-26 at 15.29.09.png

Download arduino, en kopieer de code uit de volgende stap naar een nieuw, leeg bestand. Bouw ook de volgende setup met je onderdelen.

Beschrijving:
Wat mijn code doet is op het moment dat de lichtsensor een waarde onder (bijv. in deze code) 300 doorgeeft, de motortjes eerst gaat intrekken (de ene kant op draaien), dan wachten, en dan uitrollen (de andere kant op draaien). Pas als dat is afgerond reageren ze weer op het licht. Het maakt niet uit welke lichtsensor die lage waarde doorgeeft, zodra er een wordt doorgegeven trekken beide ogen in.

Code

Screenshot 2021-05-27 at 14.31.21.png

#include
// controls:

int stop_servo=1500; int intrekken_speed=3000; int uitrollen_speed=0;

float intrekken_duration=1.5; // aantal_seconden float uitrollen_duration=1.5; // aantal_seconden float bang_duration=3.0; // aantal_seconden

float light_cutoff_value=300; // gewoon proberen , ligt aan de belichting van kamer

// nodig om te laten werken
Servo servo1; 
Servo servo2;
float speed;
String slakkenbrein="blanco"; //slakkenbrein statussen worden hier 
//gedefinieerd


float brein_counter=0; //telt hoe lang een staat bezig isvoid setup() {
  servo1.attach(9);
  servo2.attach(10);
  servo1.write(stop_servo);
  servo2.write(stop_servo);// stop de servo
}void loop() {
  int lightValue1 = analogRead(A0);
  int lightValue2 = analogRead(A1); brein_counter+=0.0001; // op deze manier is duration in seconden, 
   //ongeveer, moet sinds nieuwe servo nog even aangepast worden
   //zodat het weer seconden is  // Slak status loop begint hier
  if(slakkenbrein=="blanco")
  {
     // doe niks.
     servo1.write(stop_servo);
     servo2.write(stop_servo);// servo doet niks
     if(lightValue1
intrekken_duration)
      {
         // klaar met intrekken, wissel van staat in slakkenbrein.
          servo1.write(stop_servo); 
          servo2.write(stop_servo);// stop servo
          slakkenbrein="bang"; // wacht want je bent bang
          brein_counter=0; // brein op nul zodat je weet hoe lang je bang bent,
      }
  }
  if(slakkenbrein=="bang")
  {
      if(brein_counter>bang_duration)
      {
         // klaar met bang zijn.. wissel van staat in slakkenbrein.
          servo1.write(intrekken_speed);
          servo2.write(intrekken_speed);// servo gaat afrollen
          slakkenbrein="uitrollen"; // wacht want je bent bang
          brein_counter=0; // brein op nul zodat je weet hoe lang je bang bent,
      }
  }
  if(slakkenbrein=="uitrollen")
  {
      if(brein_counter>uitrollen_duration)
      {
         // uitgerold, wissel van staat in slakkenbrein.
          servo1.write(intrekken_speed); 
          servo2.write(intrekken_speed);// servo gaat afrollen
          slakkenbrein="blanco"; // reageer weer op licht, de hele loop kan nu opnieuw beginnen
      }
  }  
}

Bouw Je Omhulsel

DSC_1398.jpg

-Haal alles van je op afstandsbestuurbare auto af dat hij niet nodig heeft om rond te rijden

-Maak een slak-achtige vorm van karton en je pringles bus
-Bevestig deze op je afstandsbestuurbare auto en prik een gaatje om de antenne er doorheen te laten. (Tip: bind het er op met je ijzerdraad)

-Knip twee gaten in de pringle's bus waar je de ogen wilt hebben.

Bouw Je Oog-mechanisme

Screenshot 2021-05-27 at 14.52.25.png
DSC_1411.jpg
DSC_1412.jpg

-Pak een lange cilinder (bijv een pillendoosje, een grote stift, etc) en wikkel daar je ijzerdraad omheen om een springveer te maken. Zorg dat deze als hij "relaxed" is, minstens net zo lang is als 1 van je verrekijkers.

-Maak aan de bovenkant en onderkant van je veer een uitstekend haakje, en maak daar aan een van de kanten je touw aan vast. (met lijm)

-Lijdt het touw door de binnenkant van de veer heen

-Boor de glaasjes uit een van je verrekijkers, en stop de veer er in. Zorg dat de kant waar je draadje bevestigd is aan de dunste kant van de verrekijker terecht komt. Buig daar het eindje om en lijm het aan de buitenkant van de verrekijker

-Buig aan de onderkant ook het eindje van de veer om. Knip een cirkel uit het karton en lijm deze aan de onderkant van je verrekijker zodat aan die kant de springveer er ook niet uit kan. Lijm hem niet helemaal rondom, want je touwtje moet wel nog strak getrokken kunnen worden.

-Herhaal deze stappen allemaal ook bij de andere verrekijker.

Bouw Je Oog Mechanisme Deel 2

DSC_1409.jpg
DSC_1410.jpg
DSC_1416.jpg
DSC_1417.jpg

-Bevestig de ogen op hun plaats op je omhulsel, zorg dat het touwtje nogsteeds strak getrokken kan worden zodat het oog intrekt.

-maak 2 spoelen voor op elke servo motor met je karton en sate prikkers

-Bevestig de servo motors met spoelen op je slak

-Soldeer de draadjes van de servo die je aan elkaar hebt gedraaid om een Y vormige draad te maken. Soldeer ook extra langere draad aan je licht sensoren en plak ze dan met de sensor kant aan de top van elk oog. Al het technische behalve de lichtsensoren en servos kun je nu in de pringles bus en uit het zicht stoppen

-Zet je arduino aan, en ga met de configuratie experimenteren zodat de servo's lang genoeg op en af rollen om jou draadjes strak te trekken. Dit zal verschillen per project. Als je tevreden bent kun je de code zo opslaan en de draadjes op de juiste plek vastmaken aan de spoelen. Dan zou je slak als het goed is moeten werken!

Reflectie & Iteraties

DSC_1406.jpg
DSC_1390.jpg

Ik ben zeker goed de uitdaging tegengekomen in dit project. Ik vind het heel eng om aan dingen te beginnen als ik niet 100% weet wat ik moet doen, maar bij dit project kun je bijna geen begeleiding krijgen omdat iedereen zijn eigen ding doet. Steeds als het een eindelijk lukte bleek het ander weer niet te werken, dit was heel frustrerend en ik heb er meerdere keren even over moeten huilen. Uiteindelijk is het nu niet af, maar ik ben er wel bijna.

Ik weet niet zo goed hoe ik dit beter zou kunnen doen met de herkansing, want ik weet nu een beetje wat ik aan het doen ben en wat er nog moet gebeuren, dus dat helpt al. Maar als ik advies aan mijzelf zou moeten geven voor het project startte zou het zijn om het allemaal niet *zo* serieus te nemen, en om hulp te vragen aan mensen die ook kunnen helpen. (bijv. door gewoon een paar uur op school met een aantal studenten aan de projecten te werken)

Ontwerp:

Mijn iteraties zijn van elk onderdeel op zich, en niet steeds van het hele ontwerp, dus ze zijn moeilijk te beschrijven. Eerst wilde ik de ogen buigbaar maken, en die dan op & uit laten rollen. Daarna wilde ik met rolletjes wc papier een telescoop mechanisme maken wat zou uitrollen met een stokje aan de binnenkant, ik zou het oog dan alleen niet ver kunnen intrekken. Uiteindelijk heb ik hetzelfde telescoop mechanisme gebruikt, met aan de binnenkant een springveer die boven en onder vast zit. Aan de bovenkant is ook een touwtje bevestigd, die door de veer heen loopt. Als je er dan aan de onderkant aan trekt, trekt de veer krom en het oog in.
Ik heb voor het maken van de ogen getest of de motortjes genoeg kracht hadden om de veer strak te trekken.

Eerst had ik mijn setup met arduino gemaakt met normale servos en die heb ik toen omgebouwd zodat hij werkt met rotation servos. Ik heb geleerd hoe ik zonder solderen draadjes aan elkaar maak.
Ik wilde de slak laten rondrijden en de docent had gezegd dat ik daarvoor een op afstandsbestuurbare auto mocht gebruiken, maar toch wilde ik er een zelf bouwen. Daar heb ik instructies en materialen voor gekocht maar uiteindelijk wilde het motortje niet draaien en alleen zoemen.

In mijn code probeerde ik eerst met simpele if statements zoals ik het bij ecttp had begrepen te zorgen dat het oog zou werken (aka. na het krijgen van een signaal van de lichtsensor moesten de motortjes een bepaalde tijd de ene kant op draaien, dan wachten, en dan de andere.) Ik weet niet precies waarom maar op deze manier kreeg ik niet voor elkaar om zowel de lichtsensoren als de motortjes te laten werken. Ik heb toen om hulp gevraagd en uitleg gekregen over een “state machine”. Hierbij ga je ervanuit dat je machine altijd in een “status” verkeert, en op basis van welke status hij dan zit gaat hij een bepaald deel van de code uitvoeren.
Het omhulsel bouwen ging best goed want ik had veen karton omdat we aan het verhuizen waren. Ik heb getest, en het beste kan hij achterstevoren op mijn rondrij-mechanisme, omdat die meer gewicht kan hebben aan de voorkant dan de achterkant, en de gewichtsverdeling van de slak juist andersom zit.

Voor op de motortjes had ik spoeltjes gemaakt zodat de draad niet op de verkeerde plek oprolt of er weer af glijd, maar dit zorgt ervoor dat het opzetstukje snel van de motor af wordt getrokken. Ik heb hier nog geen oplossing voor gevonden. Ik denk dat ik het gewoon ga supergluen.