Sumo Robot

advertisement
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
Download