Algoritmo para obtener el valor mayor de las medidas realizadas por un sensor de ultrasonidos.

Vamos a analizar el algoritmo para obtener el mayor de tres números

Algoritmo para obtener el mayor de tres números

Fuente: Hazaelocielx's Blog

ALGORITMO INFORMAL


INICIO.

1.- Pedir al usuario tres números diferentes.

2.- Comparar el primero con el segundo.

3.- Al mayor de los anteriores, compararlo con el tercero. El número más grande es el mayor de los tres.

4.- Imprimir el resultado en la pantalla.

FIN


ALGORITMO COMPUTACIONAL

INICIO

1.- Solicitar a usuario n1, n2 y n3

2.- Comparar n1 con n2

3.- Si n1 > n2

                Si n1 > n3

                     Imprimir n1

                Si no
                     Imprimir n3
     Si no, comparar n2 con n3
                Si n2 > n3
                     Imprimir n2
                Si no
                     Imprimir n3
FIN

En nuestro caso lo vamos a adaptar a para obtener la distancian mayor obtenida por un sensor de ultrasonidos que realiza tres medidas:

Se posiciona en 0º y realiza una medida. distancia_0
Se posiciona en 90º y realiza una segunda media. distancia_90
Se posiciona en 180º y realiza una tercera medida distancia_180

El valor obtenido, la distancia mayor se va  a utilizar para indicar al robot la dirección en la que tiene que avanzar.



ALGORITMO INFORMAL


INICIO.

1.- Realizar las medidas de distancia (distancia_0, distancia_90 y distancia_180).

2.- Comparar el primero con el segundo.

3.- Al mayor de los anteriores, compararlo con el tercero. El número más grande es el mayor de los tres.

4.- Imprimir el resultado en la pantalla.

FIN


ALGORITMO COMPUTACIONAL

INICIO

1.- Realizar las medidas de distancia (distancia_0, distancia_90 y distancia_180).

2.- Comparar distancia_0 con distancia_90

3.- Si distancia_0 >distancia_90

                Si distancia_0 > distancia_180

                     avanzar();

                Si no

                     girarDerecha();

     Si no, comparar distancia_90 con distancia_180
              
           Si distancia_90 > distancia_180
       
            girarIzquierda();
       
       Si no
                    girarDerecha();

FIN

Las funciones avanzar(), girarDerecha() y girarIzquierda(), han sido creadas para controlar el funcionamiento del robot.

CircuitLab, la forma más sencilla de diseñar tus circuitos en la web



Se trata de un sencillo editor que podemos ejecutar cómodamente desde el navegador, sin ni siquiera tener que crear una cuenta para poder usarlo y con los componentes más habituales a nuestro alcance. La herramienta funciona perfectamente, permitiendo diseñar circuitos rápidamente y realizar distintas simulaciones antes de llevar los resultados a la práctica física.

CircuitLab es gratis, haciendo de él un compañero ideal para el sector educativo o para aficionados a la electrónica. Creando una cuenta podremos además guardar nuestros circuitos, imprimir los resultados en PDF y hacerlos públicos para compartirlos con otros usuarios.

Fuente: Genbeta



Control del funcionamiento de un ventilador con Arduino

Propuesta

Diseñar un circuito para controlar la temperatura de la maqueta de una habitación con la utilización de un pequeño ventilador de corriente continua y un sensor de temperatura.

El funcionamiento del circuito será el siguiente, siempre que la temperatura sea superior a 28ºC el ventilador estará funcionamiento.

El sensor que vamos a utilizar es el LM35, cuyas características principales son las siguientes: Sensor de temperatura LM35


Montaje realizado


Diagrama de flujo



Código

 float tempC;
 int pinLM35=0;
#define EA 11
#define I1 10
#define I2 9

void setup()
{
  pinMode(EA,OUTPUT);
  pinMode(I1,OUTPUT);
  pinMode(I2,OUTPUT);
 
}
void loop()
{
  tempC= analogRead(pinLM35);
  tempC=(tempC*5.0*100.0)/1024.0;
 
  if(tempC>30)
  {
    digitalWrite(EA,HIGH);
    digitalWrite(I1,LOW);
    digitalWrite(I2,HIGH);

  }
  else
  {
  digitalWrite(EA,LOW);
}
}





Control del funcionamiento de un puente levadizo con Arduino

Propuesta

En el taller de tecnología disponemos de la maqueta de un puente levadizo, dicha maqueta incorpora dos finales de carrera, uno para detectar que el tablero del puente alcanza su posición de máxima apertura y otro para detectar que el puente ha bajado completamente. El sistema incorpora un motor con reductora y un sistema de poleas.

El sistema de control de regulación y control debe funcionar de la siguiente manera:

Al accionar un pulsador el puente debe de subir o bajar dependiendo de la posición en la que se encuentre, hasta alcanzar la posición contraria.

El sistema incorpora dos diodos, uno verde para indicar que el tablero está subiendo y otro rojo para indicar que el tablero está bajando.

Solución adoptada

Nota: Hemos tenido que utilizar dos interruptores para simular el funcionamiento de los finales de carrera.


Diagrama de flujo


Código

int Pulsador = 6;
int finalA = 11;
int finalB = 7;
int DiodoA = 1;
int DiodoB = 0;
int estadoPulsador = 0;
int estadoFinalA = 0;
int estadoFinalB = 0;
int E1=10;
int I1=9;
int I2=8;

void subir(){
  digitalWrite(E1, HIGH);
  digitalWrite(I1, HIGH);
  digitalWrite(I2, LOW);
}

void bajar(){
  digitalWrite(E1, HIGH);
  digitalWrite(I1,LOW);
  digitalWrite(I2, HIGH);
}

void parar(){
  digitalWrite(I1, LOCódigoW);
  digitalWrite(I2, LOW);
  digitalWrite(E1, LOW);
}

void setup()
{
  pinMode(E1, OUTPUT);
  pinMode(I1, OUTPUT);
  pinMode(I2, OUTPUT);
  pinMode(Pulsador, INPUT);
  pinMode(finalA, INPUT);
  pinMode(finalB, INPUT);
  pinMode(DiodoA, OUTPUT);
  pinMode(DiodoB, OUTPUT);
}

void loop()
{
estadoPulsador=digitalRead(Pulsador);
estadoFinalA=digitalRead(finalA);
estadoFinalB=digitalRead(finalB);

if((estadoPulsador==HIGH)&&(estadoFinalA==HIGH))
{
  while(estadoFinalB==LOW)
  {
    bajar();
    digitalWrite(DiodoA, HIGH);
    estadoFinalB = digitalRead(finalB);
   }
   parar();
 }

 if((estadoPulsador==HIGH) && (estadoFinalB==HIGH))
  {
   while(estadoFinalA==LOW)
   {
     subir();
     digitalWrite(DiodoB, HIGH);
     estadoFinalA = digitalRead(finalA);
   }
    parar();
  }
}