Simons “London Bus”
Simons special byggede bus kan både køre autonomt – hvor den kan manøvrere udenom forhindringer –
men kan også fjernstyres med en sekundær mindstorm enhed.
Selvstyrende Bus med bumpers og drejende afstands sensor.
[lyte id=”iK-h0qEB6cQ” /]
Fjernbetjent bus.
[lyte id=”p15vPmirEJk” /]
Kode til London bus.
#pragma config(Sensor, S1, bumpervenstre, sensorTouch) #pragma config(Sensor, S2, bumperhojre, sensorTouch) #pragma config(Sensor, S3, afstand, sensorSONAR) #pragma config(Motor, motorA, venstre, tmotorNXT, PIDControl, reversed, encoder) #pragma config(Motor, motorB, scanner, tmotorNXT, PIDControl, encoder) #pragma config(Motor, motorC, hojre, tmotorNXT, PIDControl, reversed, encoder) //*!!Code automatically generated by 'ROBOTC' configuration wizard !!*// int bumperhits; int afstandsFactor; // index - forhold mellem vinkel og afstand int mellemFaktor; task resetbumper() { while (true) { bumperhits = 0; wait1Msec(5000); } } task display() { while(true) // infinite loop: { nxtDisplayCenteredTextLine(3, "Factor: %d", afstandsFactor ); wait1Msec(100); // Wait 100 milliseconds to help display correctly } } task factor() { while (true) { mellemFaktor = (1000/(abs(nMotorEncoder[motorB]))); mellemFaktor = (mellemFaktor+5); if (mellemFaktor > 130) { afstandsFactor = 130; } else { afstandsFactor = mellemFaktor; } } } task scan() { int targetDegrees = 55; int targetDegrees2 = (-55); string direction = "right"; while (true) { if(SensorValue[afstand] > afstandsFactor) { if (nMotorEncoder[motorB] > targetDegrees) { direction = "left"; } if (nMotorEncoder[motorB] < targetDegrees2) { direction = "right"; } if(direction == "left") { motor[motorB] = -20; } if(direction == "right") { motor[motorB] = 20; } } else { motor[motorB] = 0; } } } task main() { nMotorEncoder[scanner] = 0; StartTask(display); StartTask(scan); StartTask(resetbumper); StartTask(factor); while(true) { if (message == 30) { motor[venstre] = 100; motor[hojre] = 100; wait1Msec (30); ClearMessage(); } if (message == 03) { motor[venstre] = -100; motor[hojre] = -100; wait1Msec (30); ClearMessage(); } if (message == 12) { motor[venstre] = 50; motor[hojre] = 0; wait1Msec (30); ClearMessage(); } if (message == 21) { motor[venstre] = 0; motor[hojre] = 50; wait1Msec (30); ClearMessage(); } else { if ((SensorValue[bumperhojre] == 0) && (SensorValue[bumpervenstre] == 0)) { if (bumperhits > 3 ) { motor[hojre] = -50; motor[venstre] = -50; wait1Msec(2000); motor[hojre] = 50; motor[venstre] = -50; wait1Msec(500); } if(SensorValue[afstand] < afstandsFactor) { if (nMotorEncoder[motorB] < 0) { motor[hojre] = ((SensorValue[afstand] -40) + (abs(nMotorEncoder[motorB]))); motor[venstre] = 100; } else { motor[hojre] = 100; motor[venstre] = ((SensorValue[afstand] -40) + (abs(nMotorEncoder[motorB]))); } } else { motor[hojre] = 100; motor[venstre] = 100; } } if (SensorValue[bumpervenstre] == 1) { PlaySoundFile("Woops.rso"); motor[hojre] = -20; motor[venstre] = 20; wait1Msec(500); bumperhits ++; } if (SensorValue[bumperhojre] == 1) { PlaySoundFile("Woops.rso"); motor[hojre] = 20; motor[venstre] = -20; wait1Msec(500); bumperhits ++; } } } }
Kode til fjernbetjening.
int hojre = 12; int venstre = 21; int frem = 30; int bak = 03; string besked; task display() { while(true) // infinite loop: { nxtDisplayCenteredBigTextLine(3, besked ); wait1Msec(100); // Wait 100 milliseconds to help display correctly } } task main() { StartTask(display); while(true) { nNxtExitClicks = 5; if(nNxtButtonPressed == 1) { sendMessage(hojre); besked = "Hojre"; } if(nNxtButtonPressed == 2) { sendMessage(venstre); besked = "Venstre"; } if(nNxtButtonPressed == 3) { sendMessage(frem); besked = "Frem"; } if(nNxtButtonPressed == 0) { sendMessage(bak); besked = "Bak"; } } }