WriteUp: Primera olimpiada de microcontroladores interinstitucional

WriteUp: Primera olimpiada de microcontroladores interinstitucional

Tuve la oportunidad de participar en un concurso de programación de micro controladores, en el que propusieron dos problemas para programar y simular de forma individual y en el menor tiempo posible, eran los requisitos para ganar. Después de más de una hora de unos y ceros, de líneas de código en C++ para pic, pude logra terminar los dos ejercicios y salir ganador de dicho evento. Sin mas rodeo los dos ejercicios y su respectiva resolución en simulación y en código fuente:

PROBLEMA 1

Diseñar un programa para controlar el nivel de agua de un depósito que cumpla las siguientes características:

DOS MOTOBOMBAS

  • B1: moto bomba
  • B2: moto bomba

SONDAS DETECTORAS

  • SV: Sonda de vació (RA0)
  • SLL: Sonda de llenado(RA1)
  • SR: Sonda de rebose(RA2)

CINCO INDICADORES

  • Vació(RB0);
  • Llenandose(RB1);
  • Lleno(RB2);
  • Rebose(RB3);
  • Alarma(RB4)

FUNCIONAMIENTO

  • Cuando ninguna de las sondas esta mojada se entiende que el depósito esta vació y se accionaran dos motobombas de llenado. El indicador de «vació» estará ON.
  • Cuando el nivel del liquido toque la sonda de vació SV el indicador «llenándose» se activara, el depósito seguirá llenándose con las dos motobombas (se apagará otros indicadores).
  • Cuando el nivel del líquido toque la sonda de llenado SLL, se detiene la motobomba B2, quedando activa solamente B1. En modo de mantenimiento, el indicador «Lleno» se activa (apaga los otros indicadores).
  • Si el nivel de liquido moja la sonda de Rebose SR, se apaga también la bomba B1, quedando las dos bombas fuera de servicio, el indicador «Rebose» se enciende(apaga los otros indicadores).
  • Cuando se produce un fallo o mal funcionamiento en las sondas de entrada (no se deben activar dos indicadores ya que no es ideal dos estados al mismo tiempo), se detienen las dos bombas, el indicador de «Alarma» se enciende.

Diagrama hecho en proteus problema 1:
Problema 1

Código del pic problema 1:

#include "16f877a.h"

#use delay(clock=4M)
#fuses xt, nowdt, noprotect

void main(){
set_tris_A(0x07);
inicio:
//ninguna sonda mojada
if(!input(PIN_a0) && !input(PIN_a1) && !input(PIN_a2)){
output_high(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b2);
output_low(PIN_b3);
output_low(PIN_b4);
output_high(PIN_c0);
output_high(PIN_c1);
delay_ms(1000);
}
//sonda de vacio SV
else if(input(PIN_a0) && !input(PIN_a1) && !input(PIN_a2)){
output_low(PIN_b0);
output_high(PIN_b1);
output_low(PIN_b2);
output_low(PIN_b3);
output_low(PIN_b4);
output_high(PIN_c0);
output_high(PIN_c1);
delay_ms(1000);
}
//sonda de llenado SLL
else if(input(PIN_a1) && !input(PIN_a0) && !input(PIN_a2)){
output_low(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b3);
output_high(PIN_b2);
output_low(PIN_b4);
output_high(PIN_c0);
output_low(PIN_c1);
delay_ms(1000);
}
//sonda de rebose SR
else if(input(PIN_a2) && !input(PIN_a1) && !input(PIN_a0)){
output_low(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b2);
output_high(PIN_b3);
output_low(PIN_b4);
output_low(PIN_c0);
output_low(PIN_c1);
delay_ms(1000);
}
//Alarma
else{
output_low(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b2);
output_low(PIN_b3);
output_high(PIN_b4);
output_low(PIN_c0);
output_low(PIN_c1);
delay_ms(1000);
}
goto inicio;
}

PROBLEMA 2
Una empresa requiere que usted diseñe un programa para implementar un sistema de seguridad con las siguientes especificaciones:

SENSORES:

  • Un sensor de proximidad ‘S1’.
  • Un sensor de rompimiento ‘S2’.
  • Un sensor magnético ‘S3’

INDICADORES:

  • Cuatro indicadores.
  • Indicador 1 ‘I1’.
  • Indicador 2 ‘I2’.
  • Indicador 3 ‘I3’.
  • Indicador 4 ‘I4’

FUNCIONAMIENTO

  • Cada uno de los sensores debe tener un visualizador (led) que indique su estado (led encendido = operando ; led apagado = fallando).
  • Cuando el sensor de proximidad S1 se active la alarma I1 genere una señal que debe durar 30 segundos.
  • Si el sensor de rompimiento S2 se activa, la alarma I2 genera una señal con un tiempo de funcionamiento de 20 segundos.
  • Si el sensor magnético S3 se activa, la alarma I3 genera una señal con un tiempo de funcionamiento de la mitad de la suma de los dos tiempos anteriores y al mismo tiempo I1 e I2 indicaran una secuencia de señal cada 10 segundos.

Diagrama hecho en proteus problema 2:
Problema 2

Código del pic problema 2:

#include "16f877a.h"
#use delay(clock=4M)
#fuses xt, nowdt, noprotectvoid main(){
set_tris_a(0x07);
output_high(PIN_b7);
output_high(PIN_b6);
output_high(PIN_b5);
output_low(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b2);
output_high(PIN_b3);
inicio:
if(input(PIN_a0)){
output_high(PIN_b0);
delay_ms(3000);
output_low(PIN_b0);
}
else if(input(PIN_a1)){
output_high(PIN_b1);
delay_ms(2000);
output_low(PIN_b1);
}
else if(input(PIN_a2)){
output_high(PIN_b0);
output_high(PIN_b1);
output_high(PIN_b2);
delay_ms(1000);
output_low(PIN_b0);
output_low(PIN_b1);
output_high(PIN_b2);
delay_ms(1000);
output_high(PIN_b0);
output_high(PIN_b1);
output_high(PIN_b2);
delay_ms(500);
output_low(PIN_b0);
output_low(PIN_b1);
output_low(PIN_b2);
}
goto inicio;
}

 

Me gustan los wargames, Programar en PHP con mysql y sql server, Trabajar en : Electricidad, Electronica, Informatica, Programador de Pic's..

6 Comentarios

  1. Responder

    Muy bueno sin duda un dia cuando sea grande aprendere electronica. Para poner en practica esto.

    • Responder

      Kagure Este semestre hay tres concursos en cidca, 1)Robot que debe salir de un laberinto.
      2)Robot seguidor de lineas.
      3)Robot luchador de sumo.
      y de mi parte en la uni proyecto de grado,y un resto de tareas!!!

  2. Responder

    bien bien espero q me de el desquite en la olimpiada de robot de sumo………….nos vemos aya y bien ganado la olimpiada

    • Responder

      Upa!! gracias samir.
      De mi parte si me vuelven a invitar voy.
      Tu concursaste ese dia?

  3. Responder

    Hola, oyes disculpa las molestias como pones las etiquetas azules en proteus, o donde están?, me podrías mandar tu diseño porfas?. claro si es que no tiene derechos de autor. gracias.

    • Responder

      Esos son logic states, y si estas haciendo pruebas con bcd los pones con logic probe.

Deja un comentario

Your email address will not be published. Required fields are marked *

You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>