Swarmbots: Autonoma Arduino bilar som spelar musikaliska stolar (3 / 6 steg)
Steg 3: Linje Trackers
Material:
Tre linje trackers. Används: VEX Robotics linje Tracker http://www.vexrobotics.com/276-2154.html och SparkFun RedBot Sensor - rad efterföljare http://www.vexrobotics.com/276-2154.html
Installationer:
Oavsett vilken typ du använder, linje trackers har tre utgångar: VCC, GND och ut. UT går till en analog pinne i arduino, GND går till marken, och VCC kan gå till ~ + 5V.
Dessa "linje trackers" består av en fotodiod som i huvudsak matar arduino värden som överensstämmer med mängden ljus som det mottar. Eftersom vi använde Reflexband för spår av vårt spel, kunde linje trackers lätt skilja mellan marken och golvet i spelfältet.
Till att börja, förvärvade vi först raden trackers från ovan angiven webbplatser. Vi anslöt dem på framsidan av vår bil. Anslutning av dem till baksidan vore oklokt eftersom bilen kommer att vara alltför långt bort i raden i samband med att sensorerna upptäcka att bilen är på väg bort av linjen och försöket att tillämpa en korrigering. Således är att placera sensorerna framför bilen det optimala valet för den snabbaste raden spårar reaktioner. Höger och vänster rad tracker ska dessutom placeras tillräckligt långt avstånd från centrum tracker att när center tracker är ovanför linjen, är varken höger eller vänster tracker ovanför linjen.
Observera att om du försöker att ansluta alla de komponenter som behöver makt (linje trackers, motorer, ljud sensorer, IR/ultraljudssensorer etc.) till 5V källa på Arduino, du kommer att ha en dålig tid. 5V källan inte kan leverera tillräckligt aktuell för alla dessa komponenter och så de kommer inte att fungera korrekt, om alls. För att bekämpa detta, vi anslutna linje trackers till den + 5V för arduino, ljud- och avståndet till 12V (8 1.5V batterier) leveranser driver motorerna. Det kan finnas andra varianter av den här inställningen att se till att alla sensorer (och motorerna) levererade tillräcklig kraft för att fungera korrekt, men denna setup fungerade bra för oss.
Efter anslutning varje sensor till en strömkälla, måste du ansluta varje sensor till en Arduino PIN-kod så att den kan läsa värdena på sensorn. De måste vara ansluten till en analog stift, inte en digital PWM.
Nu måste vi tala arduino hur till spår linjen tanke på tillförseln av dessa tre linje trackers. Huvudprincipen i koden är att om den mittersta sensorn ser linjen, du är i god form och bilen kan gå rakt. På grund av hur vi placerade på höger och vänster sensorer, kan vi avgöra om bilen vridande av fodra baserat på om höger eller vänster sensorerna börjar upptäcka Reflexband linjen. Genom att veta detta, kan vi då säga bilen att använda lämpliga korrigeringar för att styra bilen tillbaka mot linjen. Beroende på vilken sensor känner av linjen, kan du faktiskt bestämmer vilken riktning korrigeringen måste tillämpas. Till exempel om rätt sensorn känner linjen, bilen pendlade från linjen mot vänster och en rätt korrigering måste tillämpas.
Du måste också leka med din tröskelvärde, som markerar skillnaden i sensormätningar mellan linjen och golvet. Detta värde varierar beroende på typ och reflexion av linjen och golvet bilen driver på, distansera av sensorer från marken, och typ av sensorer som du köper. Därför måste du mixtra med koden och testa bilen för att se vilka tröskelvärdet är bäst för dig. I huvudsak kommer du vill testa din sensorer genom att skriva deras Läs värden i följetong monitor. Denna debug genomfördes i vår kod nedan.
Koden nedan är en metod som anger hur raden bilen spårar, baserad på teorin ovan. För att genomföra raden spårar i huvudsakliga slingan med denna metod, måste det bara anropas en gång.
< 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 mittlinjen = analogRead(A0); / / använda dessa utskrivna utgångar i följetong monitor för att bestämma dina trösklar < br > Serial.print ("rätten:"); < br > Serial.print(rightLine); < br > Serial.print (", Center:"); < br > Serial.print(centerLine); < br > Serial.print (", vänster:"); < br > Serial.println(leftLine); < /p >< p > om (rightLine < rlThresh) {< br > < br > delay(t) Serial.println ("sväng vänster, på rätt sensor"); < br > turnRight(); < /p >< p >} < /p >< p > annars om (leftLine < rlThresh) {< br >< /p >< p > turnLeft(); < br > Serial.println ("sväng höger på vänster sensor "); < br > delay(t); < /p >< p >} < /p >< p > annars om (mittlinjen < centerThresh) {< /p >< p > goStraight();
Serial.println("Straight");
Delay(t); < /p >< p >} < /p >< p >} < /p >
Totala koden för sensorer genomfört visas alla tillsammans i slutet av instruktionerna.
Eftersom Arduinos kan bara hantera en primär funktion i metoden loop(), är det inte möjligt att ha det lyssna för musiken vid försök att följa linjen. Således hade vi att kringgå de vanliga reglerna för musikaliska stolar. Varje bil var programmerad att följa linjen 14 sekunder efter första ljudet. Under dessa 14 sekunder, ljudet fortsatte att spela. Efter 14 sekunder, både ljudet avstängd och bilarna stannade längs med den och vände inåt för att hitta tillgängliga stolar. Detta gav illusionen att bilarna svarar på musiken. Vid programmering bilar att köra 14 sekunder var relativt enkelt, programmering musikaliska stolar låten spela bara 14 sekunder var svårare och krävs användning av Java-programmering genom Eclipse. Nedan är koden för att göra våra musikaliska stolar sång, Star Wars tema låten eftersom vårt spel av musikaliska stolar spelet spelades på den 4 maj 2016, spela bara 14 sekunder.
< p > Importera objectdraw.*; importera java.applet.AudioClip; < /p >< p > / ** * klass: fysik 128
* Term: Våren 2016
* Instruktör: Janice Hudgings
** Projektsamarbete: musikaliska stolar
* Skolan: Fremont Academy
* Grupp: Femineers
* *
*--Spelar musikaliska stolar låten (John Williams' Star Wars introt för * 14 sekunder)
*--Fördröjning av 1 sekund från start för applet till början av låten
*--Total körtid är 14 sekunder *
** Fönster storlek: 250 x 250 ** Adam Mitchell, onsdagen den 4 maj 2016 * / offentliga klassen MusicalChairsPlayer utökar WindowController {
privata statisk sista int THRESHOLD_DELAY = 1; fördröjning för privata statisk sista int THRESHOLD_PLAY = 14. tid att köra för
public void begin() {
Lokala variabler AudioClip musik; Booleska spelar = false; om musik spelas
Läsa in ljudklipp musik = getAudio("starWars.au");
Spela musik music.play(); spela = sant;
Spela in den aktuella tiden int tempTime1 = (int) System.currentTimeMillis() / 1000; < /p >< p > medan (spelar) {< /p >< p > om ((int) System.currentTimeMillis() / 1000 - tempTime1 > = (THRESHOLD_DELAY + THRESHOLD_PLAY)) {
Stoppa musiken efter 10 sekunder, för totalt 14 music.stop(); < /p >< p > spela = false; < /p >< p >} < /p >< p >} < /p >< p >} < /p >< p > public void onMouseClick (plats punkt) {< /p >< p > / / Starta om koden < br > this.begin(); < /p >< p >} < /p >< p >} < /p >