Y... seguimos trabajando con ilusión………. esta práctica siempre me recuerda aquel dicho
popular de una comunidad próxima a nosotros:
“ya estamos en Haro, que se ven las luces”
en youtube https://youtu.be/lJgl4Isy3gs
#include <Servo.h> //incluimos librería del servo
Servo izquierdo;
//nombramos servo izquierdo
Servo derecho;
//nombramos servo derecho
Servo radar;
//nombramos servo del ultrasonido
const int
emisor = 6; // pin del emisor
de ultrasonido
const int
recetor =
5; //pin del
recetor de ultrasonido
const int
pinizquierdo =
10; //pin del
servo izquierdo
const int
pinderecho =
9; //pin del
servo derecho
const int
pinradar =
7; //pin del
servo del ultrasonido
const int
distancialimite =
40; //distancia máxima
a la que se acerca
//a un obstáculo
char posicionradar
= 'i'; //declaramos
variable de la posición del
//radar y lo llevamos a i
long tiempo
= 0; //declaramos variable de tiempo
long tiempoizquierda
= 0; //declaramos variable de tiempo desde
//último giro a la izquierda
long tiempoderecha
= 0; //declaramos variable de tiempo desde el
//último giro a la derecha
void setup(){
izquierdo.attach(pinizquierdo); //activamos
servo izquierdo
derecho.attach(pinderecho); //activamos
servo derecho
radar.attach(pinradar); //activamos
servo del ultrasonidos
}
void loop(){
int distanciaizquierda
= 90; //declaramos variable de distancia por
//la izquierda e igualamos a 90
int distanciaderecha
= 90; //declaramos variable de distancia por la
//derecha e igualamos a 90
int distanciacentro
= 90; //declaramos variable de distancia por el
//centro e igualamos a 90
adelante(); //iniciamos
la marcha
if(millis()>tiempo+300){ //si
el tiempo real es mayor que la variable
//tiempo más 300
if(posicionradar ==
'i'){ //y estamos en i
distanciaizquierda =
ping(); //guardamos la distancia en la variable
posicionradar =
'c'; //vamos a la posición c
}
else if(posicionradar ==
'c'){//si estamos en la posición c
distanciacentro =
ping(); //guardamos la distancia en la variable
posicionradar =
'd'; //vamos a la posición d
}
else{ //si
estamos en d
distanciaderecha
= ping(); //guardamos la
distancia en la variable
posicionradar
= 'i'; // vamos a la posición
i
}
tiempo =
millis();
//igualamos la variable tiempo al tiempo real
para
//volver empezar
}
switch (posicionradar){
//declaramos las posiciones del radar
case 'd': //caso d
radar.write(40); //mandamos
al radar a 60º
break; //paramos
case 'c': //caso c
radar.write(80); //mandamos
radar a 80º
break; //paramos
case 'i': //caso i
radar.write(140); //mandamos
al radar a 120º
break; //paramos
}
if(distanciaizquierda<distancialimite){ //si
la distancia por la
//izquierda es menor que la distancia limite
if (millis()<tiempoizquierda
+ 500){ //y si el tiempo real es menor
//que el tiempo izquierda más 500
atras(500); //vamos
atras durante 0.5 segundos
derecha(1000); //giramos
a la derecha durante 1 segundos
}
else{ //si
no
derecha(200); //giramos
a la derecha durante 0.2 segundos
}
tiempoderecha =
millis();
//igualamos el tiempo derecha al tiempo
//real
}
if(distanciacentro<distancialimite){ //si
la distancia por el centro
//es menor que la distancia limite
if(distanciaderecha>distanciaizquierda){ //y
la distancia por la
//derecha es
mayor que por la izquierda
atras(500);
//vamos atrás durante 0.5 segundos
derecha(200);
//giramos a la derecha durante 0.2 segundos
}
else{ //si no
atras(500);
//vamos atrás durante 0.5 segundos
izquierda(200);
//giramos a la izquierda durante 0.2
segundos
}
}
if(distanciaderecha<distancialimite){ //si
la distancia por la
//derecha es menor que la distancia limite
if(millis()<tiempoderecha +
500){ //y si el
tiempo real es menor que
//el tiempo derecha más 500
atras(500); //vamos
atrás durante 0.5 segundos
izquierda(1000); //giramos
a la izquierda durante 1 segundos
}
else{ // si
no
izquierda(200); //giramos
levemente a la izquierda durante 0.2
//segundos
}
tiempoizquierda =
millis();
//igualamos el tiempo izquierda al tiempo
//real
}
}
int ping(){ //declaramos el
ultrasonido
long distancia, cm; //declaramos la variable distancia
pinMode(emisor, OUTPUT); //activamos el pin
emisor como salida
digitalWrite(emisor, LOW); //lo apagamos
delayMicroseconds(2); //durante
2 microsegundos
digitalWrite(emisor, HIGH); //emitimos un pulso
delayMicroseconds(5); //
durante 5 microsegundos
digitalWrite(emisor, LOW); //lo apagamos
pinMode(recetor, INPUT); //activamos el pin
receptor como entrada
distancia =
pulseIn(recetor, HIGH); //igualamos la
variable a la
//lectura
del recetor
cm =
microsegundosacm(distancia); //convertimos el tiempo en
//centímetros
return round(cm); //devolvemos números
enteros
}
long microsegundosacm(long microsegundos){
return microsegundos
/ 29 / 2;
}
void adelante(){
//subrutina adelante
izquierdo.write(150); //mandamos
el servo a 150º
derecho.write(30); //mandamos
el servo a 30º
}
void izquierda(float t){ //subrutina izquierda
izquierdo.write(30); //mandamos
el servo a 30º
derecho.write(30); //mandamos
el servo 30º
delay(t); //durante
el tiempo seleccionado
}
void derecha(float t){ //subrutina derecha
izquierdo.write(150); //mandamos
el servo a 150º
derecho.write(150); //mandamos
el servo a 150º
delay(t); //durante
el tiempo seleccionado
}
void atras(int t){ //subrutina atrás
izquierdo.write(30); //mandamos
el servo a 30º
derecho.write(150); //mandamos
el servo a 150º
delay(t); //durante
el tiempo seleccionado
}
void parar(){
//subrutina parar
izquierdo.write(90); //mandamos
el servo a 90º
derecho.write(90); //mandamos
el servo a 90º
}
|
#include <Servo.h> //incluimos librería servo
Servo izquierdo;
//nombramos servo izquierdo
Servo derecho;
//nombramos servo derecho
const int
pinizquierdo =
10; //pin del
servo izquierdo
const int
pinderecho =
9; //pin del
servo derecho
int estado
= '0'; //variable estado
iniciamos en S
void setup() {
Serial3.begin(9600); //
activamos el puerto serial 3 para
//comunicación con
el Bluetooth
izquierdo.attach(pinizquierdo); //activamos
servo izquierdo
derecho.attach(pinderecho); //activamos
servo derecho
}
void loop() {
if(Serial3.available()>0){ // lee el
bluetooth
estado = Serial3.read(); //y almacena en estado
}
if(estado=='1'){
// si estado es F (botón adelante)
izquierdo.write(150); //mandamos servo a 150º
derecho.write(30);
//mandamos servo a 30º
}
if(estado=='3'){
//si estado es L (botón izquierda)
izquierdo.write(110); //mandamos servo a 110º
derecho.write(0);
//mandamos servo a 0º
}
if(estado=='0'){
//si
estado es S (botón parar)
izquierdo.write(91); //mandamos servo a 91º
derecho.write(92);
//mandamos servo a 92º
}
if(estado=='4'){
//si estado es R (botón derecho)
izquierdo.write(180); //mandamos servo a 180º
derecho.write(80);
//mandamos servo a 80º
}
if(estado=='2'){
//si estado es B (botón atrás)
izquierdo.write(30); //mandamos servo a 30º
derecho.write(150);
//mandamos servo a 150º
}
}
|
#include <Servo.h> //incluimos librería del servo
Servo izquierdo;
//nombramos servo izquierdo
Servo derecho;
//nombramos servo derecho
Servo radar;
//nombramos servo del ultrasonido
const int
emisor = 6; // pin del emisor
de ultrasonido
const int
recetor =
5; //pin del
recetor de ultrasonido
const int
pinizquierdo =
10; //pin del
servo izquierdo
const int
pinderecho =
9; //pin del
servo derecho
const int
pinradar =
7; //pin del
servo del ultrasonido
const int
distancialimite =
40; //distancia máxima
a la que se acerca
//a un obstáculo
char posicionradar
= 'i'; //declaramos
variable de la posición del
//radar y lo
llevamos a i
long tiempo
= 0; //declaramos variable de tiempo
long tiempoizquierda
= 0; //declaramos variable de tiempo desde último
//giro a la
izquierda
long tiempoderecha
= 0; //declaramos variable de tiempo desde el
//último giro a la
derecha
int estado
= '0'; //variable estado iniciamos en 0
void setup() {
Serial3.begin(9600); //
inicia el puerto serial 3 para
//comunicación con el Bluetooth
izquierdo.attach(pinizquierdo); //activamos
servo izquierdo
derecho.attach(pinderecho); //activamos
servo derecho
radar.attach(pinradar); //activamos
servo del ultrasonidos
}
void loop() {
if(Serial3.available()>0){ // lee
el bluetooth
estado = Serial3.read(); //y almacena en estado
}
if(estado=='1'){
//si estado es 1 (botón adelante)
izquierdo.write(150); //mandamos servo a 150º
derecho.write(30);
//mandamos servo a 30º
}
if(estado=='3'){
//si estado es 3 (botón izquierda)
izquierdo.write(110); //mandamos servo a 110º
derecho.write(0);
//mandamos servo a 0º
}
if(estado=='0'){
//si
estado es 0 (botón x)
izquierdo.write(91); //mandamos servo a 91º
derecho.write(92);
//mandamos servo a 92º
}
if(estado=='4'){
//si estado es 4 (botón derecho)
izquierdo.write(180); //mandamos servo a 180º
derecho.write(80);
//mandamos servo a 80º
}
if(estado=='2'){
//si estado es 2 (botón atrás)
izquierdo.write(30); //mandamos servo a 30º
derecho.write(150);
//mandamos servo a 150º
}
if (estado =='6'){
// si estado es 6 (botón triangulo)
//funciona con
ultrasonidos
int distanciaizquierda
= 90; //declaramos variable de distancia por la
//izquierda e
igualamos a 90
int distanciaderecha
= 90; //declaramos variable de distancia por la
//derecha e
igualamos a 90
int distanciacentro
= 90; //declaramos variable de distancia por el
//centro e igualamos
a 90
adelante(); //iniciamos
la marcha
if(millis()>tiempo+300){ //si
el tiempo real es mayor que la variable
//tiempo más 300
if(posicionradar ==
'i'){ //y estamos en i
distanciaizquierda =
ping(); //guardamos la distancia en la variable
posicionradar =
'c'; //vamos a la posición c
}
else if(posicionradar ==
'c'){//si estamos en la posición c
distanciacentro =
ping(); //guardamos la distancia en la variable
posicionradar =
'd'; //vamos a la posición d
}
else{ //si
estamos en d
distanciaderecha
= ping(); //guardamos la
distancia en la variable
posicionradar
= 'i'; // vamos a la posición
i
}
tiempo =
millis();
//igualamos la variable tiempo al tiempo real
para
//volver empezar
}
switch (posicionradar){
//declaramos las posiciones del radar
case 'd': //caso d
radar.write(40); //mandamos
al radar a 60º
break; //paramos
case 'c': //caso c
radar.write(80); //mandamos
radar a 80º
break; //paramos
case 'i': //caso i
radar.write(140); //mandamos
al radar a 120º
break; //paramos
}
if(distanciaizquierda<distancialimite){ //si
la distancia por la
//izquierda es menor
que la distancia limite
if (millis()<tiempoizquierda
+ 500){ //y si el tiempo real es menor
//que el
tiempo izquierda más 500
atras(500); //vamos
atrás durante 0.5 segundos
derecha(1000); //giramos
a la derecha durante 1 segundos
}
else{ //si
no
derecha(200); //giramos
a la derecha durante 0.2 segundos
}
tiempoderecha =
millis();
//igualamos el tiempo derecha al tiempo real
}
if(distanciacentro<distancialimite){ //si
la distancia por el centro
//es menor
que la distancia limite
if(distanciaderecha>distanciaizquierda){ //y
la distancia por la
//derecha es mayor que
por la izquierda
atras(500);
//vamos atrás durante 0.5 segundos
derecha(200);
//giramos a la derecha durante 0.2 segundos
}
else{ //si no
atras(500);
//vamos atrás durante 0.5 segundos
izquierda(200);
//giramos a la izquierda durante 0.2 segundos
}
}
if(distanciaderecha<distancialimite){ //si
la distancia por la derecha
//es
menor que la distancia limite
if(millis()<tiempoderecha +
500){ //y si el
tiempo real es menor que
//el
tiempo derecha más 500
atras(500); //vamos
atrás durante 0.5 segundos
//izquierda(1000); //giramos
a la izquierda durante 1 segundos
}
else{ // si
no
izquierda(200); //giramos
levemente a la izquierda durante 0.2
//segundos
}
tiempoizquierda =
millis();
//igualamos el tiempo izquierda al tiempo
//real
}
}
}
int ping(){ //declaramos el
ultrasonido
long distancia, cm; //declaramos la variable distancia
pinMode(emisor, OUTPUT); //activamos el pin
emisor como salida
digitalWrite(emisor, LOW); //lo apagamos
delayMicroseconds(2); //durante
2 microsegundos
digitalWrite(emisor, HIGH); //emitimos un pulso
delayMicroseconds(5); //
durante 5 microsegundos
digitalWrite(emisor, LOW); //lo apagamos
pinMode(recetor, INPUT); //activamos el pin
receptor como entrada
distancia =
pulseIn(recetor, HIGH); //igualamos la
variable a la
//lectura
del recetor
cm =
microsegundosacm(distancia); //convertimos el tiempo en
//centímetros
return round(cm); //devolvemos números
enteros
}
long microsegundosacm(long microsegundos){
return microsegundos
/ 29 / 2;
}
void adelante(){
//subrutina adelante
izquierdo.write(150); //mandamos
el servo a 150º
derecho.write(30); //mandamos
el servo a 30º
}
void izquierda(float t){ //subrutina izquierda
izquierdo.write(30); //mandamos
el servo a 30º
derecho.write(30); //mandamos
el servo 30º
delay(t); //durante
el tiempo seleccionado
}
void derecha(float t){ //subrutina derecha
izquierdo.write(150); //mandamos
el servo a 150º
derecho.write(150); //mandamos
el servo a 150º
delay(t); //durante
el tiempo seleccionado
}
void atras(int t){ //subrutina atrás
izquierdo.write(30); //mandamos
el servo a 30º
derecho.write(150); //mandamos
el servo a 150º
delay(t); //durante
el tiempo seleccionado
}
void parar(){
//subrutina parar
izquierdo.write(90); //mandamos
el servo a 90º
derecho.write(90); //mandamos
el servo a 90º
}
|