RealJoia TeknoMydia
|
Esquema Arduino para o Carrinho Autonomo Esquema da Pinagem para o Carrinho Autonomo // Autor Joaquim Herdy Menezes - Joahermen - 201811 // Motor Shield Ponte H L298N #include "Ultrasonic.h" #define Sinal 6 // Trigger #define Radar 7 // Echo int EnablDir = 10; // ENB int EnablEsq = 11; // ENA int MotorDirM = 8; // N4 int MotorDirW = 9; // N3 int MotorEsqM = 12; // N2 int MotorEsqW = 13; // N1 int Veloz; Ultrasonic ultrasonic(6,7); int Distanc = 0; int SensorDir = 0; int SensorEsq = 0; void setup() { Serial.begin(9600); // Seta Frequencia para o Sensor pinMode(MotorDirM, OUTPUT); // Seta para Saida de Dados pinMode(MotorDirW, OUTPUT); // Seta para Saida de Dados pinMode(MotorEsqM, OUTPUT); // Seta para Saida de Dados pinMode(MotorEsqW, OUTPUT); // Seta para Saida de Dados pinMode(Sinal, OUTPUT); // Seta para Saida de Dados pinMode(Radar, INPUT); // Seta para Entrada de Dados } void loop() { Veloz = 191; // Fixa os Motores em 3/4 da Velocidade Maxima Avansar(); // Avansa delay(100); // Por milessegundos Distanc = Sensor(); // Verifica Distancia Serial.println(Distanc); delay(10); if(Distanc <= 30){ // Se Distanc menor que 30 centimetros Esquerda(); // Gira para a Esquerda delay(400); // Por milessegundos Parar(); // Para delay(100); // Por milessegundos SensorEsq = Sensor(); // Vai para SubRotina verificar distancia Serial.print(" <- = "); Serial.println (SensorEsq); Direita(); // Gira para a Direita delay(800); // Por milessegundos Parar(); // Parar delay(100); // Por milessegundos SensorDir = Sensor(); // Vai para SubRotina verificar distancia Serial.print(" -> = "); Serial.println(SensorDir); if(SensorDir >= SensorEsq){ // Se distancia Direita maior ou igual Esquerda Serial.println(" ---> "); Avansar(); // Avansa } else{ Esquerda(); // Gira para a Esquerda delay(1200); Parar(); delay(100); Serial.println(" <--- "); Avansar(); } } } void Avansar(){ // Avansar digitalWrite(MotorDirM, HIGH); digitalWrite(MotorDirW, LOW); digitalWrite(MotorEsqM, HIGH); digitalWrite(MotorEsqW, LOW); analogWrite(EnablDir, Veloz); analogWrite(EnablEsq, Veloz); } void Recuar(){ // Recuar digitalWrite(MotorDirM, LOW); digitalWrite(MotorDirW, HIGH); digitalWrite(MotorEsqM, LOW); digitalWrite(MotorEsqW, HIGH); analogWrite(EnablDir, Veloz); analogWrite(EnablEsq, Veloz); } void Direita(){ // Direita digitalWrite(MotorDirM, LOW); digitalWrite(MotorDirW, HIGH); digitalWrite(MotorEsqM, HIGH); digitalWrite(MotorEsqW, LOW); analogWrite(EnablDir, Veloz); analogWrite(EnablEsq, Veloz); } void Esquerda(){ // Esquerda digitalWrite(MotorDirM, HIGH); digitalWrite(MotorDirW, LOW); digitalWrite(MotorEsqM, LOW); digitalWrite(MotorEsqW, HIGH); analogWrite(EnablDir, Veloz); analogWrite(EnablEsq, Veloz); } void Parar(){ // Parar digitalWrite(MotorDirM, LOW); digitalWrite(MotorDirW, LOW); digitalWrite(MotorEsqM, LOW); digitalWrite(MotorEsqW, LOW); analogWrite(EnablDir, 0); analogWrite(EnablEsq, 0); } int Sensor(){ // Verifica distancia digitalWrite(Sinal, LOW); delayMicroseconds(2); digitalWrite(Sinal, HIGH); delayMicroseconds(10); digitalWrite(Sinal, LOW); int Distanc = (ultrasonic.Ranging(CM)); return(Distanc); } |