Icono del sitio ELECTROALL

como HACER un ASCENSOR DE 4 PISOS con ARDUINO

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub

Este es la 2da versión del proyecto de ascensores que venimos desarrollando. Como toda versión superior trae mejoras,  y esta vez hemos agregado displays de 7 segmentos en cada piso para visualizar donde se encuentra exactamente la cabina. Te gustaría aprender a como desarrollar el esquemático electrónico, el diseño pcb y el armado de la maqueta? a continuación el paso a paso de como realizar el proyecto.

VEA LA V1 aqui!

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

PASO 1 : SUBIR GESTOR DE ARRANQUE (BOOTLOADER)

Para poder usar un microcontrolador nuevo (atmega328p-U), es necesario subir 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 ISP, 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 – PLC V4.1).

DESCARGAR CÓDIGO BOOTLOADER

VIDEO DE COMO SUBIR BOOTLOADER

PASO 2 : SUBIR PROGRAMA; PC – PLC V4.1 

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

PARTES EXTERNAS PCB
CONEXIONES CON DISPOSITIVOS EXTERNOS
DIAGRAMA DE FLUJO GRAFCET
CODIGO ARDUINO
int clockpin = 13; //Cuando ay que leer los bit      SH
int data     = 11;   //Envio datos                     DS
int latch    = 12;  //indica pin de salida en el chip ST

int contadorU;

const int NUM[] = { // display
  202,   //NUM 0 en binario es : 11000000
  249,   //NUM 1 en binario es : 11111001
  164,   //NUM 2 en binario es : 10100100
  176,   //NUM 3 en binario es : 10110000
  153,   //NUM 4 en binario es : 10011001
  146,   //NUM 5 en binario es : 10010010
  130,   //NUM 6 en binario es : 10000010
  248,   //NUM 7 en binario es : 11111000
  128,   //NUM 8 en binario es : 10000000
  144,   //NUM 9 en binario es : 10010000
  202,   //NUM 0 en binario es : 11000000

  227,   //NUM 0 en binario es : 11100011  puerta bajando, para posicion inicial

};

//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 pe = 5;
const int fc = 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() {

  pinMode(latch, OUTPUT);
  pinMode(clockpin, OUTPUT);
  pinMode(data, OUTPUT);

  //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(fc, INPUT);
  pinMode(pe, INPUT);

  //salidas motor
  pinMode(m_up, OUTPUT);
  pinMode(m_down, OUTPUT);
  pinMode(booking, OUTPUT);
  pinMode(booking1, OUTPUT);
  delay(2000);
  while (!digitalRead(s1a) && !digitalRead(s2a) && !digitalRead(s3a) && !digitalRead(s4a) == HIGH) {
    digitalWrite(m_down, 1);
    digitalWrite(latch, LOW);
    shiftOut(data, clockpin, MSBFIRST, NUM[11]); // lee el arreglo y pasa cada NUM a lectura binaria
    digitalWrite(latch, HIGH);
  }

  //ouputs low!
  digitalWrite(m_up, 0);
  digitalWrite(m_down, 0);
  digitalWrite(booking, 0);
  digitalWrite(booking1, 0);

}

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 pee = digitalRead(pe);
  int fcc = digitalRead(fc);

  //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) && (!pee && !fcc) == true ) {
    digitalWrite(m_up, HIGH);
    digitalWrite(m_down, LOW);

  }
  //Reposo
  if (e0 || (pee || fcc) == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, LOW);
  }
  //motor bajando
  if ((e7 || e8 || e9 || e10 || e11 || e12) && (!pee && !fcc) == true) {
    digitalWrite(m_up, LOW);
    digitalWrite(m_down, HIGH);
  }

  if (s1 == 1) {
    contadorU = 1;
    cont();
  }
  if (s2 == 1) {
    contadorU = 2;
    cont();
  }
  if (s3 == 1) {
    contadorU = 3;
    cont();
  }
  if (s4 == 1) {
    contadorU = 4;
    cont();
  }
}

void cont() {
  digitalWrite(latch, LOW);
  shiftOut(data, clockpin, MSBFIRST, NUM[contadorU]); // lee el arreglo y pasa cada NUM a lectura binaria
  digitalWrite(latch, HIGH);
}
FOTOS
VIDEOS RELACIONADOS
DE ESTE PROYECTO
FUNCIONAMIENTO 74HC595
COMO SUBIR BOOTLOADER
ASCENSOR V1
YouTube
YouTube
Instagram
Instagram
GitHub
GitHub
Salir de la versión móvil