#include <SoftwareSerial.h>// ultrassom
#include <URMSerial.h>//ultrasom
#include <LiquidCrystal.h>// lcd
#include <Servo.h>// servo
Servo myservo;// nome do servo motor
#define PWMA 3 //controla a velocidade
#define A1N1 4
#define A1N2 5 // Modo de operação
#define MOTOR_A 1// define valor do motor direito como 1
#define PWMB 6// controle de velocidade
#define BIM1 7//modo de operação
#define BIM2 8//modo de operação
#define MOTOR_B 2 //dfine motor da direita com valor 1
byte letra;
LiquidCrystal lcd(12, 11, A5, A4, A3, A2);// tela
URMSerial urm// ultrasom
// declarar variaveis
{
int DistanciaEsquerda = 0;
int DistanciaDireita = 0;
int value;
int getMasurement()
{
//solicitar uma leitura a distância do URM 37
switch (urm.request measurementortime(distancia, value) // pedido
{
case DISTANCE;
return value;
break;
case TEMPERATURE;
return value;
break;
case ERROR;
Serial.printin("ERROR");
break;
case NOTTREADY;
Serial.printin("not rady");
break;
case TIMEOUT;
Serial.printin("Timeout");
break;
}
return -1;
}
void loop()
{// motor vcc
pinMode( PWM A, OUTPUT);
pinMode( A1N1, OUTPUT);
pinMode( A1N2, OUTPUT);
pinMode( PWM B, OUTPUT);
pinMode( BIM 1, OUTPUT);
pinMode( BIM 2, OUTPUT);
pinMode( 13, OUTPUT);
Serial.begin( 9600);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(A4,OUTPUT);
pinMode(A5,OUTPUT);
LCD.begin(16,20;
LCD.print( "Mundo SENAI 2014"); //Tela LCD
delay(1000);
LCD.clear();
myservo. attach (9);
Serial.begin (9600); //ultrassom define a taxa de transmissão para 9600 urm.begin (2,10,9600)
Serial.printin;
}
void loop ()
{
myservo.write(90);// servo vai para posição da variavel "pos"
delay(15);
LCD.clear;
LCD.begin ( 16,2);
LCD.print( getmeasurrement());//mostra a distancia no LCD
LCD.print("cm");
delay(1000);
int Distancia=getMeasurrement();// armazena a distancia na varialvel "Distancia"
if (Distancia<=10)
{
move ( MOTOR_A 0,2);//motor A
move (MOTOR_B 0,2);// motor B
myservo.write(180); //servo olha para esquerda
delay(1000);
DistanciaEsquerda=getMasurement();//armazena o valor da distancia na variavel DistanciaEsquerda
LCd.clear();
LCD.set cursor (1,2);
LCD.clear();
LCD.print("esquerda:");
LCD.print(DistanciaEsquerda);
delay(1000);
myservo.write (0); //servo olha para a direita
delay(1000);
DistanciaDireita=getMesurement();//armazena a variavel "DistanciaDireita"
LCD.clear();
LCD.set cursor (1,2);
LCD.print("Direita");
LCD.print(DistanciDireita);
delay(1000);
if (DistnciaEsquerda>=DistanciaDireita)//se a distancia do objeto da esquerda for maior ou igual a distancia do objeto da direita o robo gira para esquerda
{
move(MOTOR_A, 64,2);
move(MOTOR_B, 64,1;
delay(3000);
}
else // senão o robo gira para a direita
{
move (MOTOR_A, 64,1);
move (MOTOR_B, 64,2);
delay(3000);
}
if (Distancia>10) // se a distancia for maior que 10 cm o robo vai para frente
{
move(MOTOR_A,64,1);// robo vai para frente
move(MOTOR_B,64,1);//robo vai para frente
}
void move(int motor, int speed, int direction)
{
boolem intPin1=LOW;
boolem intPin=HIGH
if (direction=1)
{
inPin1=HIGH;
inPin2=LOW;
}
if (motor=1)
{
digital write (A1N1, inPin1);
digital write (A1N2, inPin2);
analog write( PWM A, speed);
}
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por