Stap 3: Lijn Trackers
Materialen:
Drie lijn trackers. Typen gebruikt: VEX Robotics lijn Tracker http://www.vexrobotics.com/276-2154.html en SparkFun RedBot Sensor - lijn volgeling http://www.vexrobotics.com/276-2154.html
Installaties:
Ongeacht welk type u gebruiken, de lijn trackers hebben drie uitgangen: GND, VCC en OUT. UIT gaat naar een analoge pin in de arduino, gaat de GND op grond, en VCC kunt gaan ~ + 5V.
Deze "lijn trackers" bestaan uit een fotodiode die in wezen voedt de arduino-waarden die overeenkomen met de hoeveelheid licht die het ontvangt. Omdat wij reflecterende tape voor het bijhouden van ons spel gebruikt, konden de lijn trackers gemakkelijk onderscheid maken tussen de grond en de verdieping van het speelveld.
Om te beginnen, verworven we eerst de trackers van de lijn van de boven-genoemde websites. We dan ze aangesloten op de voorkant van onze auto. Hen verbinden met de achterkant zou onverstandig zijn, omdat de auto te ver weg van de lijn tegen de tijd dat de sensoren detecteren worden zal dat de auto zich beweegt op de lijn en de poging om een correctie toepassen. Plaatsen van de sensoren aan de voorkant van de auto is dus de optimale keuze voor de snelste lijn reacties bijhouden. De rechter en linker lijn tracker moet bovendien ver genoeg afstand van de center-tracker dat wanneer de tracker centrum hoger is dan de regel, noch de rechts of links tracker boven de regel zijn geplaatst worden.
Merk op dat als u probeert alle onderdelen die nodig power (lijn trackers, motoren, geluid sensoren, infrarood/ultrasone sensoren enz.) verbinden met de bron van de 5V op de Arduino, u gaat hebben van een slechte tijd. De 5V-bron kan niet genoeg stroom voor al deze onderdelen leveren en dus ze zal niet goed functioneren, als helemaal. Ter bestrijding van dit, wij verbonden de trackers van de lijn naar de + 5V van de arduino en de sensoren van het geluid en de afstand op de 12V (8 1.5V batterijen) levering voeden van de motoren. Er kunnen andere variaties van deze opstelling geleverd om ervoor te zorgen dat alle sensoren (en de motoren) voldoende macht om goed te functioneren, maar deze setup werkte goed voor ons.
Na elke sensor aansluiten op een voedingsbron, moet u elke sensor verbinden met de pin van een Arduino, zodat het de waarden van de sensor kan lezen. Zij moeten worden aangesloten op een analoge pin, niet een digitale PWM.
Nu moeten we de arduino hoe om bij te houden van de lijn gegeven van de ingangen van deze drie lijn trackers. Het belangrijkste beginsel van de code is dat als de middelste sensor de lijn ziet, je in goede vorm bent en de auto kan rechtdoor. Vanwege de hoe we de links en rechts sensoren geplaatst, kunnen we bepalen als de auto is veering uit de lijn op basis van het al dan niet de rechter- of linkerzijde sensoren beginnen te detecteren de reflecterende tape-lijn. Door dit wetende, kunnen wij vervolgens vertellen de auto passende correcties om te sturen de auto terug naar de regel toe te passen. Afhankelijk van welke sensor de lijn detecteert, kunt u effectief bepalen welke richting de correctie moet worden toegepast. Bijvoorbeeld, als de juiste sensor de lijn detecteert, de auto is veering off van de lijn naar links, en een juiste correctie moet worden toegepast.
Je moet ook spelen met uw drempelwaarde, die het verschil in sensor lezingen tussen de lijn en de vloer merken. Deze waarde zal variëren afhankelijk van het type en de reflectiviteit van de lijn en de vloer die uw auto rijdt, de afstand van de sensoren uit de grond en de aard van de sensoren die u koopt. Om deze reden moet u prutsen met de code en test de auto om te zien welke drempelwaarde het beste voor u is. In wezen, zal u wilt testen van uw sensoren door te drukken hun Lees waarden in de seriële monitor. Deze debug werd in onze onderstaande code geïmplementeerd.
De onderstaande code is een methode die aangeeft hoe de lijn auto bijhoudt, gebaseerd op de theorie hierboven vermeld. Wilt implementeren lijn volgen in de hoofdlus met behulp van deze methode, moet het slechts eenmaal worden aangesproken.
<p>int centerThresh = 10; <br>int rlThresh = 800;</p><p>void lineTrack(int t) { </p><p>int rightLine = analogRead(A1); <br>int leftLine = analogRead(A2); <br>int centerLine = analogRead(A0); // use these printed outputs in the serial monitor to determine your thresholds <br>Serial.print("Right: "); <br>Serial.print(rightLine); <br>Serial.print(", Center: "); <br>Serial.print(centerLine); <br>Serial.print(", Left: "); <br>Serial.println(leftLine);</p><p>if (rightLine < rlThresh) { <br> Serial.println("Turn left, on right sensor"); <br> turnRight(); <br> delay(t); </p><p>} </p><p>else if (leftLine < rlThresh) {<br></p><p>turnLeft(); <br>Serial.println("Turn right, on left sensor"); <br>delay(t); </p><p>} </p><p>else if (centerLine < centerThresh) { </p><p>goStraight(); Serial.println("Straight"); delay(t); </p><p>} </p><p>}</p>
De totale code voor de sensoren uitgevoerd worden samen alle weergegeven aan het einde van de instructies.
Omdat de Arduinos slechts één primaire functie in de loop methode behandelen kan, is het niet haalbaar om het luisteren naar de muziek tijdens een poging om de lijn te hebben. Dus moesten we het omzeilen van de reguliere regels van stoelendans. Elke auto is geprogrammeerd om te volgen de lijn 14 seconden na het horen van het oorspronkelijke geluid. Tijdens die 14 seconden, het geluid bleef spelen. Na 14 seconden, zowel het geluid uitgeschakeld en de auto gestopt volgt op de regel en gekeerd om te zoeken naar beschikbare stoelen. Dit gaf de illusie dat de auto's werden reageert op de muziek. Terwijl de auto's om te rijden voor 14 seconden programmeren relatief eenvoudig was, programmering de stoelendans lied om te spelen voor slechts 14 seconden was moeilijker en vereist het gebruik van Java programmering door middel van Eclipse. Hieronder is de code om onze stoelendans song, de Star Wars-thema lied omdat onze game van stoelendans spel werd gespeeld op de 4e mei 2016, spelen voor slechts 14 seconden.
<p>import objectdraw.*; import java.applet.AudioClip;</p><p>/** * Class: Physics 128 * Term: Spring 2016 * Instructor: Janice Hudgings * * Project: Musical Chairs Collaboration * School: Fremont Academy * Group: Femineers * * * -- Plays the musical chairs song (John Williams' Star Wars Opening Theme for * 14 seconds) * -- Delay of 1 second from start of applet to beginning of song * -- Total run time is 14 seconds * * * Window Size: 250x250 * * Adam Mitchell, Wednesday, 4 May 2016 */ public class MusicalChairsPlayer extends WindowController { private static final int THRESHOLD_DELAY = 1; // the time to delay for private static final int THRESHOLD_PLAY = 14; // the time to run for public void begin() { // Local variables AudioClip music; Boolean playing = false; // whether the music is playing // Load the audio clip music = getAudio("starWars.au"); // Play the music music.play(); playing = true; // Record the current time int tempTime1 = (int) System.currentTimeMillis() / 1000;</p><p>while (playing) {</p><p>if ((int) System.currentTimeMillis() / 1000 - tempTime1 >= (THRESHOLD_DELAY + THRESHOLD_PLAY)) { // Stop the music after 10 seconds, for a total of 14 music.stop(); </p><p>playing = false; </p><p>}</p><p> }</p><p> }</p><p>public void onMouseClick(Location point) {</p><p>// Restart the code <br>this.begin();</p><p>} </p><p>}</p>