Você está na página 1de 9

UFRB

Introduo a engenharia
mecnica

Projeto : rob a sensor de
luz





Docente : Jacson Machado
Discente: Vincius silva dos anjos santos

ndice:

1-Introducao
2-Materias
3-Codigo: Ajuste da rotao dos motores
4-Programa do micro controlador
5-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 uno
2- 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 9v
8- 1 bateria 9v
9- Um porta 4 pilhas tamanho AA
10- 4 pilhas AA
11- Uma barra de conectores Sindal (12 bornes,4mm)
12- Duas chaves (microswitch com haste)
13- Dois LDRs
14- 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.com
http://meurobot.blogspot.com.br/

Você também pode gostar