Sumo Robot Natuurkunde Profiel Werkstuk Natuurkunde P. Zandstra Xander Huisman 5O 13-1-2012 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Inhoudsopgave Bladzijde: Inleiding Hoofdstuk 1: §1.1: §1.2: §1.3: §1.4: Hoofdstuk 2: §2.1: §2.2: §2.2.1: §2.2.2: §2.3: §2.4: §2.5: §2.6: Hoofdstuk 3: §3.1: §3.2: §3.3: §3.4: §3.5: §3.6: §3.7: 3 Wat zijn sumorobots 4 De wedstrijd Eisen waaraan de robot moet voldoen Eisen waar de ring aan moet voldoen Overige regels 4 5 6 6 De hardware 7 De microcontroller De sensoren De lijnsensoren De Afstandssensor De motoren De LED lampjes De schakelaar De voeding 7 8 8 9 10 12 14 15 De software 16 De basis De schakelaar Afstandssensor De lijnsensoren Beslissen Servomotoren De software in de robot 16 17 18 19 21 22 23 Foto’s van het bouwen 24 Het resultaat 26 Conclusie: 27 Evaluatie: 28 Bronvermelding: 29 Bijlage 30 2 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Inleiding Ik was zelf thuis al een tijdje bezig met elektronica en het programmeren van microcontrollers. Ook wil ik na de Havo Mechatronica doen. Dat is een gecombineerde opleiding elektronica met werktuigbouwkunde. Het is een eigenlijk wel zware opleiding, want je bent nooit uitgeleerd en het is heel exact. Maar ik vind het leuk om te doen en heb het leren er wel voor over. Omdat ik zelf al aan het programmeren was, wilde ik voor mijn werkstuk er ook mee bezig. Eerst zou ik voor de LeekBurners iets maken zodat ze op afstand telemetrie konden zien, maar dat project ging niet door. Daarna wilde ik een soort robotje gaan maken dat uit zichzelf al werkt en geen afstandsbediening nodig heeft. Ook wou ik met het Arduino project bezig, omdat het me een interessant project lijkt en er gratis software voor handen is. De grote vraag is, hoe werkt een robot. Maar er kwamen vragen bij als: Wat voor onderdelen zitten er in een robot? Wat meten de sensoren en hoe verwerk je ze, zodat je iets kunt aansturen? Welke regels zijn er allemaal bij een wedstrijd? Heeft het gewicht veel invloed op de robot? 3 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Hoofdstuk 1: Wat sumo robots zijn Sumo robots zijn robots die tegen andere robots in een ring strijden. Als de robot zelf uit de ring rijdt, is deze ook af en heeft dus verloren. De robot moet er dus zelf ook voor zorgen dat die zichzelf eruit niet rijdt. Bij een wedstrijd strijden er twee of meer robots tegen elkaar en ze maken elkaar niet bewust kapot, zoals bijvoorbeeld bij robot-wars waarbij robots elkaar te lijf gaan met zagen en hamers, en de robot die als eerste twee rondes gewonnen heeft, wint de wedstrijd tussen de twee. §1.1 De wedstrijd Bij de wedstrijd strijden twee robots tegen elkaar. Maar de wijze waarop er gestreden wordt, kan verschillen. Er zijn wedstrijden waarbij van afstand bestuurbare robots meedoen, maar ook robots waarin autonome robots het tegen elkaar opnemen. Zelf vind ik de autonome klasse leuker. De afloop hangt van de robot zelf af, en niet van de bestuurder. Ook is het goedkoper om te maken, omdat je niet de apparatuur nodig bent voor de communicatie. Daarom wordt mijn sumo robot ook autonoom. Er zijn verschillende manieren om te bepalen hoe de wedstrijd gaat verlopen. Een aantal daarvan zijn single elimination, double elemination, round robin en heats. Bij single elemination heeft elke robot maar één kans om van de tegenstander te winnen. Bij double elemination moet de robot twee van de drie wedstrijden winnen om door te gaan. Bij round robin strijdt elke robot tegen elke andere robot, dat duurt vrij lang. En bij de heat wordt er gestreden in poules. De winnaar van elke poule gaat door naar de volgende ronde. Single elemination Eén kans om door te gaan Double elimination Twee van de drie winnen Roud robin Elke robot tegen alle andere robots Heats Poules Figuur 1: Overzicht Wedstrijd manieren Er kunnen om verschillende prijzen gestreden worden. De robot die alles/het meeste gewonnen heeft. Maar er kan bijvoorbeeld ook gestreden worden om: snelste wedstrijd, meeste verloren, de lichtste robot en de totale tijd dat de wedstrijden samen geduurd hebben. Aan het begin van de wedstrijd moeten de robots gepositioneerd worden. De robot die de hoogste rang heeft(of de ronde daarvoor heeft gewonnen) wordt als eerste neer gezet. De robot mag in elke hoek staan en elke positie in de ring, maar de robot mag niet over de start lijn komen. Als de robot neer gezet is, mag deze niet groter zijn dan de maximale afmetingen die de robot mag hebben. Daarna mag er van afgeweken worden. De robot met een lagere rang mag daarna in de ring geplaatst worden. En mag ook in elke hoek en op elke plek staan, als deze maar niet over de startlijn heen komt. Dit is gedaan om de robot met de lage rang een kleine voorsprong te geven. De robot kan buiten het zicht 4 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 staan van de andere robot, maar zo, dat de robot bij het starten gelijk op de robot kan afrijden met een hoge rang. Dan kan de wedstrijd bijna beginnen. De meeste robots worden doormiddel van een schakelaar geactiveerd. Dit mag ook gebeuren door middel van geluid, infrarode signalen of met RF communicatie. Na het activeren mag de robot 5 seconden niet bewegen, zodat alles en iedereen meer dan een meter van de ring af is. Ondertussen mogen er al licht effecten en geluid zijn. Als iemand erachter komt dat het activeren mislukt is, kunnen de robots een reset krijgen, zodat de wedstrijd weer eerlijk is. Als een robot beweegt tijdens de 5 seconden, dan krijgt de robot een waarschuwing, bij een tweede waarschuwing, heeft de robot verloren. De robot die als eerste buiten de ring komt, heeft verloren. Een robot heeft verloren als de robot meer dan 5 gram minder weegt dan bij de start. §1.2 Eisen waaraan de robot moet voldoen Om met de wedstrijd mee te mogen doen, zijn er regels voor de robot. Het is namelijk niet eerlijk als een hele grote zware robot het moet opnemen tegen een kleine robot. Daarom zijn er verschillende klassen waarin de robot kan gaan strijden. De drie populaire klassen zijn de Japanse klasse, de mini klasse en de micro klasse. In Japanse klasse de Japanse klasse zijn de robots maximaal 3kg en zijn Maximaal 20cm bij 20cm de afmetingen maximaal 20cm breed en 20cm lang. In Maximaal 3Kg de mini klasse zijn de robots kleiner en lichter, Mini klasse namelijk maximaal een halve kilo en maximaal 10cm Maximaal 10cm bij 10cm breed en 10cm lang. In de micro klasse zijn ze robots Maximaal 500gram zelfs maximaal 5 cm lang en 5cm breed en mogen ze De micro klasse maximaal 100 gram wegen. Om te kijken of de robot Maximaal 5cm bij 5cm voldoet aan de eisen, wordt een soort controle vooraf Maximaal 100 gram gehouden. De robot wordt in een doos gezet die de maximale afmeting heeft voor die klasse. Voor het Figuur 2: De verschillende klassen gewicht wordt een simpele weegschaal gebruikt. Voor de hoogte zijn geen regels. Er is weinig ruimte voor elektronica, en deze wordt vaak bovenop gestapeld. Het is niet handig om de robot zo hoog mogelijk te maken, want een hogere robot heeft over het algemeen een hoger zwaartepunt en zal dus sneller om vallen. Verder zijn alle bouwmaterialen, motoren, sensoren en andere elektronica mogelijk, zolang er maar aan de regels voldaan worden. Zelf heb ik gekozen voor de mini klasse, omdat de robots dan niet te klein zijn maar ook niet te groot en omdat het gewicht van de Japanse klasse erg groot is, en ik bang ben dat de robot dan niet van zijn plek komt, omdat er ook niet super dure onderdelen in komen. Bij bepaalde wedstrijden mag de robot hulpmiddelen gebruiken om meer grip te krijgen. Er worden dan bijvoorbeeld magneten gebruik of wielen die plakken aan het veld. Bij sommige wedstrijden mag dat niet, en worden er maatregelen getroffen. Tegen magneten door bijvoorbeeld een niet magnetisch veld te gebruiken en de plakkerige banden bij de keuring door hem op een papier te zetten en de robot op te tillen. Gaat het papier mee, dan mag de robot met deze wielen niet mee doen. Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 5 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 §1.3 Eisen waar de ring aan moet voldoen Bij elke klasse hoort natuurlijk ook een andere ring. De Klasse Mini grote robots uit de Japanse klasse hebben meer ruimte Diameter 77cm nodig dan een robot uit de mini klasse. Het veld Hoogte 2,5cm wordt gemaakt van hout of van een metaal als Dikte van de 2,5cm aluminium. Op de bovenkant zijn normaal lijnen rand getekend, waarbinnen de robot moet blijven en Dikte van de 1cm vanwaar de robot mag starten. Om het veld heen is startlijn een witte rand gemaakt. Omdat dit een groot contrast Lengte van 10 geeft met de zwarte ondergrond, kan een robot dat de startlijn dus snel opmerken. In het veld zijn nog 2 bruine lijnen Startlijn 5cm geschilderd, deze zijn ervoor om aan te geven vanaf het vanwaar de robot mag beginnen. Ook heeft het bord midden een bepaalde hoogte. Daardoor ontstaat er een rand Ruimte om 100cm die met schakelaars kan worden waargenomen. Om de ring de robots niet te storen is er ook een ruimte om de ring heen waarin zich niets mag bevinden. Dit is om er Figuur 3: Eigenschappen voor te zorgen dat de robot niets anders waar gaat nemen dan een andere robot. Micro 38,5cm 1,25cm 1,25cm 0,5cm 5 2,5cm 100cm §1.4 Overige regels Zoals bij elke wedstrijd zijn ook hier spelregels. Robots mogen elkaar niet opzettelijk kapot maken en ook niet schadelijk zijn voor mensen. Ook mogen de robots elkaar niet storen. Je mag dus niet bijvoorbeeld met infrarode lampjes de infrarode afstandssensor van de andere robot storen. Ook mag er van te voren getest worden. Een robot mag het opnemen tegen een blok hout en heeft 3 minuten om het blok eruit te drukken. 6 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Hoofdstuk 2: De hardware Om de robot te laten rijden zijn er motortjes nodig. En Invoer: om de lijn te detecteren is een sensor nodig. Dit zijn 2 Lijnsensoren onderdelen die onder de hardware vallen. De robot is 1 Afstandssensor een regelsysteem omdat wat de robot meet, continue Verwerking: verandert en dat weer terug koppelt naar de robot. In 1 Arduino Uno een elektronisch systeem heb je drie blokken: de Uitvoer: invoer, de verwerking en de uitvoer. Onder de invoer 2 motoren voor de vallen dus de sensoren die de robot heeft. Onder de aandrijving uitvoer vallen de actuatoren en dat zijn de motoren 1 motor om de en dingen waarmee de robot laat zien dat afstandssensor te draaien bijvoorbeeld de robot begint. De verwerking doe ik Led lampje om de status niet met verwerkers als de comparator en de ENaan te geven poort, maar met een computertje. Deze bevat in principe wel onderdelen als de comparator en de ENFiguur 4: Onderdelen schema poort, maar het computertje kun je programmeren en dus laten weten wanneer de robot met welke signalen wat moet doen. §2.1: De microcontroller De Microcontroller is het brein van de robot. De robot moet autonoom werken en moet dus zelf alles doen, dus zonder communicatie met de buitenwereld. Om dat voor elkaar te krijgen, moet er een soort computertje in. De computertjes die hier geschikt voor zijn, heten microcontrollers, afgekort ook wel µC(µ van micro en C van controller). Deze chipjes zijn met een computer te programmeren, zodat je zelf kunt beslissen hoe de robot werkt. Op de computer is een ontwikkelomgeving geïnstalleerd, waarin een programma voor de robot geschreven wordt. Er zijn vele talen om in te programmeren en dus ook verschillende omgevingen. Figuur 5: De Arduino Uno De ontwikkelomgeving moet het programmeren overzichtelijker maken met kleuren voor bepaalde opdrachten. Bepaalde opdrachten(woorden) hebben namelijk een kleur, zodat het overzichtelijker wordt. Ook zet de ontwikkelomgeving het programma dat je geschreven hebt om in een taal die de microcontroller snapt. Als microcontroller heb ik gekozen voor de Arduino Uno. Arduino is een Open Source project, dat wil zeggen dat de bron voor iedereen toegankelijk is. Ook is de software voor op de computer gratis. Ook is het een erg populair project en dus zijn er veel voorbeelden Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 7 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 beschikbaar op internet. De Arduino die ik gekozen heb, werkt met spanningen 0 tot 5 volt. Dit had bijvoorbeeld de Amicus18 niet(0 tot 3,3V). Ook is het een printplaatje waar de directe onderdelen van de Arduino op zitten, zoals een programmer die de data van de computer in de controller zet. Ontstoor condensatoren, zodat de spanning stabieler blijft, zodat er geen rare dingen gebeuren. Eeen extern kristal, die zorgt voor de klokpulsen van de processor en een voeding. De Arduino is namelijk niet een processor maar een ontwikkel bord. Aan de rand zitten bepaalde stekkers(headers), waarop je printplaatjes(shields) kunt bevestigen. Een voorbeeld van een shield is een printplaatje voor het aansturen van een motor. Als processor zit er op de Arduino een ATmega328. Dit is een controller gemaakt door Atmel, een van de grote fabrikant van microcontrollers. Op de pc staat een programma dat bij het Arduino project hoort. Hierin is de controller te programmeren en in het programma zitten ook voorbeelden met uitleg. §2.2: De sensoren De sensoren zijn de zintuigen van de robot. Zonder de sensoren zou de robot niet kunnen. In de sumo robot zitten 2 verschillende sensoren. Twee sensoren bekijken de ondergrond en nemen dus waar als de robot van de zwarte ondergrond naar de witte rijdt. De andere sensor is een afstandssensor. Deze kijkt dus hoever een voorwerp verwijderd is van de robot. Als een voorwerp dicht bij de robot is, wordt dat waargenomen en kan de robot er dan heen rijden. §2.2.1: De lijnsensoren De lijnsensoren hebben de taak om de witte lijn rondom het zwarte veld te detecteren. Wit op zwart heeft een erg groot contrast en is gemakkelijk waar te nemen met sensoren. De kant en klare lijnsensoren op iprototype.nl zijn eigenlijk wel duur. Twee lijnsensoren samen, die al helemaal klaar zijn, kosten samen €11,90. Het is echter veel leuker en leerzamer om zelf de sensoren te maken. Ze verkopen op de site wel de CNY70. Twee keer een CNY70 kost samen ongeveer €4,-. Dit is een heel stuk goedkoper dan de kant en klare sensoren. De sensor is een klein zwart blokje met vier aansluitingen. Twee aansluitingen zijn van een infraroodlampje en de andere twee zijn van een lichtgevoelige transistor. Het lampje zendt licht uit. Als de ondergrond niet al de ver van de sensor is, kaatst het licht op de ongegrond weer terug. De geleiding van de lichtgevoelige transistor hangt af van hoe veel licht er terug gekaatst wordt op de transistor. Hoe meer licht, hoe meer geleiding. Wit kaatst haast al het licht terug en zwart haast niet. Figuur 6: De CNY70 sensor Figuur 7: Terugkaatsing van de sensor 8 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Maar de CNY70 kan niet direct op de Arduino aangesloten worden. De spanning op de LED wordt te hoog en daardoor wordt de stroom te hoog en gaat het lampje kapot. Ook de transistor kan niet direct aangesloten worden. Volgens de datasheet heeft de LED 1,25V nodig bij 50mA. De voedingsspanning is 5V. De spanning over de weerstand is dan 𝑈𝑅1 = 𝑈𝑉𝑜𝑒𝑑𝑖𝑛𝑔 − 𝑈𝐿𝑒𝑑 = 5 − 1,25 = 3,75𝑉 De weerstand is dan 𝑅= 𝑈𝑅1 3,75 = = 75Ω 𝐼 0,05 Figuur 8: aansluit schema Omdat de spanning niet precies 5V zal zijn, is de voor de waarde iets hoger gekozen dan voor de weerstand. In mijn robot heb ik zelf gekozen voor 180Ω. De ontvanger is als het ware een lichtgevoelige transistor. De weerstand van 47K samen met de lichtgevoelige transistor in serie, vormen een spanningsdeler. In het schema maken ze gebruik van een weerstand van 47KΩ. Die waarde had ik niet thuis liggen. Wel had ik nog weerstanden van 100KΩ. twee weerstanden parallel geven samen een weerstand van 1 𝑅2 1 1 21 22 =𝑅 +𝑅 1 1 1 = 100 + 100 = 50 𝑅2 = 50𝐾Ω Die waarde komt aardig in de buurt van de 47KΩ. De spanning op het knooppunt zal dan iets anders zijn, maar dit kan ik corrigeren in de Arduino. Met een analoog digitaal converter in de Arduino is dan de spanning die op het knooppunt van de weerstand en de transistor te meten en om te zetten in een 10-bits waarde. Met wat proberen bleek de waarde bij een zwarte ondergrond rond te 300 te hangen en bij de witte ondergrond was dat ongeveer 20. Dit is een groot verschil, dus in het programma in de Arduino is gemakkelijk een omslag punt in te stellen. §2.2.2: De Afstandssensor Om een andere robot te kunnen detecteren heeft de robot een sensor nodig. Dit kan bijvoorbeeld met ultrasone geluidsgolven of met infrarood licht. Beide werken op hetzelfde principe. Er wordt een signaal uitgezonden en als dat weerkaatst wordt, is er dus een voorwerp dat dat doet. Deze sensoren kunnen ook gebruikt worden om de afstand te meten. 9 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Op iprototype.nl zijn verschillende ultrasone en infrarode sensoren verkrijgbaar. Een infrarode afstandssensor die een uitgangs signaal geeft van 0 tot 5 volt, een sensor die een hoog signaal geeft als een object zich bevindt in de afgestelde afstand en een ultrasone sensor die met de Arduino ‘praat’ met een bepaald protocol. Omdat de ultrasone sensor niet gemakkelijk uit te lezen is(door het protocol) en het duurste is, wil ik deze niet gaan gebruiken. Het meest interessantste lijkt me dan de sensor met het Figuur 9: De afstandssensor analoge uitgangs signaal. Ik kan dan bijvoorbeeld de robot de maximale snelheid geven als de robots tegen elkaar aan staan en veel kracht nodig is. De sensor heeft maar een klein ‘gezichtsveld’. Er zijn dus meerdere sensoren nodig voor een groter gebied. Er is echter een probleem, een sensor kost €14,= en om dan meerdere te gaan kopen wordt ook een duur grapje. Maar als de sensor op een servomotor bevestigd wordt, kan de robot in theorie 180° om zich heen kijken zonder zelf te draaien. De motor kan dan op een aantal ingestelde posities kijken of er iets in het gebied aanwezig is en dan bij draaien om de robot uit de ring te duwen. Servo motoren zijn normaal bedoeld om met Figuur 10: mini servo een kleine uitslag een voorwerp in beweging te zetten. In de servomotor zit slimme elektronica die er voor zorgt dat de stand die de Arduino aan geeft bereikt wordt en vastgehouden wordt tot er een nieuwe positie wordt opgegeven. §2.3: De motoren De motoren moeten sterk zijn om een andere robot ook nog uit de ring te kunnen drukken, maar ze moeten ook snel genoeg zijn. Een normale motor heeft een hoog toerental en weinig kracht. Om de kracht te vergroten moet er een overbrenging tussen. Zo krijgen de motoren meer kracht, maar minder snelheid. Het is lastig om een aandrijving goed in elkaar te zetten, omdat de assen van de motor precies recht moeten zitten op de as van de aandrijving. Een motor met de aandrijving erbij in is dus veel makkelijker. Bij iprototype.nl hebben ze twee motoren die in aanmerking komen. Normale gelijkspanningsmotoren met versnellingsbak die per 2 met wielen €13,95 kosten. Deze zijn alleen lastig te bevestigen aan de robot en er zitten vaste wielen op(andere wielen zijn niet gemakkelijk te bevestigen en de kans op doordraaien is dan aanwezig). Het voordeel van deze motoren is dat je ze via PWM kan regelen in de snelheid. PWM staat voor pulse with motion. Er worden continue pulsen gemaakt en door de tijd Figuur 11: PWM dat de puls hoog is langer te maken en de tijd dat de puls Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 10 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 laag is korter te maken, gaat de motor harder draaien(krijgt langer spanning per seconde). Dit gaat met een zodanig hoge frequentie(+20.000Hz) dat het lijkt of het wiel steeds draait. De Arduino heeft 6 van deze kanalen die daar continue mee bezig kunnen zonder softwarematig pulsen te genereren. Dit scheelt dus tijd. Ook een nadeel is dat de motoren niet direct kunnen worden aangesloten op de Arduino, omdat ze te veel stroom trekken. Er moet dus een motorsturing tussen en de prijs gaat dus nog verder omhoog. De andere motoren zijn servomotoren. En kosten per 2 €11,90. Deze kunnen zonder aanpassing maar 180° draaien. En worden direct aangesloten op de Arduino. Het voordeel van deze motoren is dat ze gemakkelijk en stevig te bevestigen zijn en dat er zelf een wiel op gemaakt kan worden doormiddel van opzetstukjes die erbij zitten. Ook zit er een versnellingsbak in. Met een bepaalde aanpassing kunnen de motoren toch door blijven draaien. Dit heeft te maken met de elektronica die erin zit. Deze elektronica zorgt ervoor dat de motor op dezelfde positie blijft staan(mits de motor genoeg kracht heeft). De stand wordt doormiddel van een variabele weerstand terug gekoppeld naar de elektronica en stuurt zo nodig de motor bij. Door de feedback te verwijderen(de variabele weerstand los maken van het laatste tandwiel) en de potmeter in de middelste stand te zetten, denkt de motor dat hij in de verkeerde stand staat. Hij blijft maar doordraaien, omdat hij nooit de gewenste positie haalt. Ik heb gebruik gemaakt van de aangepaste versie van de servomotor. In het ontwerp van de robot heb ik gekozen voor wielen met een diameter van 8cm. De omtrek is dan 𝑂𝑚𝑡𝑟𝑒𝑘 = 𝜋 × 𝑑 = 𝜋 × 8 = 25,13𝑐𝑚 De RS-2 servomotor die ik gebruik heeft bij 4,8V ongeveer 0,18s nodig om 60° te draaien. 360 Voor een heel rondje is dat 60 × 0,18 = 1,08𝑠. De robot gaat dan 𝑆 𝑉=𝑡= 25,13 1,08 = 0,233𝑚/𝑠 = 23,3𝑐𝑚/𝑠 Dit is een mooie snelheid voor de robot. Het duurt niet te lang om de cirkel over te steken en ook niet te kort. De robot weegt ongeveer 435 gram. De arbeid die dan nodig is om 0,233m/s te rijden is 1 𝑊 = 2 𝑚 × 𝑣2 𝑊= 1 2 × 0,435 × 0,2332 = 0,0118𝑁. 𝑚 Zou de robot 500 gram gaan wegen en er wordt dezelfde arbeid verrichten, dan gaat de robot in plaats van 23,3cm/s maar Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 11 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 0,0118 = 1 2 0,0118 𝑣2 = 1 2 ×0,500 13-1-2012 × 0,500 × 𝑣 2 = 0,0472 𝑣 = 0,217𝑚/𝑠 = 21,7𝑐𝑚/𝑠 De snelheid neemt maar af met 23,3 − 21,7 = 1,6𝑐𝑚/𝑠. Dat is erg weinig. Het voordeel van een hoger gewicht is dat de robot iets meer grip krijgt, omdat er meer druk op de wielen komt. Ook is de kinetische energie groter als wel dezelfde snelheid wordt behaald. Bij een frontale botsing geeft dat de robot iets meer voordeel, omdat een hogere massa minder snel is te stoppen. Een nadeel is dat er meer energie voor nodig is om de robot zijn snelheid te geven. De robot kan dan een zwaardere robot weg drukken, omdat de motoren niet meer energie nodig hebben voor de robot zelf als de robot zo licht mogelijk is. In praktijk is het verschil niet tot erg slecht merkbaar. Het gaat om zulke kleine verschillen dat het niet uitmaakt in deze klasse. §2.4: De LED lampjes Om aan te geven dat de robot aan gaat, wil ik LED lampjes gebruiken. Met 2 witte lampjes aan de voorkant en 2 rode aan de achterkant, lijkt het net een autootje. LED lampjes hebben zijn geen ohmse weerstanden, het zijn namelijk componenten die stroom gestuurd zijn. Om te laten branden heb je dus een stroombron nodig. Als je een spanningsbron gebruikt, zorgt ene hele kleine spanningstoename, voor een enorm verschil in de stroom. Die stroom wordt dan zo hoog, dat de LED kapot gaat. De batterijen zijn spanningsbronnen, dus moet er een stroomregelaar bij. Dit kun je maken met bijvoorbeeld een LM317 en een weerstand, er is alleen één nadeel, de LM317 kost samen met een weerstand ongeveer een euro. Er zijn Figuur 12: Schema LEDs voor de lampjes dus 3 stuks nodig. Je kunt ook de stroom begrenzen met een weerstand. De weerstanden in de robot had ik al thuis en kosten mij helemaal niets. Witte LED lampjes werken op 3,5V bij 20mA en de rode LED lampjes op 2V bij 20mA. De voedingsspanning is 5V. De rode LEDjes zijn hetzelfde en kunnen in serie aangesloten worden. Maar dan werken de LEDjes op een te hoge spanning. De stroom wordt dan zo hoog dat ze dan kapot gaan, dus moet er een weerstand voor. 𝑅2 = 𝑈𝑟𝑒𝑠𝑡 𝐼𝑙𝑒𝑑 = 5−2×2 0,02 1 = 0,02 = 50Ω Profiel Werkstuk Natuurkunde 2011-2012 12 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 𝑅3 = 𝑅4 = 𝑈𝑟𝑒𝑠𝑡 𝐼𝑙𝑒𝑑 = 5−3,6 0,02 13-1-2012 1,4 = 0,02 = 70Ω 𝑃𝑅2 = 𝑈 × 𝐼 = 1 × 0,02 = 0,02𝑊 𝑃𝑅3 = 𝑃𝑅4 = 𝑈 × 𝐼 = 1,4 × 0,02 = 0,028𝑊 Beide weerstanden worden hoger gekozen omdat de lampjes wel heel fel zijn anders. De R2 heeft een waarde van 100Ω gekregen en R3 en R4 een waarde van 180Ω. Het vermogen per weerstand is niet zo hoog, daarom is een kwart watt weerstand voldoende. Als de grens wel wordt opgezocht, loopt er in totaal een stroom van 20 + 20 + 20 = 60𝑚𝐴 Dat kan de Arduino niet schakelen, omdat die maximaal 40mA per poort mag schakelen. Voor dit soort toepassingen worden vaak transistors ingeschakeld. Een transistor is een component met 3 pootjes. Deze worden B (basis), C (collector), en E (emitter) genoemd. Een transistor versterkt de stroom. De grote van de vergroting heet de Hfe. Bij de BC547B die ik thuis nog heb liggen, ligt de waarde tussen de 200 en de 400. Over de collector en de emitter is een spanningsval van 0,7V. Dit komt omdat de transistor uit diodes bestaat. In de berekening voor de Figuur 13: De transistor weerstand voor de LEDs heb ik daar geen rekening mee gehouden. De LEDs zullen dan op een lagere spanning werken waardoor ze iets zwakker gaan branden. Dit komt de levensduur ten goede en de batterij gaat minder snel leeg. Op de collector wordt de min aangesloten van de belasting. Op de emitter wordt de min aangesloten van de voeding. Op base wordt de uitgang aangesloten van de Arduino, maar dit kan niet direct. Als het wel direct gebeurd, gaat de transistor kapot. Er moet een weerstand tussen om de stroom en de spanning te beperken. De weerstand wordt als volgt berekend: 𝑈−0,7 𝐼𝐵 𝐼𝐶 0,06 𝐼𝐵 = 𝐻 = 300 = 0,0002𝐴 𝐹𝑒 5,0𝑉−0,7𝑉 𝑅1 = = 22𝐾Ω 0,0002𝐴 𝑅1 = 𝑃𝑅1 = 𝑈 × 𝐼 = (5 − 0,7) × 0,0002 = 0,00086𝑊 Ook hier is een kwart watt weerstand voldoende. De voeding voor de motoren heb ik apart aangesloten. Om te zien of deze voeding aan staat heb ik daar ook een rode weerstand aangesloten met een weerstand. 𝑅= 𝑈𝑟𝑒𝑠𝑡 𝐼𝑙𝑒𝑑 5−2 3 = 0,02 = 0,02 = 150Ω 𝑃 = 𝑈 × 𝐼 = 3 × 0,02 = 0,06𝑊 Profiel Werkstuk Natuurkunde 2011-2012 13 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Ook hier heb ik plaats van een 150Ω weerstand, een gebruikt van 180Ω en is de weerstand een kwart watt. §2.5: De schakelaar Om te laten weten wanneer de robot mag beginnen, is een druk schakelaar gebruikt. Dit is het goedkoopste en het makkelijkste. Er moet echter wel een kleine weerstand bij. Een schakelaar sluit je normaal tussen de plus en de input aan of tussen de min en de input. Als de schakelaar open is, ligt de spanning niet vast. Deze kan door storingen gaan variëren en daardoor kan de Arduino ook raar gaan doen. Daarom wordt het aangeraden om met een weerstand de spanning of naar beneden of omhoog te trekken. Als je de schakelaar tussen de min en de input aansluit, moet je een weerstand van de input naar de plus leggen. Als je de schakelaar tussen de plus en de input hebt, moet de weerstand tussen de input en de min. Als weerstand wordt meestal 10KΩ aangeraden. De schakelaar zit hier tussen de min en de input. Als de schakelaar dan open is, loopt er een kleine stroom via de weerstand naar de Arduino. De Arduino leest een hoog signaal(5v van de weerstand). Als de weerstand gesloten is, loopt er een kleine stroom door de weerstand naar de min. Dat is 𝑅 = 10.000 = 𝐼= 5 10.000 5 𝐼 = 0,0005𝐴 Dat is erg weinig. De energie die dan in warmte wordt omgezet is maar 𝑃 = 𝑈 × 𝐼 = 5 × 0,0005 = 0,0025𝑊 Daar wordt de weerstand nauwelijks warm van. De Arduino leest dan een laag signaal(0V). 14 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 §2.6: De Voeding De servomotoren hebben een hoge piekstroom. Om de Arduino te sparen, heb ik voor de 2 servomotoren die de robot voortbewegen een aparte voeding gebruikt. Dit heb ik gedaan met een LM7805 en twee condensatoren die over de in- en uitgang van de LM7805 staan. Dit is geen zuinige oplossing. Het vermogen dat in de LM7805 wordt omgezet in Figuur 14: 7805 met condensatoren warmte, is de ingangsspanning min de uitgangsspanning keer de stroom. De overtollige spanning wordt er in principe gewoon afgehakt. Een zuinigere oplossing is een schakelende regelaar zoals de LM2575. Maar deze hebben meestal meerdere componenten nodig en zijn lastiger te maken. Ook zijn ze iets duurder. De LM7805 kost ongeveer met condensatoren €0,80. De LM2575 kost met alles ongeveer €8,60. Dat is enorm veel meer. De LM7805 had ik thuis en kon ik dus snel gebruiken. Als batterijen ga ik AA batterijen gebruiken en twee 9v blokjes. Een AA batterij kan meer stroom leveren dan de 9V batterij. Volgens Wikipedia kan een 9v batterij een uur lang 1000mA aan. Een 1,5V batterij kan meer dan 3x zoveel aan, namelijk 3300mA. Voor de motoren gebruik ik dan 6 AA batterijen in serie, wat neer komt op 6x1,5= 9V. Als de batterijen leger raken, zakt de spanning. De Arduino kan het hier moeilijk mee krijgen en rare dingen gaan doen. Daarom geef ik de Arduino een eigen 9V batterij. Ook had de robot herlaadbare accu’s kunnen krijgen, maar die zijn duurder en moest ik eerst nog gaan bestellen. Ook moesten er naast de accu’s ook een lader komen en dit is niet erg goedkoop, wat ook een uitdaging is bij dit project. Voor een andere toepassing is het wel aantrekkelijk, omdat de accu’s herlaadbaar zijn. Dit is ook voor het milieu beter. 15 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Hoofdstuk 3: Software De software achter de robot bepaalt hoe de robot werkt en wat er gebeurt. De hardware kan nog zo goed zijn, maar zonder goede software heb je weinig aan de goede hardware. De Arduino wordt geprogrammeerd in een taal genaamd ‘C’. Ik heb gebruik gemaakt van de ontwikkelomgeving die speciaal is gemaakt voor de Arduino. Bij de Arduino is het nog niet echt programmeren, omdat lastige instructies in bibliotheken staan. Deze worden aan het begin geladen en zie je niet. Ook hoef je met veel dingen geen rekening te houden zoals de instellingen van bijvoorbeeld de PWM uitgangen. §3.1: De Basis Bij het programmeren is een soort basis opbouw. Deze bestaat uit minimaal 2 blokken, die functies heten. Zonder deze 2 blokken werkt het programma niet goed of zelfs helemaal niet. Achter void staat de naam van de functie. Als je de naam weet, kun je er dus ‘heen’ springen vanuit een ander gedeelte. De functies moeten het programma nog overzichtelijker maken. Opdrachten die vaker in een loop gedaan moeten worden, kun je een eigen functie geven. Je springt dan steeds weer naar de functie en aan het einde van de opdracht weer terug naar waar je gebleven was in de loop. Wat er moet gebeuren in de functie staat tussen de accolades. De statements zijn de opdrachten die worden gedaan in een regel. Elke statement wordt afgesloten met een puntkomma. De puntkomma is dus in principe een punt achter elke zin in een tekst. Om commentaar te geven achter een zin, moet je een dubbele slash gebruiken. De tekst achter de dubbele slash wordt niet uitgevoerd, dus kun je dit ook gebruiken om stukken van je code uit te schakelen om problemen op te zoeken. void setup(){ statements; } //Hier staat alles wat er in de setup gebeuren moet void loop(){ stetements; } //Hier staat alles wat er in de loop gebeuren moet Om naar een andere loop te springen gebruik je Naam_van_loop(); Je gebruikt dus de naam van de functie en zet daar haakjes achter. Ook deze regel wordt afgesloten met een puntkomma, omdat het een gewone opdracht is. De setup en de loop zien er zo uit in mijn robot: 16 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 void setup() { myservo.attach(3); Stand = 511; Stand = map(val2, 0, 1023, 0, 179); Serial.begin(9600); pinMode(ledPin, OUTPUT); Wacht = 50; Flitsen(); Wachten(); } void loop() { Serial.println("Loop"); Afstandssensor(); Lijnsensor(); Beslissen(); Rijden(); } §3.2: De schakelaar De schakelaar is in principe een digitale sensor. De Stand van de schakelaar wordt schakelaar geeft een discreet signaal. Dit houdt in dat de ingelezen Arduino een laag(0) signaal leest of een hoog(1) signaal leest. Als de schakelaar wordt ingedrukt is de waarde 0 Hoog Laag en als de schakelaar los gelaten is 1. De Arduino kijkt met digitalRead(buttonPin); in welke stand de schakelaar Terug naar Knipperen, wachten is. Als de schakelaar is ingedrukt gaan de lampjes Wachten() en dan naar Loop() knipperen en wacht de robot tot hij mag beginnen en gaat dan naar de loop. Anders wordt er weer terug gesprongen naar de Wachten() functie. In C ziet dat er zo uit: // These constants won't change: const int buttonPin = 2; const int ledPin = 9; // These constants change: int buttonState = 1; int Wacht = 0; void Wachten(){ buttonState = digitalRead(buttonPin); Profiel Werkstuk Natuurkunde 2011-2012 17 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 if (buttonState == LOW) { Wacht = 100; Flitsen(); Wacht = 200; Flitsen(); Wacht = 100; Flitsen(); delay (2100); digitalWrite(ledPin, HIGH); delay(500); MotorLinks.attach(10); MotorRechts.attach(11); loop(); } else { Wachten(); } } void Flitsen(){ for (int i=0; i<4;){ digitalWrite(ledPin, HIGH); delay (Wacht); digitalWrite(ledPin, LOW); delay (Wacht); i++; } return; } §3.3: Afstandssensor De afstandssensor die ik heb gekozen, is een analoge sensor. De sensor zet een spanning op de analoge ingang die overeen komt met de afstand die de sensor meet. Op de analoge ingangen zitten analoog digitaal converters. Deze zetten de spanning om in een 10-bits waarde. De waarde waar deze sensor mee vergeleken is 90. Als deze hoger is dan 90 moet de robot vooruit rijden. Anders moet de robot blijven draaien tot er iets te zien is. Voordat de robot naar de setup functie gaat, wordt de sensor ‘vast’ gemaakt aan de analoge pin(in dit geval pin 0). Ook wordt de variabele sensorValue aangemaakt om de waarde van de sensor in op te slaan. In de setup hoeft verder niets gedaan te worden. Met analogRead(sensorPin) wordt de 10-bits waarde aan de variabele sensorValue gegeven. Dan wordt sensorValue vergeleken met 90. Is de waarde hoger, dan wordt zien 1. Als de waarde lager is, wordt zien 0. Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 18 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 In C ziet dat er zo uit: Analoge spanning wordt ingelezen door de Arduino // These constants won't change: const int sensorPin = A3; // These constants change: int sensorValue = 0; int Zien = 0; void Afstandssensor(){ Serial.println("Afstand Meten"); sensorValue = analogRead(sensorPin); Serial.println("Afstand = "); Serial.println(sensorValue); Ingelezen waarde wordt vergeleken met de waarde 90 Hoger Lager Zien = 1 Object is voor de robot Zien = 0 Object is niet voor de robot Recht Vooruit Blijven draaien tot er een object voor de robot is if (sensorValue>=90){ Zien = 1; Serial.println("Gevonden"); } else { Zien = 0; Serial.println("zoeken"); } return; } §3.4: De Lijnsensoren Ook de lijnsensoren zijn analoge sensoren. Afhankelijk van het licht dat terug gekaatst wordt, staat er een spanning op de analoge ingangen. Met testen bleek dat als de robot over de witte lijn reed, de waarde 20 was en als de robot over zwart reed 300. Het omslagpunt heb ik bij 200 gelegd. Ook laat ik in deze functie gelijk bepalen of de robot: vooruit, achteruit, linksom of rechtsom moet. In C ziet dat er zo uit: // These constants won't change: const int sensorLinks = A0; const int sensorRechts = A1; 19 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 // These constants change: int sensorValueLinks = 0; int sensorValueRechts = 0; int Bit = 0; int Keuze = 0; void Lijnsensor(){ Serial.println("Lijnsensor"); sensorValueLinks = analogRead(sensorLinks); Serial.println("Links = "); if (sensorValueLinks < 200){ sensorValueLinks = 0; Serial.println("Wit"); } else { sensorValueLinks = 1; Serial.println("Zwart"); } Analoge spanning wordt ingelezen door de Arduino Ingelezen waarde wordt vergeleken met de waarde 200 Hoger Zwarte lijn Lager Witte lijn sensorValueRechts = analogRead(sensorRechts); Serial.println("Rechts = "); if (sensorValueRechts < 200){ sensorValueRechts = 0; Serial.println("Wit"); } else { sensorValueRechts = 1; Serial.println("Zwart"); } Serial.println("Keuze = "); if (sensorValueLinks == 1 && sensorValueRechts == 1){ Serial.println("Vooruit"); Keuze = 0; } if (sensorValueLinks == 0 && sensorValueRechts == 0){ Serial.println("Achteruit"); Keuze = 1; } if (sensorValueLinks == 1 && sensorValueRechts == 0){ Serial.println("Linksom"); Keuze = 2; Profiel Werkstuk Natuurkunde 2011-2012 20 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Bit = 0; } if (sensorValueLinks == 0 && sensorValueRechts == 1){ Serial.println("Rechtsom"); Keuze = 3; Bit = 1; } return; } §3.5: Beslissen In de functie Beslissen() worden de waarden van de afstandssensor en de lijnsensoren bij elkaar gegooid en wordt bepaald of de robot vooruit, achteruit, linksom of rechtsom gaat. Deze functie is dus erg belangrijk omdat hier wordt bepaald hoe de robot rijd. void Beslissen(){ if (Zien == 0 && Bit == 0){ Serial.println("Linksom draaien"); //Niets gezien en als laatst rechts een lijn gezien => Linksom draaien tot er een voorwerp te zien is val1 = 1023; val2 = 1023; } if (Zien == 0 && Bit == 1){ Serial.println("Rechtsom draaien"); //Niets gezien en als laatst links een lijn gezien => Rechtsom draaien tot er een voorwerp te zien is val1 = 0; val2 = 0; } if (Zien == 1 && Keuze == 0){ Serial.println("Rechtuit rijden naar voorwerp"); //Voorwerp voor de robot en geen lijn te zien val1 = 0; val2 = 1023; } if (Zien == 1 && Keuze == 1){ Serial.println("Beide kanten een lijn maar draaien"); //Voorwerp voor de robot en beide kanten een lijn te zien val1 = 1023; val2 = 1023; Profiel Werkstuk Natuurkunde 2011-2012 21 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 } if (Zien == 1 && Keuze == 2){ Serial.println("Linksom"); //Voorwerp voor de robot en Rechts een lijn val1 = 1023; val2 = 1023; } if (Zien == 1 && Keuze == 3){ Serial.println("Rechtsom"); //Voorwerp voor de robot en Links een lijn zien val1 = 0; val2 = 0; } return; } §3.6: Servomotoren De servomotor krijgt steeds een korte puls. De lengte van de puls bepaalt de stand. Daarom zit de servo ook op een pin met PWM. Als eerste wordt de bibliotheek geladen die de servo aanstuurt. Het namelijk niet gemakkelijk om dat steeds te doen, en daarom neemt de bibliotheek de taak over voor dat gedeelte. Servo myservo; zorgt ervoor dat de servo opgeroepen kan worden met myservo. De variabele val wordt aangemaakt om de stand van de servo te bepalen. De 10-bits waarde wordt hier ook gelijk omgezet door ‘map’ de waarde die dan overblijft, heeft dan uiteindelijk een waarde tussen de 0 en 179. In C ziet dat er zo uit: void Rijden(){ Serial.println("Rijden"); Serial.println("Linker Motor = "); Serial.println(val1); Serial.println("Rechter Motor = "); Serial.println(val2); val1 = map(val1, 0, 1023, 0, 179); MotorLinks.write(val1); val2 = map(val2, 0, 1023, 0, 179); MotorRechts.write(val2); return; } 22 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 §3.7: De software in de robot In mijn robotje is de software anders dan als je alleen een sensor uitleest en de waarde op een display zet of naar de computer stuurt. De sensoren worden niet alleen uitgelezen, ze zijn ook de ogen van de robot. De robot neemt beslissingen aan de hand van wat de sensoren waarnemen. De robot mag ook niet te lang bezig zijn met het uitlezen van de sensoren, want dan rijdt de robot alweer de ring uit. Je moet dus zeer creatief zijn met het opstellen van het programma. Daarom maak ik veel gebruik van functies. De servo van de afstandssensor wordt in een stand gezet, de robot rijdt en scant alles. Dan de servo naar een andere stand en zo maar door. Met meer geld, had ik meerdere sensoren kunnen kopen. Dan hoef je niet steeds te wachten tot de servo weer goed staat. Ik heb uiteindelijk geen gebruik meer gemaakt van de servomotor om de afstandssensor te draaien. De robot draait nu zelf helemaal. Hiervoor heb ik gekozen, omdat de servo steeds veel tijd nodigt heeft. Ook was het terug koppelen van de stand naar hoe de robot moest rijden omslachtig. De robot blijkt zelf aardig snel te kunnen werken, zonder dat hij steeds om zich heen kijkt. In de bijlage staat de complete software. 23 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Foto’s van het bouwen Figuur 16: Het bepalen van de standen voor de servomotor voor de afstandssensor. In de robot zijn de standen nog anders omdat de sensor niet helemaal vrij hangt. Figuur 15: Opstelling voor het experimenteren met de Arduino met servomotoren. Op het LCD-display is de stand af te lezen. 24 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Figuur 19: Het verwijderen van de beperkingen van de motoren. Figuur 20: opstelling voor het experimenteren met de afstandssensor. Figuur 17: Opstelling voor het testen van de lijnsensoren. Profiel Werkstuk Natuurkunde 2011-2012 Figuur 18: De waarden voor het experimenteren van de lijnsensoren zonder ondergrond. Xander Huisman 5O 25 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Het resultaat De Robot is af. Tijdens het bouwen en programmeren zijn er dingen opgevallen. Het is erg moeilijk om heel precies te werken. De robot is daarom een keer uit elkaar geweest om een motor iets anders te zetten. Ook heeft de robot andere batterijen gekregen dan de bedoeling was. Dit is omdat de AA batterijen samen(6 stuks) veel ruimte in beslag namen. Daarvoor heeft de robot nu twee losse 9V batterijen gekregen. Ook voldoet deze robot niet helemaal aan de eisen. Qua gewicht is het goed. De robot weegt maar 435 gram, wat maximaal 500 mocht zijn. Maar qua afmetingen hoort de robot in een klasse hoger. De wielen zijn een paar millimeter breder geworden en aan de voor en aan de achterkant steekt hier en daar wat uit. Ook is de servomotor voor de afstand erg langzaam. Met losse sensoren kun je veel sneller de afstand bepalen, omdat daar niet eerst de stand bepaalt hoeft te worden van de sensor. Dit heeft ook weer te maken met het budget. In totaal heeft dit project mij €93,44 gekost: €79,24 voor de hardware, €3,- voor het karton en €11,20 voor nieuwe lijnsensoren en krimpkous. Verder heb ik dingen gratis ‘gekregen’ zoals batterijen, hout en papier en had ik nog dingen thuis zoals weerstanden. Figuur 21: Printplaat van boven Figuur 22: Robot van voren 26 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Conclusie Hoe de robot werkt is op te delen in verschillende onderdelen. De hardware en de software. De hardware is dat wat je fysiek kan aanraken en de software is een lijst met opdrachten die de Arduino uitvoert. Onder de hardware vallen weer 3 andere onderdelen namelijk de sensoren, de verwerker(Arduino) en de actuatoren. De hardware onderdelen zijn in verschillende types te krijgen. Elk type heeft voordelen, maar ook weer nadelen. Ook ligt het aan het budget hoe goed een robot kan zijn en wat deze kan. Het gewicht speelt bij een kleine robot niet echt mee. De verschillen zijn erg klein en niet echt merkbaar. Bij de wedstrijden van sumo robots zijn geen strenge regels. De regels zijn vooral dat de robot niet een andere robot mag beschadigen, en dat er verschillende klassen zijn waarvoor het gewicht en de afmetingen als maatstaf wordt gebruikt. 27 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Evaluatie Het was wel lastig om alle informatie op te zoeken omdat ik zelf ook al wat wist. Daarna alles bestelt en getest. Het testen ging niet helemaal foutloos. Vaak zie je kleine dingen over het hoofd waardoor je dan weer even opgehouden wordt. Dat was zowel in de hardware als in de software. Het bouwen ging ook niet vlekkeloos. De robot is iets groter dan 10cm bij 10cm, omdat er later nog schroefjes bij kwamen, of een onderdeel verkeerd werd gemaakt. Eén motor zat iets hoger dan de andere, eerst dacht ik dat dat geen probleem zou geven, maar ik heb uiteindelijk wel de halve robot gesloopt om het weer goed te maken. Met het solderen had ik over het hoofd gezien dat er twee banen doorliepen. Met het testen bleek dat er kortsluiting was. Na een half uur had ik pas door dat het hem in de banen zat. Deze zijn doorgekrast en toen werkte het weer. Tijdens het knutselen zijn een paar draden van de lijnsensoren afgebroken. Ik heb toen nieuwe sensoren gekocht en gelijk krimpkous mee besteld om de draden af te schermen na het solderen. Ook deed de robot raar met het programmeren, dit bleek hem te zitten in te lege batterijen, waardoor de servomotoren raar gingen doen. Het was een zeer leerzaam project en ik heb er veel van geleerd. Op papier zijn dingen weer heel anders als in de praktijk. En komen sommige grote problemen voort uit een heel klein iets. 28 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Bronvermelding: Hulens, D. (2011). Hulens Dries Technology. Verkregen op 17 juni 2011 van http://hulens.be/sumobot.html Cook, D. Illustrated Guide to American Robot Sumo. Verkregen op 5 juli 2011 van http://www.robotroom.com/SumoRules.html 2008. Natuurkunde overal deel 1&2. Houten: EPN Webshop: www.prototype.nl Webshop: www.okaphone.nl Continue gebruikt vanaf de zomer van www.Arduino.cc Kompanje, A. (2009). Arduino Programmeer manual. Verkregen op 11 november 2011 van http://arduino.nu/download/Arduino%20manual%201_0%20NL.pdf Lijnsensor met CNY70. Verkregen op 20 september 2011 van http://www.kreativeschaos.com/artikel/liniensensor-mit-cny70 Wat is een transistor? Verkregen op 21 september 2011 van http://www.schakelingenonline.nl/artikelen/transistor.htm Batterij. Verkregen op 21 september 2011 op http://nl.wikipedia.org/wiki/Batterij_(elektrisch) Jeroen Vreuls (2006). De LED. Verkregen op 24-12-2011 op http://www.circuitsonline.net/artikelen/view/32 Stroombron. Verkregen op 24 december 2011 van http://www.schematheek.net/index.php?p=schema&id=64 LM7805. Verkregen op 8 januari 2012 van http://www.fairchildsemi.com/ds/LM/LM7805.pdf LM2575. Verkregen op 8 januari 2012 van http://www.national.com/mpf/LM/LM2575.html#Overview 29 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 Bijlage: Volledig programma: (Zonder feedback van de afstandssensor) #include <Servo.h> // These constants won't change: const int buttonPin = 2; const int ledPin = 9; Servo MotorLinks; Servo MotorRechts; Servo myservo; const int sensorPin = A3; const int sensorLinks = A0; const int sensorRechts = A1; // These constants change: int sensorValue = 0; int sensorValueLinks = 0; int sensorValueRechts = 0; int buttonState = 1; int Wacht = 0; int val1 = 0; int val2 = 0; int Stand = 0; int Zien = 0; int Bit = 0; int Keuze = 0; //------------------------------------------------------------------------------------- Setup void setup() { myservo.attach(3); Stand = 511; Stand = map(val2, 0, 1023, 0, 179); Serial.begin(9600); pinMode(ledPin, OUTPUT); Wacht = 50; Flitsen(); Wachten(); } //------------------------------------------------------------------------------------- Wachten Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 30 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 void Wachten(){ buttonState = digitalRead(buttonPin); if (buttonState == LOW) { Wacht = 100; Flitsen(); Wacht = 200; Flitsen(); Wacht = 100; Flitsen(); delay (2100); digitalWrite(ledPin, HIGH); delay(500); MotorLinks.attach(10); MotorRechts.attach(11); loop(); } else { Wachten(); } } //------------------------------------------------------------------------------------- Flitsen void Flitsen(){ for (int i=0; i<4;){ digitalWrite(ledPin, HIGH); delay (Wacht); digitalWrite(ledPin, LOW); delay (Wacht); i++; } return; } //------------------------------------------------------------------------------------- Loop void loop() { Serial.println("Loop"); Afstandssensor(); Lijnsensor(); Beslissen(); Rijden(); } //------------------------------------------------------------------------------------- Beslissen Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O 31 Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 void Beslissen(){ if (Zien == 0 && Bit == 0){ Serial.println("Linksom draaien"); //Niets gezien en als laatst rechts een lijn gezien => Linksom draaien tot er een voorwerp te zien is val1 = 1023; val2 = 1023; } if (Zien == 0 && Bit == 1){ Serial.println("Rechtsom draaien"); //Niets gezien en als laatst links een lijn gezien => Rechtsom draaien tot er een voorwerp te zien is val1 = 0; val2 = 0; } if (Zien == 1 && Keuze == 0){ Serial.println("Rechtuit rijden naar voorwerp"); //Voorwerp voor de robot en geen lijn te zien val1 = 0; val2 = 1023; } if (Zien == 1 && Keuze == 1){ Serial.println("Beide kanten een lijn maar draaien"); //Voorwerp voor de robot en beide kanten een lijn te zien val1 = 1023; val2 = 1023; } if (Zien == 1 && Keuze == 2){ Serial.println("Linksom"); //Voorwerp voor de robot en Rechts een lijn val1 = 1023; val2 = 1023; } if (Zien == 1 && Keuze == 3){ Serial.println("Rechtsom"); //Voorwerp voor de robot en Links een lijn zien val1 = 0; val2 = 0; } return; } 32 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 //------------------------------------------------------------------------------------- Rijden void Rijden(){ Serial.println("Rijden"); Serial.println("Linker Motor = "); Serial.println(val1); Serial.println("Rechter Motor = "); Serial.println(val2); val1 = map(val1, 0, 1023, 0, 179); MotorLinks.write(val1); val2 = map(val2, 0, 1023, 0, 179); MotorRechts.write(val2); return; } //------------------------------------------------------------------------------------- Lijnsensor void Lijnsensor(){ Serial.println("Lijnsensor"); sensorValueLinks = analogRead(sensorLinks); Serial.println("Links = "); if (sensorValueLinks < 200){ sensorValueLinks = 0; Serial.println("Wit"); } else { sensorValueLinks = 1; Serial.println("Zwart"); } sensorValueRechts = analogRead(sensorRechts); Serial.println("Rechts = "); if (sensorValueRechts < 200){ sensorValueRechts = 0; Serial.println("Wit"); } else { sensorValueRechts = 1; Serial.println("Zwart"); } Serial.println("Keuze = "); 33 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O Sumo Robot Profiel Werkstuk Natuurkunde Xander Huisman 5O 13-1-2012 if (sensorValueLinks == 1 && sensorValueRechts == 1){ Serial.println("Vooruit"); Keuze = 0; } if (sensorValueLinks == 0 && sensorValueRechts == 0){ Serial.println("Achteruit"); Keuze = 1; } if (sensorValueLinks == 1 && sensorValueRechts == 0){ Serial.println("Linksom"); Keuze = 2; Bit = 0; } if (sensorValueLinks == 0 && sensorValueRechts == 1){ Serial.println("Rechtsom"); Keuze = 3; Bit = 1; } return; } //------------------------------------------------------------------------------------- Afstandssensor void Afstandssensor(){ Serial.println("Afstand Meten"); sensorValue = analogRead(sensorPin); Serial.println("Afstand = "); Serial.println(sensorValue); if (sensorValue>=90){ Zien = 1; Serial.println("Gevonden"); } else { Zien = 0; Serial.println("zoeken"); } return; } 34 Profiel Werkstuk Natuurkunde 2011-2012 Xander Huisman 5O