E o laser não erra! Projeto simples, mas muito interessante!
As
posições são gravadas manualmente através de dois potenciômetros. Após
isso, o robô mira laser trabalha sozinho. O movimento é feito por dois
servo motores.
Já pensou que é essa a base de funcionamento de um robô de solda?! Com criatividade, a partir desse projeto podemos ter vários outros!
Segue o esquema elétrico do circuito e o código fonte.
/*--------------------------------------------------------- Programa : MIRA LASER Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 03/05/2014 ---------------------------------------------------------*/#include <Servo.h> //Biblioteca do Servo Motor#define servo1 6 //Servo motor 1 no pino 6#define servo2 7 //Servo motor 2 no pino 7#define laser 8 //Laser no pino 8#define potX A0 //Potenciometro 1 (right / left) ligado na entrada analogica A0#define potY A1 //Potenciometro 2 (up / down) ligado na entrada analogica A1#define bRec A2 //Botao para gravar as posicoes ligado na entrada analogica A2, com resistor de pull-down 10K
Servo servoRightLeft; //Varíavel do servo motor para direita e esquerda
Servo servoUpDown; //Varíavel do servo motor para cima e para baixoint pX[100] = {}; //Array com as posicoes gravadas de right/leftint pY[100] = {}; //Array com as posicoes gravadas de up/downint qtdRec = 0; //Quantidade de posicoes gravadas
boolean rec = true;
/*----- SETUP -----*/voidsetup() {
//Configura o pino do laser
pinMode(laser, OUTPUT);
//Configura os pinos dos servos
servoRightLeft.attach(servo1);
servoUpDown.attach(servo2);
}
/*----- LOOP PRINCIPAL -----*/voidloop() {
if (rec == true) {
target();
} else {
autoLaser();
}
}
/*----- LASER MANUAL PARA GRAVAR OS ALVOS -----*/voidtarget() {
//Laser ligado
digitalWrite(laser, HIGH);
//Posicoes do potenciometroint x = map(analogRead(potX), 0, 1023, 0, 180);
int y = map(analogRead(potY), 0, 1023, 0, 180);
//Posiciona os servos
servoRightLeft.write(x);
servoUpDown.write(y);
//Se o botao for pressionado, grava as posicoesif (analogRead(bRec) == 1023) {
qtdRec++;
pX[qtdRec] = x;
pY[qtdRec] = y;
blinkLaser();
//Se o botao permanecer pressionado apos o laser piscar, inicia a mira automaticaif (analogRead(bRec) == 1023) {
rec = false;
delay(2000);
}
}
}
/*----- LASER AUTOMATICO -----*/voidautoLaser() {
for (int i = 1; i <= qtdRec; i++) {
//Posiciona os servos
servoRightLeft.write(pX[i]);
servoUpDown.write(pY[i]);
delay(500);
//Pisca o laser
blinkLaser();
//Se o botao permanecer pressionado apos o laser piscar, finaliza a mira automaticaif (analogRead(bRec) == 1023) {
rec = true;
i = qtdRec + 1;
delay(2000);
//Se o botao permanecer pressionado após o delay, não mantem as posicoes que ja estavam gravadasif (analogRead(bRec) == 1023) {
qtdRec = 0;
digitalWrite(laser, HIGH);
delay(1000);
digitalWrite(laser, LOW);
delay(2000);
}
}
}
}
/*----- PISCA O LASER -----*/voidblinkLaser() {
for (int i = 0; i < 15; i++) {
digitalWrite(laser, HIGH);
delay(50);
digitalWrite(laser, LOW);
delay(50);
}
}
Boa Dia, muito legal esse tuto, mas me veio uma duvida, voce disse: As posições são gravadas manualmente através de dois potenciômetros. Após isso, o robô mira laser trabalha sozinho. MAS COMO FAZER ESSA GRAVAÇÃO? pena que o video não mostra como.
Bom dia, Eduardo! Após posicionar o laser através dos potenciômetros, é só pressionar um botão (push-button) que a posição é memorizada. Na figura do esquema elétrico, pode-se ver o botão bRec, e no fonte está comentado na linha 55. Abraços!
As posições estão sendo memorizadas somente pelo programa, através do vetores (array) pX e pY. Quando o Arduino reinicia, perde-se as posições memorizadas. Pode-ser utilizar a EEPROM, e nesse caso, toda vez que iniciar o programa, você carrega os vetores com os valores gravados na memória EEPROM.
VOCE DISSE:através do vetores (array) pX e pY. Quando o Arduino reinicia, perde-se as posições memorizadas. Pode-ser utilizar a EEPROM, e nesse caso, toda vez que iniciar o programa, você carrega os vetores com os valores gravados na memória EEPROM.
NESTE CASO NÃO É PRECISO MAIS FAZER NADA QUE JA ESTARIA TUDO AUTOMATIZADO POR QUE ESTA MEMORIZADO NA EEPROM?
Exato! Deixando as posições gravadas na EEPROM, o circuito pode ser desligado que a memória não é perdida. Quando liga-lo novamente, as posições continuam memorizadas.
Felipe beleza, parabéns! Sei que o projeto já tem um tempo. Mas seria possível você atualizar essa projeto ou ensinar como inserir uma EEPROM e adequar o código ? Obrigado desde já. werdn@msn.com
Boa Dia, muito legal esse tuto, mas me veio uma duvida, voce disse: As posições são gravadas manualmente através de dois potenciômetros. Após isso, o robô mira laser trabalha sozinho. MAS COMO FAZER ESSA GRAVAÇÃO? pena que o video não mostra como.
ResponderExcluirpode me informar?
abraço
Bom dia, Eduardo!
ExcluirApós posicionar o laser através dos potenciômetros, é só pressionar um botão (push-button) que a posição é memorizada. Na figura do esquema elétrico, pode-se ver o botão bRec, e no fonte está comentado na linha 55.
Abraços!
Obrigado pela paciência em responder a tantos pedidos, Mas isso é memorizado pelo programa e o arduino?
ResponderExcluirAs posições estão sendo memorizadas somente pelo programa, através do vetores (array) pX e pY. Quando o Arduino reinicia, perde-se as posições memorizadas. Pode-ser utilizar a EEPROM, e nesse caso, toda vez que iniciar o programa, você carrega os vetores com os valores gravados na memória EEPROM.
ExcluirVOCE DISSE:através do vetores (array) pX e pY. Quando o Arduino reinicia, perde-se as posições memorizadas. Pode-ser utilizar a EEPROM, e nesse caso, toda vez que iniciar o programa, você carrega os vetores com os valores gravados na memória EEPROM.
ResponderExcluirNESTE CASO NÃO É PRECISO MAIS FAZER NADA QUE JA ESTARIA TUDO AUTOMATIZADO POR QUE ESTA MEMORIZADO NA EEPROM?
Exato! Deixando as posições gravadas na EEPROM, o circuito pode ser desligado que a memória não é perdida. Quando liga-lo novamente, as posições continuam memorizadas.
ExcluirPoxa que legal as possibilidades que a programação tem. E muito obrigado por responder-me.
ResponderExcluirEstou sofrendo para apreender programação, eletrônica, e a matemática usada nos cálculos.
Quando tiver tempo, faça uns videos nos ensinando a programar, se puder né.
abraço
otmo projerto daria para modificar para um braço robotico o q mudar no esquema desde j OB
ResponderExcluirBom dia! Esse projeto está configurado para controlar 2 motores servo, e é possível sim efetuar alterações para controle de braço.
ExcluirFelipe beleza, parabéns! Sei que o projeto já tem um tempo. Mas seria possível você atualizar essa projeto ou ensinar como inserir uma EEPROM e adequar o código ? Obrigado desde já. werdn@msn.com
ResponderExcluirFILEPE PARABÉNS PROJETO MUITO MASSA! TERIA COMO MOSTRAR A GRAVAÇÃO NA MEMORIA EEPROM ? cjr.pinheiro@hotmail.com
ResponderExcluir