lunes, 13 de mayo de 2019

Sensor aparcamiento

Crearemos, un sensor de aparcamiento mediante un sensor de ultrasonidos, que cuando este cerca de colisionar emita un sonido muy molesta y encienda la luz roja, encienda la luz amarilla con un sonido menos molesto cuando no haya mucho peligro, y cuando no haya nada de peligro encienda la luz verde


long distancia;//

long tiempo;//
int pinTrig=9;//
int pinEcho=8; //
int verde=13;//Declaramos el led verde en el pin 13.
int amarillo=2;//Declaramos el led amarillo en el pin 2;
int rojo=4;//Declaramos el led rojo en el pin 4;
int sonido=6;//Declaramos el zumbador en el pin 6;
int tonoa=2000;//Declaramos el tono a 
int tonob=5000;//Declaramos el tono b 
int tonoc=1000;//Declaramos el tono c 

void setup(){
  Serial.begin(9600);// 
  pinMode(pinTrig, OUTPUT); 
  pinMode(pinEcho, INPUT);
  pinMode(verde,OUTPUT);
  pinMode(rojo,OUTPUT);

  pinMode(amarillo,OUTPUT);
  pinMode(sonido,OUTPUT);
}
void loop(){
  digitalWrite(pinTrig,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);//esperamos 5 microsegundos.
  digitalWrite(pinTrig, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);//esperamos 10 microsegundos.
  tiempo=pulseIn(pinEcho, HIGH);//
  distancia= int(0.017*tiempo); //distancia medida en cm
  Serial.println("Distancia ");//En la consula aparece la palabra distancia.
  Serial.println(distancia);
  Serial.println(" cm");//En la consula aparece la palabra cm
  delay(1000);//esperamos 1000ms
    if(distancia>30){//creamos una condicional
  digitalWrite(rojo,LOW);
  digitalWrite(amarillo,LOW);
  digitalWrite(verde,LOW);
  noTone(sonido);
    delay(10);//si la distancia es mayor que 30 cm todos los led estan apagados y esperamos 10 ms.

    }else
    {
      if(distancia>20d&&distancia<30){
  
    digitalWrite(rojo,LOW);
    digitalWrite(verde,HIGH);
    digitalWrite(amarillo,LOW);
    tone(sonido,tonoc,1000);
    delay(10);//si la distancia es mayor de 20 cm y menor que 30 cm solo se encience el led verde y espera 10 ms.
      }
      else{
        if(10<=distancia&&distancia<20){
  digitalWrite(rojo,LOW);
  digitalWrite(amarillo,HIGH);
  digitalWrite(verde,LOW);
  tone(sonido,tonob,100);
  delay(10);//si la distancia es mayor o igual que 10 cm y menos que 20 cm ,solo  se enciende el del amarillo.
  }
      else{
  
  if(distancia<10){
  digitalWrite(rojo,HIGH);
  digitalWrite(amarillo,LOW);
  digitalWrite(verde,LOW);
  tone(sonido,tonoc,10);
    delay(10);si la distancia  es manor que 10 cm, solo se enciende el led rojo y esperamos 10 ms.
  }
    
  }
      }
}

viernes, 12 de abril de 2019

Servomotor con 4 pulsadores

#include <Servo.h>

Servo motor1;
Servo motor2;
int posicion_motor1=0;
int pulsadorizquierda=2;
int estado_pulsadorizquierda=0;
int incremento_de_angulo=10;
int pulsadorderecha=5;
int estado_pulsadorderecha=0;
int posicion_motor2=0;
int pulsadorarriba=3;
int estado_pulsadorarriba=0;
int pulsadorabajo=4;
int estado_pulsadorabajo=0;

void setup()
{
motor1.attach(9);
pinMode(pulsadorizquierda,INPUT);
pinMode(pulsadorderecha,INPUT);
motor1.write(posicion_motor1);
motor2.attach(10);
pinMode(pulsadorarriba,INPUT);
pinMode(pulsadorabajo,INPUT);
motor2.write(posicion_motor2);
}

void loop() {

estado_pulsadorizquierda= digitalRead(pulsadorizquierda);
estado_pulsadorderecha= digitalRead(pulsadorderecha);
estado_pulsadorarriba= digitalRead(pulsadorarriba);
estado_pulsadorabajo= digitalRead(pulsadorabajo);
if (estado_pulsadorizquierda==HIGH)
{
posicion_motor1 = posicion_motor1 + incremento_de_angulo;  //introducimos cuanto queremos que se mueva el servo pulsando el pulsador izquierdo
motor1.write(posicion_motor1);
delay(100); 
  if (posicion_motor1 >= 180){
  posicion_motor1=0;                                      //introducimos cuanto queremos que se mueva el servo pulsando el pulsador izquierdo
  motor1.write(posicion_motor1);
  }
}

if (estado_pulsadorderecha==HIGH)
{
posicion_motor1 = posicion_motor1 - incremento_de_angulo; //introducimos cuanto queremos que se mueva el servo pulsando el pulsador derecho
motor1.write(posicion_motor1);
delay(100); 
    if (posicion_motor1 <= 0){
  posicion_motor1=180;                //Hacemos que vuelva a su posicion inicial al llegar a su limite de giro
  motor1.write(posicion_motor1);
  }
}
if (estado_pulsadorarriba==HIGH)
{
posicion_motor2 = posicion_motor2 + incremento_de_angulo;  //introducimos cuanto queremos que se mueva el servo pulsando el pulsador izquierdo
motor2.write(posicion_motor2);
delay(100); 
  if (posicion_motor2 >= 180){
  posicion_motor2=0;                                      //introducimos cuanto queremos que se mueva el servo pulsando el pulsador superior
  motor2.write(posicion_motor2);
  }
}

if (estado_pulsadorabajo==HIGH)
{
posicion_motor2 = posicion_motor2 - incremento_de_angulo; //introducimos cuanto queremos que se mueva el servo pulsando el pulsador inferior
motor2.write(posicion_motor2);
delay(100); 
    if (posicion_motor2 <= 0){
  posicion_motor2=180;                //Hacemos que vuelva a su posicion inicial al llegar a su limite de giro
  motor2.write(posicion_motor2);
  }
}
}

jueves, 28 de marzo de 2019

Servo controlado co M_block

#include <Servo.h>
Servo miservo;
int pos=0;
int TECLA=0;
void setup() {
  Serial.begin(9600);
  miservo.attach(9);
  pos=0;
}
void loop() {
    miservo.write(pos);
    delay(50);
    Serial.println(pos);
    if (Serial.available() > 0) {  //esto da algo de error
       delay(100);
       TECLA=Serial.read();
       if (TECLA==49){  //es decir,  "1"
          pos=0; //ángulo que debe tomar con la tecla indicada
          }
       if (TECLA==50){  //es decir,  "2"
          pos=45; //ángulo que debe tomar con la tecla indicada
       }
       if (TECLA==51){  //es decir,  "3"
          pos=90; //ángulo que debe tomar con la tecla indicada
          }
        if (TECLA==52){  //es decir,  "4"
          pos=135; //ángulo que debe tomar con la tecla indicada
          }
       if (TECLA==53){  //es decir,  "5"
          pos=180; //ángulo que debe tomar con la tecla indicada
          }
     
     
       }
}

Así conseguiriamos girar el servo al angulo deseado mediante las teclas

Servo controladopor ponteciometro

1.- Mueve un servo según una  determinada entrada analógica. Mediante un joystick o un dispositivo que cuente con un  potenciómetro podemos controlar el movimiento de un servo. 

int val;                     //introducimos la variable val
#include <Servo.h>
Servo servo;
int pot = 3;  //entrada analógica del potenciometro
void setup() {
  Serial.begin(9600);
  servo.attach(6);
}
void loop() {
  int valorpot= analogRead(pot);
  val=map(valorpot,0,1023,0,180); //el valor de ""val" ira variando según varie el valor del potenciometro
  Serial.println(val); //hacemos que nos muestre el angulo de giro en el monitor
  delay(500);
  servo.write(val);
  delay(100);
}

Así conseguiriamos que el servomotor giré exactamente el ángulo que deseemos mediante un controlador, el cual es en este caso en potenciómetro.

viernes, 22 de marzo de 2019

Limpiaparabrisas

1.- Modifica el programa para que el LIMPIAPARABRISAS se mueva más lentamente  cuando se mueva en un sentido y más rapidamente en el otro. 

#include <Servo.h>     
#define pinServo 9   
Servo miservo;         
int pos=0;                 
void setup() {
    miservo.attach(pinServo);        //declaramos la salida del sevo
}
void loop() {
    for (pos=0; pos<=170; pos=pos+1); {
       miservo.write(pos);                     //movemos el servo en un sentido
       delay(800);
    }
    for (pos=170; pos>=10; pos=pos-70); {
       miservo.write(pos);                   //aumentamos el posicionamiento para aumentar la velocidad
       delay(700);
    }
}