, , , ,

Robô MINI TANK Keyestudio

REF: KS0071


O Mini Tank é um kit robô indicado para todos aqueles que querem começar a desenvolver capacidades de robótica e programação com a plataforma Arduino, de forma muito criativa e divertida. Este robô é capaz de contornar obstáculos através de um sensor ultrassónico, pode ser controlado remotamente por Bluetooth, entre muitas outras funções.

119,38 IVA INCL.

Download PDF

Robot MINI TANK Keyestudio

Características do motor: 6V, 150rpm/min
Para o controlo do motor, utilizar a placa L298N
Equipado com um módulo ultrasónico, capaz de detectar os obstáculos e a distância entre eles.
Contém placa de Bluetooth, capaz de ser controlada remotamente através do telefone.

Outras características: Motor: 6V, 150RPM; O controlador do motor adota o módulo do driver 1298; Equipado com módulo ultra-sónico, pode detectar se há um obstáculo na frente e a distância entre ele e o obstáculo; Módulo sem fio Bluetooth, pode controlar o robô que foi emparelhado com o telemóvel através do Bluetooth; Suporta a conexão de fonte de alimentação externa de 7 ~ 12V, todos os tipos de módulos de sensores, para alcançar diferentes funções.

REF: KS0071 Categorias: , , , , Etiquetas: ,
Marca

Download PDF
/*   
    L = Left 
    R = Right 
    F = forward 
    B = backward
*/
#include <Servo.h> 
int pinLB = 12;     // define pin 12 
int pinLF = 3;     // define pin 3 
int pinRB = 13;    // define pin 13 
int pinRF = 11;    // define pin 11 
int inputPin = 4;    // define pin for sensor echo
int outputPin =5;    // define pin for sensor trig
int Fspeedd = 0;      // forward speed
int Rspeedd = 0;      // right speed
int Lspeedd = 0;      // left speed
int directionn = 0;   // forward=8 backward=2 left=4 right=6 
Servo myservo;        // set myservo
int delay_time = 250; // settling time after steering servo motor moving B
int Fgo = 8;         // Move F
int Rgo = 6;         // move to the R
int Lgo = 4;         // move to the L
int Bgo = 2;         // move B
void setup()
 {
  Serial.begin(9600);     // Define motor output pin 
  pinMode(pinLB,OUTPUT); // pin 12
  pinMode(pinLF,OUTPUT); // pin 3 (PWM)
  pinMode(pinRB,OUTPUT); // pin 13
  pinMode(pinRF,OUTPUT); // pin 11 (PWM) 
  pinMode(inputPin, INPUT);    // define input pin for sensor
  pinMode(outputPin, OUTPUT);  // define output pin for sensor   
  myservo.attach(9);    // Define servo motor output pin to D9 (PWM)
 }
void advance()     // move forward
    { 
    digitalWrite(pinLB,LOW);    // right wheel moves forward
digitalWrite(pinRB, LOW);  // left wheel moves forward
    analogWrite(pinLF,255);   
    analogWrite(pinRF,255);
    }
void stopp()         // stop 
    {
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinRB,HIGH);
     analogWrite(pinLF,0);
     analogWrite(pinRF,0); 
    }
void right()        // turn right (single wheel)
    {
   digitalWrite(pinLB,HIGH);  // wheel on the left moves forward
   digitalWrite(pinRB,LOW); // wheel on the right moves backward
   analogWrite(pinLF, 255);
   analogWrite(pinRF,255);   
    }
void left()         // turn left (single wheel)
    {
   digitalWrite(pinLB,LOW);  // wheel on the left moves backward
   digitalWrite(pinRB,HIGH); // wheel on the right moves forward
   analogWrite(pinLF, 255);
   analogWrite(pinRF,255);  
    }
  
void back()          // move backward
    {
     digitalWrite(pinLB,HIGH);  // motor moves to left rear
     digitalWrite(pinRB,HIGH);  // motor moves to right rear
     analogWrite(pinLF,255);  
     analogWrite(pinRF,255);     
    }
void detection()        // measure 3 angles (0.90.179)
    {      
      int delay_time = 250;   // stabilizing time for servo motor after moving backward
      ask_pin_F();            // read the distance ahead
     if(Fspeedd < 10)         // if distance ahead is <10cm
      {
      stopp();               // clear data 
      delay(100);
      back();                // move backward for 0.2S
      delay(200);
      }
      if(Fspeedd < 25)         // if distance ahead is <25cm
      {
        stopp();  
        delay(100);             // clear data 
        ask_pin_L();            // read distance on the left
        delay(delay_time);      // stabilizing time for servo motor
        ask_pin_R();            // read distance on the right  
        delay(delay_time);      // stabilizing time for servo motor  
        
        if(Lspeedd > Rspeedd)   // if distance on the left is >distance on the right
        {
          directionn = Lgo;      // move to the L
        }
         if(Lspeedd <= Rspeedd)   // if distance on the left is <= distance on the right
        {
         directionn = Rgo;      // move to the right
        } 
        if (Lspeedd < 10 && Rspeedd < 10)   // if distance on left and right are both <10cm
        {
         directionn = Bgo;      // move backward        
        } }
      else                      // if distance ahead is >25cm     
      {
        directionn = Fgo;        // move forward      
      }}    
void ask_pin_F()   // measure the distance ahead 
    {
      myservo.write(90);
      digitalWrite(outputPin, LOW);   // ultrasonic sensor transmit low level signal 2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // ultrasonic sensor transmit high level signal10μs, at least 10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // keep transmitting low level signal
      float Fdistance = pulseIn(inputPin, HIGH);  // read the time in between
      Fdistance= Fdistance/5.8/10;       // convert time into distance (unit: cm) 
      Fspeedd = Fdistance;              // read the distance into Fspeedd
  Serial.print("Fspeedd = ");
  Serial.print(Fspeedd );
  Serial.println("  cm");   
    }  
 void ask_pin_L()   // measure distance on the left 
    {
      myservo.write(5);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   // ultrasonic sensor transmit low level signal 2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // ultrasonic sensor transmit high level signal10μs, at least 10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // keep transmitting low level signal
      float Ldistance = pulseIn(inputPin, HIGH);  // read the time in between
      Ldistance= Ldistance/5.8/10;       // convert time into distance (unit: cm)
      Lspeedd = Ldistance;              // read the distance into Lspeedd
  Serial.print("Lspeedd = ");
  Serial.print(Lspeedd );
      Serial.print("  cm  ");
    }  
void ask_pin_R()   //  measure distance on the right 
    {
      myservo.write(177);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   // ultrasonic sensor transmit low level signal 2μs
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  // ultrasonic sensor transmit high level signal10μs, at least 10μs
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);    // keep transmitting low level signal
      float Rdistance = pulseIn(inputPin, HIGH);  // read the time in between
      Rdistance= Rdistance/5.8/10;       // convert time into distance (unit: cm)
      Rspeedd = Rdistance;              // read the distance into Rspeedd
  Serial.print(" Rspeedd = ");
  Serial.print(Rspeedd );
      Serial.println("  cm");
    }  
void loop()
  {
    myservo.write(90);  // home set the servo motor, ready for next measurement
    detection();        // measure the angle and determine which direction to move   
   if(directionn == 2)  // if directionn= 2             
   {
     back(); 
     delay(800);                    //  go backward
     left() ;      
     delay(200);              // Move slightly to the left (to prevent stuck in dead end)
   }
   if(directionn == 6)           // if directionn = 6    
   { back();
     delay(100);  
     right();  
     delay(600);                 // turn right
   }
   if(directionn == 4)          // if directionn = 4    
   { back(); 
     delay(600);      
     left(); 
     delay(600);                  // turn left
   }  
   if(directionn == 8)          // if directionn = 8      
   { advance();       // move forward  
    delay(100);  
   }}

Vídeo

Download PDF

Baseada em 0 avaliações

0.0 pontuação
0
0
0
0
0

Seja o primeiro a avaliar “Robô MINI TANK Keyestudio”

Não há comentários ainda.

Também pode gostar…

VALE DE 5€
Subscreva a nossa NEWSLETTER receba um vale de 5€ para a sua primeira compra.
SIGA-NOS NAS REDES SOCIAIS
SUBSCREVER
Concordo com os termos e condições