Robô Interativo!
This Robot Is a Friend. It's can Talk, Sing, Move, Or Anything Else you can imagine!
Components and supplies
1
Arduino UNO
1
Solderless Breadboard Full Size
1
Pushbutton Switch, Momentary
2
Buzzer, Piezo
Tools and machines
1
Soldering iron (generic)
Apps and platforms
1
Arduino IDE
Project description
Code
Code
csharp
Copy And Paste This Code:
1 2/* 3------------------------------------------Robô Autonomo SR 1------------------------------------------------ 4Versão do Software: 1.0 SR 1 //não apague essa linha, para futuras consultas 5Software open source, favor citar o autor: Seu Robô https://SeuRobo.com.br/ 6*/ 7 // inclusão de bibliotecas. 8 #include <Servo.h> // inclui biblioteca de manipulação de servos motores. 9 #include <AFMotor.h> // inclui biblioteca de manipulação de motores DCs. 10 11 //Definindo os pinos 12 #define trigPin A0 //Pino TRIG do sensor no pino analógico A0 13 #define echoPin A1 //Pino ECHO do sensor no pino analógico A1 14 #define BUZZER A2 // Define o pino do buzzer (Som) no pino ANALÓGICO A0 15 AF_DCMotor motor1(1); // Define o motor1 ligado ao M1 16 AF_DCMotor motor2(2); // Define o motor2 ligado ao M2 17 18 int TempoGirar = 1;//esse é o tempo para o robô girar em 45º com uma bateria de 9v. 19 int distanciaObstaculo = 30; //distância para o robô parar e recalcular o melhor caminho 20 int velocidadeMotores = 80; // velocidade que os motores funcionarão na bateria 9v. Para a bateria 9v a velocidade 80 é ideal 21 Servo servo_ultra_sonico; // nomeando o servo motor 22 //variáveis para o sensor ultrassonico 23 long duracao; 24 long distancia_cm=0; 25 int minimumRange=5; //tempo de resposta do sensor 26 int maximumRange=200; 27 28 // executado na inicialização do Arduino 29 void setup(){ 30 Serial.begin(9600); // inicializa a comunicação serial para mostrar dados 31 servo_ultra_sonico.attach(10); // Define o mini servo motor ligado no pino digital 10. 32 pinMode(trigPin, OUTPUT); //define o pino TRIG como saída 33 pinMode(echoPin, INPUT); //define o pino ECHO como entrada 34 pinMode(BUZZER,OUTPUT); // Define o pino do buzzer como saída 35 motor1.setSpeed(velocidadeMotores); // Define a velocidade para os motores. A velocidade máxima é 255. 36 motor2.setSpeed(velocidadeMotores); //Usamos uma bateria de 9v 450mAh, com ela a velocidade ficou boa. Mas dependendo da bateria utilizada a velocidade deverá ser utilizada. Não use pilhas, pois são fracas 37 servo_ultra_sonico.write(90); // O servo do sensor se inicia a 90 graus (meio) 38 rotacao_Parado; //inica com os motores parados 39 } 40 41 // Função principal do Arduino 42 void loop(){ 43 pensar(); //inicia a função pensar 44 //Seu Robô http://SeuRobo.com.br/ 45 } 46 47 // Função para chamar outras funções e definir o que o robô fará 48 void pensar(){ 49 reposicionaServoSonar(); //Coloca o servo para olhar a frente 50 int distancia = lerSonar(); // Ler o sensor de distância 51 Serial.print("distancia em cm: "); 52 Serial.println(distancia); // Exibe no serial monitor 53 if (distancia > distanciaObstaculo) { // Se a distância for maior que 20 cm 54 rotacao_Frente(); //robô anda para frente 55 }else{ 56 rotacao_Parado(); //para o robô 57 posicionaCarroMelhorCaminho(); //calcula o melhor caminho 58 pensar(); 59 } 60 } 61 62 // Função para ler e calcular a distância do sensor ultrassônico 63 int lerSonar(){ 64 digitalWrite(trigPin, LOW); //não envia som 65 delayMicroseconds(2); 66 digitalWrite(trigPin,HIGH); //envia som 67 delayMicroseconds(10); 68 digitalWrite(trigPin,LOW); //não envia o som e espera o retorno do som enviado 69 duracao = pulseIn(echoPin,HIGH); //Captura a duração em tempo do retorno do som. 70 distancia_cm = duracao/56; //Calcula a distância 71 delay(30); 72 return distancia_cm; // Retorna a distância 73 } 74 75 // Função para calcular a distância do centro 76 int calcularDistanciaCentro(){ 77 servo_ultra_sonico.write(90); 78 delay(20); 79 int leituraDoSonar = lerSonar(); // Ler sensor de distância 80 delay(500); 81 leituraDoSonar = lerSonar(); 82 delay(500); 83 Serial.print("Distancia do Centro: "); // Exibe no serial 84 Serial.println(leituraDoSonar); 85 return leituraDoSonar; // Retorna a distância 86 } 87 88 // Função para calcular a distância da direita 89 int calcularDistanciaDireita(){ 90 servo_ultra_sonico.write(0); 91 delay(200); 92 int leituraDoSonar = lerSonar(); 93 delay(500); 94 leituraDoSonar = lerSonar(); 95 delay(500); 96 Serial.print("Distancia da Direita: "); 97 Serial.println(leituraDoSonar); 98 return leituraDoSonar; 99 } 100 101 // Função para calcular a distância da esquerda 102 int calcularDistanciaEsquerda(){ 103 servo_ultra_sonico.write(180); 104 delay(200); 105 int leituraDoSonar = lerSonar(); 106 delay(500); 107 leituraDoSonar = lerSonar(); 108 delay(500); 109 Serial.print("Distancia Esquerda: "); 110 Serial.println(leituraDoSonar); 111 return leituraDoSonar; 112 } 113 114 // Função para captar as distâncias lidas e calcular a melhor distância. Acesse: Seu Robô https://SeuRobo.com.br/ 115 char calculaMelhorDistancia(){ 116 int esquerda = calcularDistanciaEsquerda(); 117 int centro = calcularDistanciaCentro(); 118 int direita = calcularDistanciaDireita(); 119 reposicionaServoSonar(); 120 int maiorDistancia = 0; 121 char melhorDistancia = '0'; 122 123 if (centro > direita && centro > esquerda){ 124 melhorDistancia = 'c'; 125 maiorDistancia = centro; 126 }else 127 if (direita > centro && direita > esquerda){ 128 melhorDistancia = 'd'; 129 maiorDistancia = direita; 130 }else 131 if (esquerda > centro && esquerda > direita){ 132 melhorDistancia = 'e'; 133 maiorDistancia = esquerda; 134 } 135 if (maiorDistancia <= distanciaObstaculo) { //distância limite para parar o robô 136 rotacao_Re(); 137 posicionaCarroMelhorCaminho(); 138 } 139 reposicionaServoSonar(); 140 return melhorDistancia; 141 } 142 143 // Função para colocar o carrinho na melhor distância, isto é, girá-lo para a melhor distância 144 void posicionaCarroMelhorCaminho(){ 145 char melhorDist = calculaMelhorDistancia(); 146 Serial.print("melhor Distancia em cm: "); 147 Serial.println(melhorDist); 148 if (melhorDist == 'c'){ 149 pensar(); 150 }else if (melhorDist == 'd'){ 151 rotacao_Direita(); 152 }else if (melhorDist == 'e'){ 153 rotacao_Esquerda(); 154 }else{ 155 rotacao_Re(); 156 } 157 reposicionaServoSonar(); 158 } 159 160 // Função para deixar o sensor "olho" do robô no centro 161 void reposicionaServoSonar(){ 162 servo_ultra_sonico.write(90); 163 delay(200); 164 } 165 166 // Função para fazer o carro parar 167 void rotacao_Parado() 168 { 169 Serial.println(" Motor: Parar "); 170 motor1.run(RELEASE); // Motor para 171 motor2.run(RELEASE); 172 } 173 174 // Função para fazer o robô andar para frente 175 void rotacao_Frente() 176 { 177 Serial.println("Motor: Frente "); 178 motor1.run(FORWARD); // Roda vai para frente 179 motor2.run(FORWARD); 180 delay(50); 181 } 182 183 // Função que faz o robô andar para trás e emite som quando ele dá ré 184 void rotacao_Re() 185 { 186 Serial.println("Motor: ré "); 187 for (int i=0; i <= 3; i++){ 188 digitalWrite(BUZZER, HIGH); // Liga o som 189 delay(100); 190 motor1.run(BACKWARD); // Roda vai para trás 191 motor2.run(BACKWARD); // Roda vai para trás 192 delay(100); 193 digitalWrite(BUZZER, LOW); // Desliga o som 194 delay(100); 195 } 196 rotacao_Parado(); 197 } 198 199 // Função que faz o robô virar à direita, https://SeuRobo.com.br/ 200 void rotacao_Direita() 201 { 202 digitalWrite(BUZZER, HIGH); // Liga o som 203 delay(100); 204 motor1.run(BACKWARD); //o robô dá uma ré para não colidir ao girar 205 motor2.run(BACKWARD); 206 delay(50); 207 digitalWrite(BUZZER, LOW); // Desliga o som 208 delay(100); 209 Serial.println(" Para a direita "); 210 motor1.run(FORWARD); // Roda vai para frente 211 motor2.run(BACKWARD); // Roda vai para trás 212 delay(TempoGirar); 213 } 214 215 // Função que faz o robô virar à esquerda 216 void rotacao_Esquerda() 217 { 218 digitalWrite(BUZZER, HIGH); // Liga o som 219 delay(100); 220 motor1.run(BACKWARD); // // O robô dá uma ré para não colidir ao girar 221 motor2.run(BACKWARD); 222 delay(50); 223 digitalWrite(BUZZER, LOW); // Desliga o som 224 delay(100); 225 Serial.println(" Para a esquerda "); 226 motor1.run(BACKWARD); // Roda vai para trás 227 motor2.run(FORWARD); // Roda vai para frente 228 delay(TempoGirar); 229 } 230 //Fim 231 //Versão do Software: 1.0 SR 1 //não apague essa linha, para futuras consultas 232 233
Downloadable files
Schematics and circuit diagrams
There is How you need to Build
Schematics and circuit diagrams

Schematics and circuit diagrams
There is How you need to Build
Schematics and circuit diagrams

Documentation
Other Pieces
This is Optional - You can Code Using A Smartphone.
Other Pieces

Other Pieces
This is Optional - You can Code Using A Smartphone.
Other Pieces

Comments
Only logged in users can leave comments