Baixe o app para aproveitar ainda mais
Prévia do material em texto
Carro controlado por Bluetooth Material Utilizado: • Módulo Bluetooth - HC-06 (ou HC-05) • Conversor de nível lógico RC • Ponte H L298N • Motor DC (no meu caso kit acompanha com chassi) • Mini Breadboard 1. Conexões Ou sem conversor: 2. Depois de tudo conectado faça a configuração do Módulo Bluetooth - HC-06 Agora faça o upload do código abaixo no Arduino: //Include the SoftwareSerial library #include "SoftwareSerial.h" //Create a new software serial SoftwareSerial bluetooth(2, 3); //TX, RX (Bluetooth) void setup() { //Initialize the hardware serial Serial.begin(9600); Serial.println(F("Type the AT commands:")); //Initialize the software serial bluetooth.begin(9600); } void loop() { //Check received a byte from hardware serial if (Serial.available()) { char r = Serial.read(); //Read and save the byte bluetooth.print(r); //Send the byte to bluetooth by software serial Serial.print(r); //Echo } //Check received a byte from bluetooth by software serial if (bluetooth.available()) { char r = bluetooth.read(); //Read and save the byte Serial.print(r); //Print the byte to hardware serial } } O que esse código faz basicamente é enviar para o Módulo Bluetooth tudo o que é recebido pela Serial e enviar para a Serial conectada ao computador tudo que é recebido do Módulo Bluetooth. Deste modo, o Arduino atua apenas como uma ponte de comunicação entre o Módulo Bluetooth e o computador. Após fazer o upload, se tudo estiver correto, você deve observar o led do módulo piscando rapidamente. Agora abra seu Monitor Serial, selecione "Both NL & CR" e "9600 baud" conforme a imagem abaixo: Precisamos informar para o módulo que queremos enviar comandos AT, para isso pressione o botão no canto inferior direito do módulo (próximo a barra de pinos). Esse botão serve para, entre outras coisas, informar ao módulo que queremos entrar no modo de comandos AT. Pronto: agora já podemos enviar nosso primeiro comando AT! Digite AT no seu monitor serial e envie o comando. O Módulo deve responder com "OK" indicando que ele está recebendo os comandos. Digite AT+STATE? e ele deve responder com "+STATE:PAIRABLE" seguido de um "OK" conforme a imagem abaixo: Caso o módulo não responda, tente apertar o botão novamente. Se ainda assim não funcionar, pode ser que o módulo já tenha sido configurado e que o baud rate não seja mais 9600. Se for o caso, tente alterar o baud rate no código na linha "bluetooth.begin(9600);". Tente alterar por 38400 que é um valor padrão quando o módulo é resetado para as configurações de fábrica. Faça o upload do código e tente novamente. Agora vamos digitar os seguintes comandos em sequência: • AT+NAME=BlackBoard-01 - Altera o nome para do módulo para "BlackBoard-01"; • AT+PSWD=321rc - Altera a senha para "321rc" • AT+UART=38400,0,0 - Altera o Baud para 38400, 1 stop bit e nenhum bit de paridade. • AT+RESET - Reseta o Módulo e aplica as alterações feitas. Ao final você deve ver algo parecido com essa imagem: Se você tentar enviar um comando para o módulo, perceberá que ele não responderá. Isso se deve ao fato de termos alterado o baud rate da comunicação, que antes era 9600 e agora é de 38400. Para se comunicar com o módulo e fazer mais configurações você deve agora modificar no código "bluetooth.begin(9600);" o baud rate com o qual o Arduino se comunica com ele de 9600 para 38400. (retirado de robecore.net) 3. Tudo funcionou? Ok! Agora é fazer upload do código abaixo: //Include the SoftwareSerial library #include "SoftwareSerial.h" //Create a new software serial SoftwareSerial bluetooth(2, 3); //TX, RX (Bluetooth) //Motor Esquerda int IN1 = 4; int IN2 = 5; int ENA = 9; int IN3 = 6; int IN4 = 7; int ENB = 10; //Velocidade do Motor int velocidade = 180; //Este valor pode variar de 0-255, como a fonte de alimentação é de 11,2V //e a tensão max do motor 7,2V é necessario limitar a saída de tensão! float vel = 0; float a = vel / 3; char letra; //Cria uma variável char para armazenamento dos caraceteres lidos void setup() { pinMode(IN1, OUTPUT); //inicializa os pinos de controle como saída pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); analogWrite(ENA, LOW); //desativa os motor, para o carrinho nao sair anadando durante inicialização analogWrite(ENB, LOW); blueToothSerial.begin(9600); //Inicia a Serial com um Baud Rate de 9600bps } void loop() { if (blueToothSerial.available() > 0) //Se algo for recebido na serial faz: { controle_velocidade();//chama função controle Velocidade float a = vel / 3; //variavel que reduz velocidade de um dos motores na curva controle_direcao(); //chama função controle Direção delay(250); //Delay de 250 milissegundos letra = 0;//Limpa a variável letra } } void controle_velocidade(){ letra = blueToothSerial.read(); //Armazena o que foi recebido na variável letra if (letra == '1') { vel = velocidade * 0.10; } else if (letra == '2') { vel = velocidade * 0.20; //cuidar para multiplicação retorne valor inteiro!!! } else if (letra == '3') { vel = velocidade * 0.30; } else if (letra == '4') { vel = velocidade * 0.40; } else if (letra == '5') { vel = velocidade * 0.50; } else if (letra == '6') { vel = velocidade * 0.60; } else if (letra == '7') { vel = velocidade * 0.70; } else if (letra == '8') { vel = velocidade * 0.80; } else if (letra == '9') { vel = velocidade * 0.90; } } void controle_direcao() { //CONTROLE DE DIREÇÃO switch (letra) //Entra no switch para a comparação do caractere recebido { case 'F'://FRENTE //Caso o caracter for igual a F, vai pra FRENTE analogWrite(ENA, vel); analogWrite(ENB, vel); digitalWrite(IN1, HIGH);//anda para frente digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; //Sai do switch case 'G'://Curva Esquerda para frente analogWrite(ENB, a); //metade velocidade motor esquerdo analogWrite(ENA, vel); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; //Sai do switch case 'I'://Curva Direita para frente analogWrite(ENA, a); //metade velocidade motor direito analogWrite(ENB, vel); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; //Sai do switch case 'B'://TRÁS //Caso o caracter for igual a B, vai pra TRAS analogWrite(ENA, vel); analogWrite(ENB, vel); digitalWrite(IN1, LOW); //para Tras digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; //Sai do switch case 'H'://Curva Esquerda para traz analogWrite(ENB, a); //metade velocidade motor esquerdo analogWrite(ENA, vel); digitalWrite(IN1, LOW); //para Tras digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; //Sai do switch case 'J'://Curva Direitapara traz analogWrite(ENB, vel); analogWrite(ENA, a);//metade velocidade motor direito digitalWrite(IN1, LOW); //para Tras digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; //Sai do switch case 'L'://Gira Esquerda analogWrite(ENA, vel); analogWrite(ENB, vel); digitalWrite(IN1, LOW);//Gira p/ Esquerda digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; //Sai do switch case 'R'://Gira Direita analogWrite(ENA, vel); analogWrite(ENB, vel); digitalWrite(IN1, HIGH);//Gira p/ Direita digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; //Sai do switch case 'S'://Parado digitalWrite(IN1, LOW);//Parado digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; //Sai do switch } } 4. Baixar o aplicativo no celular. Utilizado foi:
Compartilhar