E o laser nao erra! Projeto simples, mas muito interessante!As posicoes sao gravadas manualmente atraves de dois potenciometros. Apos isso, o robo mira laser trabalha sozinho. O movimento e feito por dois servo motores.Ja pensou que e essa a base de funcionamento de um robo de solda?! Com criatividade, a partir desse projeto podemos ter varios outros!Segue o esquema eletrico do circuito e o codigo fonte.Valeu! Abracos!/*----------------------- Programa : MIRA LASER Autor : Fellipe Couto 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 10KServo servoRightLeft; //Variavel do servo motor para direita e esquerdaServo servoUpDown; //Variavel 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 gravadasboolean rec = true;/*----- SETUP -----*/void setup() { //Configura o pino do laser pinMode(laser, OUTPUT); //Configura os pinos dos servos servoRightLeft.attach(servo1); servoUpDown.attach(servo2);}/*----- LOOP PRINCIPAL -----*/void loop() { if (rec == true) { target(); } else { autoLaser(); }}/*----- LASER MANUAL PARA GRAVAR OS ALVOS -----*/void target() { //Laser ligado digitalWrite(laser, HIGH); //Posicoes do potenciometro int 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 posicoes if (analogRead(bRec) == 1023) { qtdRec++; pX[qtdRec] = x; pY[qtdRec] = y; blinkLaser(); //Se o botao permanecer pressionado apos o laser piscar, inicia a mira automatica if (analogRead(bRec) == 1023) { rec = false; delay(2000); } }}/*----- LASER AUTOMATICO -----*/void autoLaser() { 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 automatica if (analogRead(bRec) == 1023) { rec = true; i = qtdRec + 1; delay(2000); //Se o botao permanecer pressionado apos o delay, nao mantem as posicoes que ja estavam gravadas if (analogRead(bRec) == 1023) { qtdRec = 0; digitalWrite(laser, HIGH); delay(1000); digitalWrite(laser, LOW); delay(2000); } } }}/*----- PISCA O LASER -----*/void blinkLaser() { for (int i = 0; i < 15; i++) { digitalWrite(laser, HIGH); delay(50); digitalWrite(laser, LOW); delay(50); }} Hoje em dia e comum nos estacionamentos essa facilidade para encontrarmos as vagas disponiveis. Em cima de cada vaga existe um sensor, e se a vaga estiver disponivel temos uma luz verde acesa, caso contrario, uma luz vermelha.Fiz um exemplo utilizando um sensor ultrassonico HC-SR04. Quando o sensor e ativado, ele calcula a distancia ate o chao, mantendo esse valor como base. Quando um valor menor for detectado, a luz verde e acionada.Reparem que o carro nao e detectado de forma instantanea, e isso e devido a um delay colocado de forma