Índice:

Carro sem fio controlado por gestos: 7 etapas
Carro sem fio controlado por gestos: 7 etapas

Vídeo: Carro sem fio controlado por gestos: 7 etapas

Vídeo: Carro sem fio controlado por gestos: 7 etapas
Vídeo: BRINQUEDO DE ADULTO. OLHA O QUE ESSE CARRO FAZ! É mais que um carro controle remoto! 2024, Novembro
Anonim
Carro sem fio controlado por gestos
Carro sem fio controlado por gestos

Neste tutorial vamos aprender como fazer um carro controlado por gestos ou qualquer robô. Este projeto tem duas partes, uma parte é a unidade transmissora e a outra parte é a unidade receptora. A unidade transmissora é, na verdade, montada em luvas de mão e a unidade receptora é colocada dentro de um carro ou qualquer robô. Agora é hora de fazer um bom carro. Vamos lá!

Etapa 1: Equipamentos

Unidade Transmissora

1. Arduino Nano.

2. Módulo do sensor MPU6050.

3. Transmissor RF 433 MHz.

4. Qualquer tipo de bateria de 3 células, 11,1 volts (aqui usei célula tipo moeda).

5. Vero-Board.

6. Luvas de mão.

Unidade Receptora

1. Arduino Nano ou Arduino Uno.

2. Módulo do driver do motor L298N.

3. Estrutura do robô de 4 rodas incluindo motores.

4. Receptor RF 433 RF.

5. Bateria Li-po de 3 células, 11,1 volts.

6. Vero-board.

Outros

1. Varas de cola e pistola.

2. Fios de ligação em ponte.

3. Chaves de fenda

4. Kit de solda.

etc.

Etapa 2: Arquivo de imagem do diagrama de circuito

Arquivo de imagem do diagrama de circuito
Arquivo de imagem do diagrama de circuito

Etapa 3: Arquivo Fritzing do Diagrama de Circuito

Etapa 4: Código do transmissor

#incluir

#incluir

#incluir

MPU6050 mpu6050 (fio);

temporizador longo = 0;

char * controlador;

void setup ()

{Serial.begin (9600); Wire.begin (); mpu6050.begin (); mpu6050.calcGyroOffsets (true); vw_set_ptt_inverted (verdadeiro); // vw_set_tx_pin (10); vw_setup (4000); // velocidade de transferência de dados Kbps

}

void loop ()

{ ////////////////////////////////////////////////////////////////////////////////////////////////

mpu6050.update ();

if (milis () - cronômetro> 1000)

{Serial.println ("================================================ =========== "); Serial.print ("temp:"); Serial.println (mpu6050.getTemp ()); Serial.print ("accX:"); Serial.print (mpu6050.getAccX ()); Serial.print ("\ taccY:"); Serial.print (mpu6050.getAccY ()); Serial.print ("\ taccZ:"); Serial.println (mpu6050.getAccZ ()); Serial.print ("giroX:"); Serial.print (mpu6050.getGyroX ()); Serial.print ("\ tgyroY:"); Serial.print (mpu6050.getGyroY ()); Serial.print ("\ tgyroZ:"); Serial.println (mpu6050.getGyroZ ()); Serial.print ("accAngleX:"); Serial.print (mpu6050.getAccAngleX ()); Serial.print ("\ taccAngleY:"); Serial.println (mpu6050.getAccAngleY ()); Serial.print ("gyroAngleX:"); Serial.print (mpu6050.getGyroAngleX ()); Serial.print ("\ tgyroAngleY:"); Serial.print (mpu6050.getGyroAngleY ()); Serial.print ("\ tgyroAngleZ:"); Serial.println (mpu6050.getGyroAngleZ ()); Serial.print ("angleX:"); Serial.print (mpu6050.getAngleX ()); Serial.print ("\ tangleY:"); Serial.print (mpu6050.getAngleY ()); Serial.print ("\ tangleZ:"); Serial.println (mpu6050.getAngleZ ()); Serial.println ("=================================================== ========== / n "); temporizador = milis (); }

/////////////////////////////////////////////////////////////////////////////////////

if (mpu6050.getAccAngleX () 30) {controlador = "X2"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espere até que toda a mensagem desapareça Serial.println ("FORWARD"); } else if (mpu6050.getAccAngleY ()> 40) {controlador = "Y1"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espere até que toda a mensagem desapareça Serial.println ("LEFT"); } else if (mpu6050.getAccAngleY () <- 40) {controlador = "Y2"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espere até que toda a mensagem desapareça Serial.println ("RIGHT"); } else if (mpu6050.getAccAngleX () - 10 && mpu6050.getAccAngleY () - 10) {controlador = "A1"; vw_send ((uint8_t *) controlador, strlen (controlador)); vw_wait_tx (); // Espere até que toda a mensagem desapareça Serial.println ("STOP"); }}

Etapa 5: Código do receptor

#incluir

int LA = 3;

int LB = 11; int RA = 5; int RB = 6; void setup () {Serial.begin (9600); vw_set_ptt_inverted (verdadeiro); // Requerido para DR3100 vw_set_rx_pin (12); vw_setup (4000); // Bits por segundo pinMode (13, OUTPUT); pinMode (LA, OUTPUT); pinMode (LB, OUTPUT); pinMode (RA, OUTPUT); pinMode (RB, OUTPUT); vw_rx_start (); // Iniciar o receptor PLL executando Serial.println ("All OK");

}

void loop () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN;

if (vw_get_message (buf, & buflen)) // Sem bloqueio

{if ((buf [0] == 'X') && (buf [1] == '1')) {Serial.println ("BACKWARD"); para trás(); atraso (100); //desligado(); } else if ((buf [0] == 'X') && (buf [1] == '2')) {Serial.println ("FORWARD"); frente(); atraso (100); //desligado(); }

else if ((buf [0] == 'Y') && (buf [1] == '1'))

{Serial.println ("LEFT"); deixou(); atraso (100); //desligado(); }

else if ((buf [0] == 'Y') && (buf [1] == '2'))

{Serial.println ("DIREITO"); direito(); atraso (100); //desligado(); } else if ((buf [0] == 'A') && (buf [1] == '1')) {Serial.println ("STOP"); desligado(); atraso (100); }} else {Serial.println ("Nenhum sinal recebido"); }}

void forward ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 70); analogWrite (RB, 0); }

void backward ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 0); analogWrite (RB, 70); }

void left ()

{analogWrite (LA, 0); analogWrite (LB, 70); analogWrite (RA, 70); analogWrite (RB, 0); }

void right ()

{analogWrite (LA, 70); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 70); }

void off ()

{analogWrite (LA, 0); analogWrite (LB, 0); analogWrite (RA, 0); analogWrite (RB, 0); }

Etapa 6: Arquivos INO

Etapa 7: Link de bibliotecas

Virtual Wire Library:

MPU6050_tockn Libraby:

Wire Library:

Recomendado: