ΜΑΘΗΤΙΚΟ ΦΕΣΤΙΒΑΛ ΡΟΜΠΟΤΙΚΗΣ 19 Ο ΓΥΜΝΑΣΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΕΚΘΕΣΙΑΚΟ ΜΕΡΟΣ
To project “FIREEXPLORER” Ένα ρομποτικό όχημα «Πυρο-Εξερευνητής» το οποίο αποφεύγει τα υψηλά εμπόδια με τη βοήθεια του αισθητήρα υπερήχων και τα χαμηλά εμπόδια με τη βοήθεια του αισθητήρα αφής. Ο συναγερμός του “fire alarm” κινητοποιείται όταν ο αισθητήρας θερμοκρασίας ανιχνεύει θερμοκρασία > 28 ο C.
Το LEGO RCX ρομπότ “FireExplorer”
Το πρόγραμμα “FireExplorer” σε LEGO RCX
Το LEGO NXT ρομπότ “Bumperbot”
Το πρόγραμμα “Bumperbot3”σε NXT-G
Το LEGO NXT ρομπότ “Explorer”
Το πρόγραμμα “Explorer” σε NXT-G
Το NXT ρομπότ “FireExplorer”
Το πρόγραμμα “FireExplorer”σε ΝΧΤ-G
Το LEGO EV3 ρομπότ “Explorer”
Το LEGO EV3 ρομπότ “FireExplorer”
Το πρόγραμμα “FireExplorer” σε LEGO EV3
Το ρομπότ “FireExplorer” σε Arduino
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) /* RC looking around with ultrasound on a servo and turning to the direction of longest distance from an obstacle. In addition to that, RC has moustache type two switches -->right touch or closing circuit lights the blue LED on and makes a left turn -->left touch or closing circuit lights the red LED on and makes a right turn */ #include #include "AFMotor.h" AF_DCMotor motor1(1, MOTOR12_64KHZ); AF_DCMotor motor2(2, MOTOR12_64KHZ); Servo servoHEAD; #define echoPin 14 // Echo Pin #define trigPin 15 // Trigger Pin const int ledfire = 20; // choose the pin for the LEDs const int inputLEFT = 16; // choose the input pin (for a pushbutton) const int inputRIGHT = 17; int minimumRange = 40; // Minimum range needed long duration, distance; // Duration used to calculate distance int maxDistance[30]; int maxD=1; int i,vector,pos,time; //####################################################################################/ void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(ledfire, OUTPUT); // declare LED as output pinMode(inputLEFT, INPUT); // declare pushbutton as input pinMode(inputRIGHT, INPUT); motor1.setSpeed(170); motor2.setSpeed(170); servoHEAD.attach(10);
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) } //####################################################################################/ void loop() { servoHEAD.write(90); moustache(); find_distance(); control_minimum_distance(); /******************************************/ if (distance 20) { motor1.run(RELEASE); motor2.run(RELEASE); i=0; for(pos = 0; pos < 180; pos= pos + 6) { i=i+1; servoHEAD.write(pos); find_distance(); maxDistance[i]=distance; if(maxDistance[i]> maxD) {maxD = maxDistance[i]; vector = pos; delay(30); } servoHEAD.write(90); } /* for(pos = 180; pos>=1; pos= pos - 6) { i = i+1;
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) servoHEAD.write(pos); find_distance(); maxDistance[i]=distance; if(maxDistance[i]> maxD) {maxD = maxDistance[i]; vector = pos; delay(30); }*/ //} Serial.print("maxD= "); Serial.println(maxD); Serial.print(" At an angle: "); Serial.println(vector); /****************************************/ if(vector<90) { time = vector*(500/90); motor2.run(BACKWARD); motor1.run(FORWARD); moustache(); delay(time); } if(vector>=90) { time = (vector-90)*(500/90); motor1.run(BACKWARD); motor2.run(FORWARD); moustache(); delay(time); } Serial.print(" time = "); Serial.println(time); } else {
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) if (distance >= minimumRange) { motor1.run(BACKWARD); motor2.run(BACKWARD); moustache(); Serial.print("distance>maximum*********** ="); Serial.println(distance); } //getting the voltage reading from the temperature sensor int reading = analogRead(sensorPin); // converting that readbbbbbbbbbbbbbbbbing to voltage, for 3.3v arduino use 3.3 float voltage = reading * 5.0; voltage /= ; // print out the voltage Serial.print(voltage); Serial.println(" volts"); // now print out the temperature float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset //to degrees ((voltage - 500mV) times 100) Serial.print(temperatureC); Serial.println(" degrees C"); if(temperatureC >= 19) { motor1.run(BACKWARD); motor2.run(BACKWARD); delay(1000) motor1.run(RELEASE); motor2.run(RELEASE); digitalWrite(ledfire, HIGH); } else {
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) digitalWrite(ledfire, LOW); } delay(1000); //waiting a second } //####################################################################################/ void find_distance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //Calculate the distance (in cm) based on the speed of sound. distance = duration/58.2; } //####################################################################################/ void control_minimum_distance() { if(distance<20) { motor1.run(RELEASE); motor2.run(RELEASE); while (distance<20) { motor1.run(FORWARD); motor2.run(FORWARD); delay(50); find_distance(); }
Το πρόγραμμα “FireExplorer” σε Wiring C (Arduino) } else { motor1.run(BACKWARD); motor2.run(BACKWARD); moustache(); } } //####################################################################################/ void moustache() { int val1 = digitalRead(inputLEFT); // read input value int val2 = digitalRead(inputRIGHT); if (val1 == HIGH) // check if the input is HIGH { motor1.run(RELEASE); motor2.run(RELEASE); motor2.run(BACKWARD); // and in that case turns right motor1.run(FORWARD); delay(500); } else { servoHEAD.write(90); } if (val2 == HIGH) // check if the input is HIGH { motor1.run(RELEASE); motor2.run(RELEASE); motor1.run(BACKWARD); motor2.run(FORWARD); delay(500); } else { servoHEAD.write(90); }
Αλγόριθμος ή …