UFRB Vinicius

10

Click here to load reader

Transcript of UFRB Vinicius

UFRB

Introduo a engenharia mecnica

Projeto : rob a sensor de luz

Docente : Jacson MachadoDiscente: Vincius silva dos anjos santos

ndice:

1-Introducao 2-Materias 3-Codigo: Ajuste da rotao dos motores4-Programa do micro controlador5-Referencias

Introduo

Esse projeto foi influenciado indiretamente pelo professor Jacson da matria Introduo a engenharia mecnica aps ele citar sobre as especializaes da mecnica no caso mecatrnica onde j havia um gosto em partcula assim dando uma iniciativa em montar esse projeto que provavelmente ira incentivar outros alunos ah seguir a rea. A ideia principal desse projeto e projetar e criar um rob onde seu principal objetivo seria procura uma fonte de luz e quando bater muda de direo.

Matrias

1- Uma placa arduino uno2- Dois motores 3- Uma chapa de alumnio 4- Duas rodas (com um dimetro de 5 cm)5- Fios para conexes (AWG 26 a 30)6- Dois elsticos de dinheiro 7- Cabo e conector de alimentao para bateria 9v8- 1 bateria 9v9- Um porta 4 pilhas tamanho AA10- 4 pilhas AA 11- Uma barra de conectores Sindal (12 bornes,4mm)12- Duas chaves (microswitch com haste)13- Dois LDRs14- Dois espaadores com rosca (de placa-mae de computadores)15- Uma chave liga-desliga

Cdigo

Cdigo de ajuste da rotao dos motores:#include "SoftwareServo.h"

SoftwareServo servo;

void setup(){ servo.attach(2); //Num. do pino (Arduino) em que o servo est conectado. // Teste um servo, anote o valor do max. pulse, e depois teste o outro.

//servoL.setMaximumPulse(XXX);// esse o valor que ser testado no loop. // Depois de obt-lo, coloque aqui em cima e tire o comentrio. //servoL.setMinimumPulse(XXX);// para um dos servos que testamos, // no resolveu mexer s no max. pulse. // Ficou muito baixo e, assim, a velocidade mxima era pequena. // Foi necessrio, ento, ajustar tambm o min. pulse

Serial.begin(9600); Serial.println("ServoAdjust/Ajuste do servo");}

void loop(){ for (int maxpulse=500; maxpulse!=3000; maxpulse+=10) { servoL.setMaximumPulse(maxpulse); servoL.write(90); Serial.println(maxpulse); SoftwareServo::refresh(); delay(45); SoftwareServo::refresh(); delay(45); } //Depois de ter um valor aproximado, diminua o incremento do lao e //os valores inicial e final delay(500);} Programa do micro controlador#include "SoftwareServo.h"#define invON LOW#define invOFF HIGH#define leftColisionPin 11#define rightColisionPin 10#define leftLdrPin A0#define rightLdrPin A1

SoftwareServo servoL;SoftwareServo servoR;

int leftCol=invOFF;int rightCol=invOFF;int leftLight=0;int rightLight=0;

void setup(){ Serial.begin(9600); servoL.attach(2); servoR.attach(3); servoL.setMinimumPulse(295); //coloque os valores que voc obteve no // teste dos servos. servoL.setMaximumPulse(993); servoR.setMaximumPulse(1247); pinMode(leftColisionPin, INPUT); digitalWrite(leftColisionPin, HIGH); // pullup. pinMode(rightColisionPin, INPUT);digitalWrite(rightColisionPin, HIGH); pinMode(rightLdrPin, INPUT); digitalWrite(rightLdrPin, HIGH); pinMode(leftLdrPin, INPUT); digitalWrite(leftLdrPin, HIGH); delay(2000); //Aumenta velocidade vagarosamente for (int k=0; k!=90; ++k) { servoL.write(90+k); //frente em 180 servoR.write(90-k); //frente em 0 SoftwareServo::refresh(); delay(25); } }

void loop(){ //Segue para frente em velocidade mxima servoL.write(180); servoR.write(0); SoftwareServo::refresh();

//L LDRs / Read LDRs leftLight=analogRead(leftLdrPin); rightLight=analogRead(rightLdrPin); if (leftLight > rightLight) { servoL.write(150); servoR.write(70); } else { servoL.write(110); servoR.write(30); } SoftwareServo::refresh(); delay(45);

//L chaves de coliso leftCol=digitalRead(leftColisionPin); rightCol=digitalRead(rightColisionPin); //Deteco de coliso if (leftCol == invON || rightCol == invON) { //Rob para trs / Reverse servoL.write(30); //frente em 180 servoR.write(150); //frente em 0

for (int k=0; k!=10; ++k) { SoftwareServo::refresh(); delay(45); } if (leftCol == invON) { //Se bateu esquerda, vira para a direita for (int k=0; k!=17; ++k) { servoL.write(140); servoR.write(140); SoftwareServo::refresh(); delay(45); } } else { if (rightCol == invON) { //Se bateu direta, vira para a esquerda for (int k=0; k!=17; ++k) { servoL.write(40); servoR.write(40); SoftwareServo::refresh(); delay(45); } } } } SoftwareServo::refresh(); delay(1);}

Referencias

www.robocore.comhttp://meurobot.blogspot.com.br/