Projektas #6: Avarini? tarnyb? automobilis

Išmokite sukurti program?, kad „Code & Drive“ robotas mašina imituot? greitosios pagalbos automobil?. Pavyzdžiui: policijos automobil?, greit?j? ar ugniagesi? automobil?.

SUD?TINGUMO LYGIS: Vidutinis.

PRATIMO TRUKM?: 60 min.

MEDŽIAGOS:

  • 6 AA elementai
  • 1x USB – Mikro USB kabelis
  • Kompiuteris

JUNGTYS:

„Code & Drive“ robotas mašina tur?s b?ti sukonstruotas ir prijungtas pagal instrukcij? vadov?.

PROGRAMOS KODAS 

Galite atlikti š? projekt? naudodami „Arduino“, „Bitbloq“ arba kit? suderinam? vaizdin? programavimo programin? ?rang?, naudojan?i? blokus. Toliau pateikiamas reikiamas kodas.

„Arduino“ kodas

  1. Parsisi?skite  ir ?diekite „Arduino IDE“ program?. Ji si?loma „Windows“, „Mac OS“ ir „Linux“.
  2. Paleiskite „Arduino“ program? ir nukopijuokite ? j? toliau pateikt? kod?:
    int MdirectionA = 4, velocityA = 5, MdirectionB = 7, velocityB = 6; // MOTOR A AND MOTOR B SPEED AND DIRECTION
    
    int trigPin = 13;  // ULTRASONIC SENSOR PINS 
    
    int echoPin = 12;  
    
    float SSound = 0.0343;  // SOUND SPEED IN cm/us
    
    long length, distance ;  // VARIABLES TO CALCULATE DISTANCE IN cm
    int LEDG = 9; // GREEN LED PIN
    int LEDB = 10;  // BLUE LED PIN
    
    void setup() {
    
      //BUILD&CODE 4IN1 PORTS CONFIGURATION
    
      pinMode ( MdirectionA, OUTPUT);
      pinMode ( velocityA, OUTPUT);
      pinMode ( MdirectionB, OUTPUT);
      pinMode ( velocityB, OUTPUT);
      pinMode(trigPin, OUTPUT);  
      pinMode(echoPin, INPUT); 
      pinMode(LEDG , OUTPUT);     
      pinMode(LEDB , OUTPUT); 
    
    }
    
    void loop() {
    
    
        // CALCULATE DISTANCE
    
      digitalWrite(trigPin, LOW);        // VERIFY THAT THE TRIGGER IS DEACTIVATED
    
    
      delayMicroseconds(4);              // VERIFY THAT THE TRIGGER IS IN LOW
    
      digitalWrite(trigPin, HIGH);       // ACTIVATE THE PULSE
    
     
      delayMicroseconds(14);             // WAIT 10µs. THE PULSE REMAINS ACTIVE THIS TIME.
    
    
    
      digitalWrite(trigPin, LOW);        // STOP THE PULSE AND WAIT FOR ECHO
    
     length = pulseIn(echoPin, HIGH) ; //pulseIn MEASURE THE TIME IT TAKES THE DECLARED PIN (echoPin) TO CHANGE FROM LOW TO HIGH STATUS (FROM 0 TO 1)
    
      distance = SSound* length / 2; // CALCULATE DISTANCE
    
      if (( distance < 25) && ( distance > 1)) // IF THE MEASURED DISTANCE IS BETWEEN 15 AND 1 CM
    
    
     
      {
        // BACK
        //MOTOR B
        analogWrite (velocityB, 150);   // MOTOR B SPEED, FROM 0 (STOP) TO 255 (MAXIMUM SPEED)
    
        digitalWrite ( MdirectionB,HIGH); // MOTOR B ROTATION, LOW (FORWARD), HIGH (BACKWARD)
    
        //MOTOR A
        analogWrite (velocityA, 150);   // MOTOR A SPEED, FROM 0 (STOP)TO 255 (MAXIMUM SPEED)
        digitalWrite ( MdirectionA,LOW); // MOTOR A DIRECTION ROTATION, HIGH (FORWARD) , LOW (BACKWARD)
        delay (1000);      
    
        // TURN RIGHT
        
    //MOTOR B
        analogWrite (velocityB, 150);   // MOTOR B SPEED, FROM 0 (STOP) TO 255 (MAXIMUM SPEED)
        digitalWrite ( MdirectionB,LOW); // MOTOR B ROTATION, LOW (FORWARD), HIGH (BACKWARD)
    
        //MOTOR A
        analogWrite (velocityA, 0);   // MOTOR A SPEED, FROM 0 (STOP) TO 255 (MAXIMUM SPEED)
        digitalWrite ( MdirectionA,HIGH); // MOTOR A DIRECTION ROTATION, HIGH (FORWARD) , LOW (BACKWARD)
        delay (1000);       
      }
      else if ( distance > 25) // IF DISTANCE IS HIGHER THAN 25 cm
      {
        //FORWARD
        //MOTOR B
        analogWrite (velocityB, 150);   // MOTOR B SPEED, FROM 0 (STOP) TO 255 (MAXIMUM SPEED)
        digitalWrite ( MdirectionB,LOW); // MOTOR B ROTATION, LOW (FORWARD), HIGH (BACKWARD)
    
        //MOTOR A
        analogWrite (velocityA, 150);   // MOTOR A SPEED, FROM 0 (STOP) TO 255 (MAXIMUM SPEED)
        digitalWrite ( MdirectionA,HIGH); // MOTOR A DIRECTION ROTATION, HIGH (FORWARD) , LOW (BACKWARD)
    
      }
      // ACTIVATE THE LIGHTS AND THE EMERGENCY SOUND
    
     Emergency();
    
    }
    void Emergency ()
    {
        digitalWrite(LEDG, HIGH);// GREEN LIGHT ON
        digitalWrite(LEDB, LOW);// BLUE LIGHT OFF
        tone(8, 494, 500);// BUZZER
        delay(400); // 400ms PAUSE
        digitalWrite(LEDG, LOW);// GREEN LIGHT OFF
        digitalWrite(LEDB, HIGH);// BLUE LIGHT ON
        tone(8, 440, 500);// BUZZER
        delay(400);// 400ms PAUSE
    }
    

Kodas vaizdinio programavimo programinei ?rangai naudojan?iai blokus

  1. Parsisi?skite  ir ?diekite program?.
  2. Paleiskite programin? ?rang? ir nukopijuokite toliau pateikt? kod?. Naudokite š? paveiksl?l? kaip vadov?:
  3. Sukonfig?ruokite ir ?kelkite kod? vadovaudamiesi instrukcijomis pateiktomis Code & Drive“ roboto mašinos pirm?j? veiksm? vadove
  4. Kad kod? ?keltum?te teisingai, ?sitikinkite, kad „Build & Code 4in1“ plokšt?s BTL/USB jungiklis yra teisingai nustatytas ? USB pad?t?.

„Bitbloq“ kodas

  1. Parsisi?skite „Bitbloq“ ir ?diekite „Web2board“ program?l?.
  2. Paleiskite programin? ?rang? ir nukopijuokite toliau pateikt? kod?:
    • Aparatin? ?ranga

    • Programin? ?ranga

  3. Sukonfig?ruokite ir ?kelkite kod? vadovaudamiesi instrukcijomis pateiktomis Code & Drive“ roboto mašinos pirm?j? veiksm? vadove
  4. Kad kod? ?keltum?te teisingai, ?sitikinkite, kad „Build & Code 4in1“ plokšt?s BTL/USB jungiklis yra teisingai nustatytas ? USB pad?t?.

PRATIMO REZULTATAS:

„Code & Drive“ robotas mašina jud?s ? priek?, jo šviesos diodai ir signalizatorius bus ?jungti ir jis imituos avarini? tarnyb? automobilio pavojaus signal?. Ultragarsiniam jutikliui aptikus objekt?, esant? už mažiau nei 25 cm, „Code & Drive“ robotas mašina ims jud?ti atgal, pasisuks ir jud?s ? priek? kita kryptimi.

Galite sujungti šio projekto kod? su projekt? Nr. 4 („Kli??i? išvengimas“) ir Nr. 5 („Linijos sekiklis“) kodais.

J?s galite individualizuoti „Code & Drive“ robot? mašin? naudodami autobusiuko važiuokl?s šablon?. Naudokite š? šablon?, kad gal?tum?te sukurti savo apipavidalinim? ir paverskite „Code & Drive“ robot? mašin? greitosios pagalbos automobiliu, policijos automobiliu ar priešgaisriniu automobiliu.