Icono del sitio ELECTROALL

Como hacer un ascensor de 4 pisos

Las veces que me subía a un ascensor siempre me preguntaba, como funcionara? Que componentes tendrá? Será dificil?. Como electrónicos estamos en la obligación de entender la lógica y realizar un ascensor de 4 pisos desde cero. Y sí efectivamente en  este video aprenderemos a como realizar un ascensor desde el esquemático electrónico, la creación de la tarjeta PCB que será programado desde el IDE de arduino, las estructuras y el funcionamiento del mecanismo, finalmente este proyecto se implementará en la vida real.

DATOS TÉCNICOS
  1. Tensión de alimentación……………………….…………24VDC
  2. Corriente de alimentación………………….……………20mA
  3. Entadas digitales 12-24VDC……………………….……12
  4. Salidas RLY…………………………………………………………4
      • Tensión AC…………..……….………………….….……250V
      • Corriente AC…………………………………………….5A
      • Tensión DC………………………………………………30V
      • Corriente DC……………………………………………5A
  5. Entorno de programación………………………..………..Arduino IDE
  6. Condiciones ambientales min……………………….….-40°
  7. Condiciones ambientales max…………………..……….150°
  8. Dimensiones……………………………………………………….85x65mm
  9.  Empotrable………………………………….……………………Sí
  10. Programación directa (PC-Tarjeta electrónica)…………Sí
CREACIÓN DE LA TARJETA PCB
LISTA DE MATERIALES
Categoría Cantidad Referencias Valor PCB Package DATASHEET
Condensadores 28 C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,
C13,C14,C15,C16,C17,C22,C23,C24,C25,
C26,C27,C28,C34,C35,C36,C37
100nF 0603_CAP  (see & buy)
Condensadores 1 C18 470uF CAP SMD 10.5X10MM ALUMINUM 470UF/35V  (see & buy)
Condensadores 1 C19 220uF CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V  (see & buy)
Condensadores 1 C20 100nF 1206_CAP  (see & buy)
Condensadores 3 C21,C29,C33 1000uF ELEC-RAD25  (see & buy)
Condensadores 4 C30,C31,C32,C38 10uF 1206_CAP  (see & buy)
Resistencias 29 R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,
R13,R14,R15,R16,R28,R45,R48,R51,R53,
R54,R55,R56,R57,R62,R63,R64,R65
10k 0603_RES  (see & buy)
Resistencias 12 R17,R18,R19,R20,R21,R22,R23,R24,R42,
R43,R46,R49
20k 1206_RES  (see & buy)
Resistencias 19 R25,R26,R27,R29,R30,R31,R32,R34,R35,
R36,R37,R44,R47,R50,R52,R66,R67,R68,R69
1k 0603_RES  (see & buy)
Resistencias 1 R33 1M 0603_RES  (see & buy)
Resistencias 4 R38,R39,R40,R41 4.7k 0603_RES  (see & buy)
Resistencias 4 R58,R59,R60,R61 220 0603_RES  (see & buy)
Integrados 2 U1,U2 74HC14 TSSOP14  (see & buy)
Integrados 2 U3,U16 74HC541 TSSOP20  (see & buy)
Integrados 8 U4,U5,U6,U7,U12,U13,U14,U15 ILD207T SO8  (see & buy)
Integrados 1 U9 LM2576-5,0 TO170P1410X464-6  (see & buy)
Integrados 1 U10 ATMEGA328P QFP80P900X900X120-32  (see & buy)
Integrados 1 U11 CH340C SO16  (see & buy)
Transistores 4 Q1,Q2,Q3,Q4 PMBT3904,215 SOT23-3  (see & buy)
Diodos 12 D1,D3,D4,D8,D9,D10,D11,D12,D22,D23,
D24,D25
LED-GREEN LEDC1608X60  (see & buy)
Diodos 4 D2,D5,D6,D17 B330A-13-F DIOM5226X230N  (see & buy)
Diodos 5 D7,D13,D14,D15,D16 LED-RED LEDC2012X120  (see & buy)
Diodos 4 D18,D19,D20,D21 1N4148W SOD123  (see & buy)
Miscelánea 1 BTN1 RST BUTTON SMD 2P  (see & buy)
Miscelánea 1 F1 1A FUSE SMD  (see & buy)
Miscelánea 5 J1,J2,J3,J4,J9 TBLOCK-M2 TERMINAL BLOCK 2P  (see & buy)
Miscelánea 4 J5,J6,J7,J8 TBLOCK-M3 TERMINAL BLOCK 3P  (see & buy)
Miscelánea 1 J10 MICRO USB B MICRO USB B  (see & buy)
Miscelánea 1 L1 100u INDUCTOR 100UH  (see & buy)
Miscelánea 4 RL1,RL2,RL3,RL4 HF49FD/012-1H12G RELAY24VPLC V1  (see & buy)
Miscelánea 1 X1 CRYSTAL SMD S OSCILADOR SMD  (see & buy)
PARTES DE LA TARJETA ELECTRÓNICA
COMO SUBIR GESTOR DE ARRANQUE
PASO 1 : SUBIR GESTOR DE ARRANQUE (BOOTLOADER)

Para poder usar un microcontrolador nuevo (atmega328P-AU), es necesario subir un un gestor de arranque como también llamado “BOOTLOADER”, esto nos facilitará subir programas en futuras ocasiones.

finalmente para quemar el bootloader se tendrá que realizar a través de los pines ICSP, que prácticamente serían los pines [ (MOSI=11) (MISO = PIN12) (SCK=PIN13) (Slave=PIN10) ].  Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – TARJETA DE CONTROL).

PASO 2 : SUBIR PROGRAMA; PC – TARJETA PCB

Después de haber subido el gestor de arranque finalmente ya podremos subir cualquier programa como normalmente lo realizamos a través del puerto serie.

CONEXIONES CON DISPOSITIVOS EXTERNOS
CODIGO ARDUINO
CODE PARA 3 PISOS
//physical  inputs
const int s1a = 3;
const int s2a = 4;
const int s3a = 13;
const int s4a = 9;
const int s5a = 8;
const int s6a = 7;
const int b1a = 12;
const int b2a = 11;
const int b3a = 10;
const int b4a = 6;
const int b5a = 5;
const int b6a = 2;

// physical outputs
const int m_up = 19;      //motor up
const int m_down = 18;    // motor down
const int booking = 17;   // reserva
const int booking1 = 16;  // reserva

// Memories
//ETAPA
boolean e0 = false;
boolean e1 = false;
boolean e2 = false;
boolean e3 = false;
boolean e4 = false;
boolean e5 = false;
boolean e6 = false;

//TRANSITION
boolean t01 = false;
boolean t02 = false;
boolean t03 = false;
boolean t04 = false;
boolean t05 = false;
boolean t06 = false;
boolean t10 = false;
boolean t20 = false;
boolean t30 = false;
boolean t40 = false;
boolean t50 = false;
boolean t60 = false;

void setup() {
  //sensores de piso
  pinMode(s1a, INPUT);
  pinMode(s2a, INPUT);
  pinMode(s3a, INPUT);
  pinMode(s4a, INPUT);
  pinMode(s5a, INPUT);
  pinMode(s6a, INPUT);
  //pusadores de llamada
  pinMode(b1a, INPUT);
  pinMode(b2a, INPUT);
  pinMode(b3a, INPUT);
  pinMode(b4a, INPUT);
  pinMode(b5a, INPUT);
  pinMode(b6a, INPUT);

  //salidas motor
  pinMode(m_up, OUTPUT);
  pinMode(m_down, OUTPUT);
  pinMode(booking, OUTPUT);
  pinMode(booking1, OUTPUT);
  //ouputs low!
  digitalWrite(m_up, 0);
  digitalWrite(m_down, 0);
  digitalWrite(booking, 0);
  digitalWrite(booking1, 0);
  delay(2000);

}

void loop() {
  //Inputs
  int s1 = digitalRead(s1a);
  int s2 = digitalRead(s2a);
  int s3 = digitalRead(s3a);
  int s4 = digitalRead(s4a);
  int s5 = digitalRead(s5a);
  int s6 = digitalRead(s6a);
  int b1 = digitalRead(b1a);
  int b2 = digitalRead(b2a);
  int b3 = digitalRead(b3a);
  int b4 = digitalRead(b4a);
  int b5 = digitalRead(b5a);
  int b6 = digitalRead(b6a);

  //INICIALIZACION***************************
  if ((!e1 && !e2 && !e3 && !e4 && !e5 && !e6) == true) {
    e0 = true;
  }
  //TRANSITION*********************************
  //from 1 to 2 floor
  if (e0 && s1 && b2 == true) {
    t01 = true;
    t10 = false;
  }
  if (e1 && s2 == true) {
    t10 = true;
    t01 = false;
  }
  //from 1 to 3 floor
  if (e0 && s1 && b3 == true) {
    t02 = true;
    t20 = false;
  }
  if (e2 && s3 == true) {
    t20 = true;
    t02 = false;
  }
  //from 2 to 3 floor
  if (e0 && s2 && b3 == true) {
    t03 = true;
    t30 = false;
  }
  if (e3 && s3 == true) {
    t30 = true;
    t03 = false;
  }
  //from 3 to 2 floor
  if (e0 && s3 && b2 == true) {
    t04 = true;
    t40 = false;
  }
  if (e4 && s2 == true) {
    t40 = true;
    t04 = false;
  }
  //from 3 to 1 floor
  if (e0 && s3 && b1 == true) {
    t05 = true;
    t50 = false;
  }
  if (e5 && s1 == true) {
    t50 = true;
    t05 = false;
  }
  //from 2 to 1 floor
  if (e0 && s2 && b1 == true) {
    t06 = true;
    t60 = false;
  }
  if (e6 && s1 == true) {
    t60 = true;
    t06 = false;
  }

  //ETAPA**************************************
  if (e0 && t01 == true) {
    e0 = false;
    e1 = true;
  }
  if (e1 && t10 == true) {
    e1 = false;
    e0 = true;
  }

  if (e0 && t02 == true) {
    e0 = false;
    e2 = true;
  }
  if (e2 && t20 == true) {
    e2 = false;
    e0 = true;
  }

  if (e0 && t03 == true) {
    e0 = false;
    e3 = true;
  }
  if (e3 && t30 == true) {
    e3 = false;
    e0 = true;
  }

  if (e0 && t04 == true) {
    e0 = false;
    e4 = true;
  }
  if (e4 && t40 == true) {
    e4 = false;
    e0 = true;
  }

  if (e0 && t05 == true) {
    e0 = false;
    e5 = true;
  }
  if (e5 && t50 == true) {
    e5 = false;
    e0 = true;
  }

  if (e0 && t06 == true) {
    e0 = false;
    e6 = true;
  }
  if (e6 && t60 == true) {
    e6 = false;
    e0 = true;
  }

  //ACTUADORES*********************************
  // Motor subiendo
  if (e1 || e2 || e3 == true) {
    digitalWrite(m_up, HIGH);
    digitalWrite(m_down, LOW);
  }
  //Reposo
  if (e0 == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, LOW);
  }
  //motor bajando
  if (e4 || e5 || e6 == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, HIGH);
  }
}
PARA 4 PISOS
//physical  inputs
const int s1a = 3;
const int s2a = 4;
const int s3a = 13;
const int s4a = 12;
const int b1a = 11;
const int b2a = 10;
const int b3a = 9;
const int b4a = 8;
const int fi1 = 7;
const int pe1 = 6;
const int fs1 = 5;
const int rsv = 2;

// physical outputs
const int m_up = 19;      //motor up
const int m_down = 18;    // motor down
const int booking = 17;   // reserva
const int booking1 = 16;  // reserva

// Memories
//ETAPA
boolean e0 = false;
boolean e1 = false;
boolean e2 = false;
boolean e3 = false;
boolean e4 = false;
boolean e5 = false;
boolean e6 = false;
boolean e7 = false;
boolean e8 = false;
boolean e9 = false;
boolean e10 = false;
boolean e11 = false;
boolean e12 = false;

//TRANSITION
boolean t01 = false;
boolean t02 = false;
boolean t03 = false;
boolean t04 = false;
boolean t05 = false;
boolean t06 = false;
boolean t07 = false;
boolean t08 = false;
boolean t09 = false;
boolean t010 = false;
boolean t011 = false;
boolean t012 = false;
boolean t10 = false;
boolean t20 = false;
boolean t30 = false;
boolean t40 = false;
boolean t50 = false;
boolean t60 = false;
boolean t70 = false;
boolean t80 = false;
boolean t90 = false;
boolean t100 = false;
boolean t110 = false;
boolean t120 = false;

void setup() {
  //sensores de piso
  pinMode(s1a, INPUT);
  pinMode(s2a, INPUT);
  pinMode(s3a, INPUT);
  pinMode(s4a, INPUT);

  //pusadores de llamada
  pinMode(b1a, INPUT);
  pinMode(b2a, INPUT);
  pinMode(b3a, INPUT);
  pinMode(b4a, INPUT);

  pinMode(fi1, INPUT);
  pinMode(pe1, INPUT);
  pinMode(fs1, INPUT);

  pinMode(rsv, INPUT);

  //salidas motor
  pinMode(m_up, OUTPUT);
  pinMode(m_down, OUTPUT);
  pinMode(booking, OUTPUT);
  pinMode(booking1, OUTPUT);
  //ouputs low!
  digitalWrite(m_up, 0);
  digitalWrite(m_down, 0);
  digitalWrite(booking, 0);
  digitalWrite(booking1, 0);
  delay(2000);

}

void loop() {
  //Inputs
  int s1 = digitalRead(s1a);
  int s2 = digitalRead(s2a);
  int s3 = digitalRead(s3a);
  int s4 = digitalRead(s4a);
  int b1 = digitalRead(b1a);
  int b2 = digitalRead(b2a);
  int b3 = digitalRead(b3a);
  int b4 = digitalRead(b4a);
  int fi = digitalRead(fi1);
  int pe = digitalRead(pe1);
  int fs = digitalRead(fs1);
  int sv = digitalRead(rsv);

  //INICIALIZACION***************************
  if ((!e1 && !e2 && !e3 && !e4 && !e5 && !e6 && !e7 && !e8 && !e9 && !e10 && !e11 && !e12) == true) {
    e0 = true;
  }
  //TRANSITION*********************************
  //from 1 to 2 floor
  if (e0 && s1 && b2 == true) {
    t01 = true;
    t10 = false;
  }
  if (e1 && s2 == true) {
    t10 = true;
    t01 = false;
  }
  //from 1 to 3 floor
  if (e0 && s1 && b3 == true) {
    t02 = true;
    t20 = false;
  }
  if (e2 && s3 == true) {
    t20 = true;
    t02 = false;
  }
  //from 1 to 4 floor
  if (e0 && s1 && b4 == true) {
    t03 = true;
    t30 = false;
  }
  if (e3 && s4 == true) {
    t30 = true;
    t03 = false;
  }
  //from 2 to 3 floor
  if (e0 && s2 && b3 == true) {
    t04 = true;
    t40 = false;
  }
  if (e4 && s3 == true) {
    t40 = true;
    t04 = false;
  }
  //from 2 to 4 floor
  if (e0 && s2 && b4 == true) {
    t05 = true;
    t50 = false;
  }
  if (e5 && s4 == true) {
    t50 = true;
    t05 = false;
  }
  //from 3 to 4 floor
  if (e0 && s3 && b4 == true) {
    t06 = true;
    t60 = false;
  }
  if (e6 && s4 == true) {
    t60 = true;
    t06 = false;
  }
  //from 4 to 3 floor
  if (e0 && s4 && b3 == true) {
    t07 = true;
    t70 = false;
  }
  if (e7 && s3 == true) {
    t70 = true;
    t07 = false;
  }
  //from 4 to 2 floor
  if (e0 && s4 && b2 == true) {
    t08 = true;
    t80 = false;
  }
  if (e8 && s2 == true) {
    t80 = true;
    t08 = false;
  }
  //from 4 to 1 floor
  if (e0 && s4 && b1 == true) {
    t09 = true;
    t90 = false;
  }
  if (e9 && s1 == true) {
    t90 = true;
    t09 = false;
  }
  //from 3 to 2 floor
  if (e0 && s3 && b2 == true) {
    t010 = true;
    t100 = false;
  }
  if (e10 && s2 == true) {
    t100 = true;
    t010 = false;
  }
  //from 3 to 1 floor
  if (e0 && s3 && b1 == true) {
    t011 = true;
    t110 = false;
  }
  if (e11 && s1 == true) {
    t110 = true;
    t011 = false;
  }
  //from 2 to 1 floor
  if (e0 && s2 && b1 == true) {
    t012 = true;
    t120 = false;
  }
  if (e12 && s1 == true) {
    t120 = true;
    t012 = false;
  }

  //ETAPA**************************************
  if (e0 && t01 == true) {
    e0 = false;
    e1 = true;
  }
  if (e1 && t10 == true) {
    e1 = false;
    e0 = true;
  }

  if (e0 && t02 == true) {
    e0 = false;
    e2 = true;
  }
  if (e2 && t20 == true) {
    e2 = false;
    e0 = true;
  }

  if (e0 && t03 == true) {
    e0 = false;
    e3 = true;
  }
  if (e3 && t30 == true) {
    e3 = false;
    e0 = true;
  }

  if (e0 && t04 == true) {
    e0 = false;
    e4 = true;
  }
  if (e4 && t40 == true) {
    e4 = false;
    e0 = true;
  }

  if (e0 && t05 == true) {
    e0 = false;
    e5 = true;
  }
  if (e5 && t50 == true) {
    e5 = false;
    e0 = true;
  }

  if (e0 && t06 == true) {
    e0 = false;
    e6 = true;
  }
  if (e6 && t60 == true) {
    e6 = false;
    e0 = true;
  }

  if (e0 && t07 == true) {
    e0 = false;
    e7 = true;
  }
  if (e7 && t70 == true) {
    e7 = false;
    e0 = true;
  }

  if (e0 && t08 == true) {
    e0 = false;
    e8 = true;
  }
  if (e8 && t80 == true) {
    e8 = false;
    e0 = true;
  }

  if (e0 && t09 == true) {
    e0 = false;
    e9 = true;
  }
  if (e9 && t90 == true) {
    e9 = false;
    e0 = true;
  }

  if (e0 && t010 == true) {
    e0 = false;
    e10 = true;
  }
  if (e10 && t100 == true) {
    e10 = false;
    e0 = true;
  }

  if (e0 && t011 == true) {
    e0 = false;
    e11 = true;
  }
  if (e11 && t110 == true) {
    e11 = false;
    e0 = true;
  }

  if (e0 && t012 == true) {
    e0 = false;
    e12 = true;
  }
  if (e12 && t120 == true) {
    e12 = false;
    e0 = true;
  }

  //ACTUADORES*********************************
  // Motor subiendo
  if ((e1 || e2 || e3 || e4 || e5 || e6) && (pe && fi && fs) == true) {
    digitalWrite(m_up, HIGH);
    digitalWrite(m_down, LOW);
  }
  //Reposo
  if (e0 || (!pe || !fi || !fs) == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, LOW);
  }
  //motor bajando
  if ((e7 || e8 || e9 || e10 || e11 || e12) && (pe && fi && fs) == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, HIGH);
  }
}
VIDEO
Salir de la versión móvil