CarrinhoSensor

=** Autores **= Daniel Augusto Cavalheiro - 0040961523036 Eduardo Teixeira de Souza - 0040971523036 Lucas Akio Kuniyoshi Arimori - 0040961523016 Pedro de Moura Pereira - 0040961523006

Nano IO shield Sensor ultrasônico HC-SR04 Motor de Passo PM35L-048 - HPD4 (96 passos = 1 grau).
 * Dispositivo (Modelo do arduino): **

=** Projeto **= Carrinho autônomo.

=** Resumo **= Projeto para construir um carrinho autônomo utilizando arduino nano, que desvia de obstáculo.

=** Software/materiais utilizados **=

Software:

 * ==== IDE do arduino. ====
 * ==== Bibliotecas disponíveis em Bibliotecas para arduino. ====
 * ==== Classes desenvolvidas para este projeto. ====

=** Metodologia **= O carrinho usa dois motores DC em configuração diferencial, desse modo não é preciso uma roda de direção. Há 3(três) sensores ultrassônicos para leitura dos obstáculos ao redor do carrinho. Um sensor para a frente, um para a direita e outro para a esquerda. Após o carrinho receber a confirmação de um obstáculo em uma das posições laterais, ele girará 45º para o lado oposto. Caso o obstáculo esteja a frente, ele virará 45º para a direita.

=** Desenvolvimento (problemas encontrados, como foram resolvidos, programas desenvolvidos) **=

Inicialmente, tivemos de estudar as bibliotecas do arduino e tivemos de fazer muitos testes. Após algumas semanas de estudo, conseguimos fazer o carrinho se mover e desviar de alguns obstáculos. Depois todo o desenvolvimento foi focado em correção de bugs.

imagens do projeto:

[[image:media-20170623 (3).jpg width="808" height="608"]]






O carrinho, utilizando um arduino Nano e um sensor ultrasonico HC-SR04, se move para a frente automáticamente e desvia de obstáculos encontrados a sua frente
code format="c"
 * 1) include 
 * 2) include 

//motor esquerdo// //#define lfMotorPin1 3// //#define lfMotorPin2 2// //#define lfMotorPin3 5// //#define lfMotorPin4 4//

//motor direito// //#define rgMotorPin1 7// //#define rgMotorPin2 6// //#define rgMotorPin3 8// //#define rgMotorPin4 9//

//Aceleração// //#define startSpeed 200// quando começa a andar Movimento
 * 1) define cruizingSpeed 300 //até chegar na velocidade de cruzeiro//
 * 1) define wheelsDist 18.3
 * 2) define steps 631

//Sensor
 * 1) define trigPin A1
 * 2) define echoPin A0

int us_echo; int min_distance = 45; int max_distance = 200;

class Robot: public StepperRobot{ public: Robot:StepperRobot{}

void init{ StepperRobot::init(startSpeed, cruizingSpeed, wheelsDist, steps); initLeftMotor (lfMotorPin1, lfMotorPin2, lfMotorPin3, lfMotorPin4); //pinos para o motor esquerdo// //initRightMotor(rgMotorPin1, rgMotorPin2, rgMotorPin3, rgMotorPin4);// pinos para o motor direito turboOff; halfStepOn; } };

int ping { int firstEcho; int secondEcho; int thirdEcho; int distance; int distance_cm;

//first echo// //digitalWrite(trigPin, LOW);// send low pulse for 2µs delayMicroseconds(2); digitalWrite(trigPin, HIGH); //send high pulse for 10µs// //delayMicroseconds(15);// //digitalWrite(trigPin, LOW);// back to low pulse

distance = pulseIn(echoPin, HIGH); //read echo value// //firstEcho= distance/29/2;// in cm //Serial.print(firstEcho);// //delay(50);//

second echo digitalWrite(trigPin, LOW); //send low pulse for 2µs// //delayMicroseconds(2);// //digitalWrite(trigPin, HIGH);// send high pulse for 10µs delayMicroseconds(15); digitalWrite(trigPin, LOW); //back to low pulse// //distance = pulseIn(echoPin, HIGH);// read echo value secondEcho= distance/29/2; //in cm// ///* Serial.print(" ");// //Serial.print(secondEcho); */// //delay(50);//

//third echo digitalWrite(trigPin, LOW); //send low pulse for 2µs// //delayMicroseconds(2);// //digitalWrite(trigPin, HIGH);// send high pulse for 10µs delayMicroseconds(15); digitalWrite(trigPin, LOW); //back to low pulse// //distance = pulseIn(echoPin, HIGH);// read echo value thirdEcho= distance/29/2; // in cm /* Serial.print(" "); Serial.println(thirdEcho); */ delay(50);

//se a distância dos três echos lançados forem menor que min_distance retorna a média entre eles, // senão retorna max_distance if ((firstEcho < min_distance) && (secondEcho < min_distance) && (thirdEcho < min_distance)) { return((firstEcho + secondEcho + thirdEcho) / 3); } else { return(max_distance); } }

Robot rob; ActionPlan actPlan; long duration; int distance;

void setup{ rob.init; actPlan.init; pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(9600); }

boolean odd= true;

void loop{ rob.run; us_echo = ping;
 * 1) ifndef _USE_TIMER2_
 * 1) endif

Serial.print("Distance: "); Serial.println(us_echo);

//se us_echo for maior que 5, carrinho se move para a frente, senão gira para a esquerda em 180 graus if (us_echo > 5){ rob.move(mvAhead, 100); } else { rob.move(mvSpinL, 180); }

} code

Exemplo: **@Carritos**