NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. Door mee te doen aan deze uitdaging kan je Nspyre laten zien wat je kan. Schrijf jij de beste oplossing dan is deze lego mindstorms nxt 2.0 set voor jou. In deze uitdaging ga je een java programma schrijven wat pannenkoeken bestrooit met beleg. Dit gaan we simuleren met gekleurde balletjes. (Er is ook een c versie van deze opdracht beschikbaar).
DOEL: Pannenkoeken bakker “smaakt ‘t” maakt een drukke tijd door en om de keuken bottleneck te verhelpen wilt men de keuken gaan automatiseren. Er is al een prototype van beleg aanvoer aanwezig, deze is nog niet 100%, want het beleg komt niet in de juiste volgorde aan, en er zijn soms extra beleg ingrediënten of soms even geen beleg. Deze moet samenwerken met de belegger prototype. Ons doel is om deze samen werking te programmeren. Maak een programma dat 4 pannenkoeken maakt, drie volgens een bestelling en eentje met ‘overbodig’ beleg die door het personeel gegeten kan worden. De beleg toevoer band is nog niet honderd procent in orde en geeft behalve het gewenste beleg (in willekeurige volgorde) ook nog wat rest beleg. Ook kan het voorkomen dat er een keer geen beleg geleverd wordt. Als de bestelde pannenkoeken belegt zijn en er dan 3 keer geen beleg van de toevoer band komt, dan komt er geen beleg meer en zijn alle pannenkoeken belegt en kan de machine gestopt worden. Bestelling: 1. 2. 3.
Pannenkoek met appel, spek en noten Pannenkoek met kaas en spek Pannenkoek met oude kaas, kaas en spek
SIMULATOR: We hebben natuurlijk geen echte machine, maar simuleren het met een lego mindstorm kleuren sorteerder, zie het volgende youtube filmpje wat het kan: http://www.youtube.com/watch?v=3-RFg6_THHo beleg
Kleur
Appel
Groen
Kaas
Geel
Spek
Rood
Noten
Blauw
1
PANNENKOEKEN BELEGGER Deze pannenkoeken belegger heeft 2 motoren, 2 druk sensoren en 1 kleuren sensor:
Motor A: Deze wordt gebruikt om het platform te bewegen en ballen door te laten. (beleg toevoegband). Motor B: Deze wordt gebruikt om de sorteerbakken te draaien. (pannenkoeken) Touch sensor A: Deze is ingedrukt als er (bijna) een balletje ligt onder de kleuren sensor. Het kan ook zijn dat er geen balletje onder de kleuren sensor ligt, deze touch sensor wordt dan toch ingedrukt. Touch sensor B: Deze is ingedrukt als bakje 1 onder de bal-uitgang ligt. Kleur sensor, hiermee kunnen we de kleur van de bal meten.
Poort indeling: Motor A Motor B Touch sensor A Touch sensor B Kleuren sensor
Port A Port B Port 1 Port 2 Port 3
Extra informatie:
Door de mechanische constructie moet de toevoerband 55 graden doorgedraaid worden nadat touchsensor A is ingedrukt om ervoor te zorgen dat het balletje onder de kleuren sensor ligt. Door de mechanische constructie moet de pannenkoekenhouder 45 graden doorgedraaid worden zodat een pannenkoek correct onder de beleg toevoer band ligt.
LEJOS DOWNLOADS Voor het programma gaan we gebruik maken van de lejos java classes. Zie volgende link voor meer informatie, http://lejos.sourceforge.net/nxj.php. Om te kunnen bouwen hoef je alleen de classes.jar uit de file leJOS_NXJ_0.9.1beta-3_win32.zip aan je java build path toe te voegen, deze file is te downloaden vanaf: http://sourceforge.net/projects/lejos/files/lejosNXJ/0.9.1beta/. De classes met functies die minimaal nodig zijn staan ook beschreven in de volgende hoofdstukken.
2
API MOTOREN Imports: import lejos.nxt.MotorPort; import lejos.nxt.NXTRegulatedMotor; class NXTRegulatedMotor /** * Use this constructor to assign a variable of type motor connected * to a particular port. * @param port to which this motor is connected * (MotorPort.A, MotorPort.B or MotorPort.c) */ public NXTRegulatedMotor(TachoMotorPort port)
/** * Sets desired motor speed , in degrees per second; * The maximum reliably sustainable velocity is 100 x battery * voltage under * moderate load, such as a direct drive robot on the level. * @param speed value in degrees/sec */ public void setSpeed(int speed)
/** * Causes motor to rotate forward. */ public void forward()
/** * Causes motor to rotate backwards. */ public void backward()
/** * Causes motor to stop, pretty much * instantaneously. In other words, the * motor doesn't just stop; it will resist * any further motion. * Cancels any rotate() orders in progress */ public void stop()
3
/** * Rotate by the requested number of degrees. * Wait for the move to complete. * @param angle */ public void rotate(int angle)
/** * Rotate to the target angle. Do not return until the move is * complete. * @param limitAngle Angle to rotate to. */ public void rotateTo(int limitAngle)
4
TOUCH SENSOR: Imports: import lejos.nxt.SensorPort; import lejos.nxt.TouchSensor; Class TouchSensor /** * Create a touch sensor object attached to the specified port. * @param port an Analog/Digital port, e.g. SensorPort.S1 */ public TouchSensor(SensorPort port)
/** * Check if the sensor is pressed. * @return true if sensor is pressed, false otherwise. */ public boolean isPressed()
5
KLEUREN SENSOR: Imports: import lejos.nxt.ColorSensor; import lejos.nxt.SensorPort;
Class ColorSensor /** * Create a new Color Sensor instance and bind it to a port. * @param port Port to use for the sensor. (eg. SensorPort.S1) */ public ColorSensor(SensorPort port)
/** * Return a Color Object that contains the calibrated color readings. * @return Color data */ public ColorSensor.Color getColor()
Class ColorSensor.Color public public public public
static static static static
final final final final
int int int int
RED = 0 GREEN = 1; BLUE = 2; YELLOW = 3;
/** * Return a basic color, for values see above defines. * If no color found, then another value is returned, we can use that * for no ball detected. */ public int getColor()
6
WAIT Imports: import lejos.util.Delay; Class Delay: /** * Wait for the specified number of milliseconds. * Delays the current thread for the specified period of time. Can not * be interrupted (but it does preserve the interrupted state). * @param period time to wait in ms */ public static void msDelay(long period)
7
OUTPUT TO SCREEN LeJOS NXJ supports the standard java System.out.println method and scroll the output on the NXT LCD screen.
8
INLEVEREN: Het programma dient geschreven te worden met gebruik maken van de lejos classes. Stuur een zip file op met al je classes, en we zullen het bestuderen en testen op onze opstelling. Tijdens je gesprek kan je feedback krijgen op je input.
Programma Eventuele aannames.*
9