Cinta Transportadora Arduino

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 35

INFORMATICA II

Proyecto Final

Carrera: Ingeniería electrónica


Proyecto: Automatización cinta transportadora
Año: 2017

1
INDICE:
 Pagina 3: Etapa I: Definición del proyecto
 Pagina 4: Etapa II: Disposición de dispositivos de campo
 Pagina 5: Etapa III: Especificación y selección del controlador
 Pagina 7: Etapa IV: Especificación y selección de dispositivos de campo
 Pagina 12: Etapa V: Programación de software y firmware
 Pagina 34: Etapa VI: Montaje y documentación del prototipo

2
1) Etapa I: Definición del proyecto

 Problemas y necesidades:

a) Identificación del problema a solucionar

b) Definición de materiales para construir maqueta.

c) Definición de sensores, componentes a utilizar y sus cantidades.

 Descripción del proyecto:

El problema en nuestro caso surge a partir de la necesidad de separar


productos en una industria en base a su tamaño.

Para solucionarlo construiremos una cinta transportadora que seleccione


estos productos identificando su tamaño mediante sensores infrarrojos
ubicados a diferentes alturas y en diferentes posiciones.

El sistema transportara dos tipos de productos A y B.


Los productos de tipo B se rechazaran debido a tener un tamaño defectuoso
o mayor al deseado, serán idenficador por el sensor B el cual activara un
sistema de rechazo movido mediante un servo.
Los productos de tipo A seguirán su camino hacia el final de la cinta donde
serán identificados por el sensor para productos A, el cual los contara y
determinara cuando hay un lote lleno de los mismos.

3
 Esquema del proceso:

2) Etapa II: Disposición general de dispositivos de campo

En principio la cinta será movida por un motor de 12v EM-534, el mismo


estará alimentado por una fuente externa y su velocidad será controlada por
un módulo variador de velocidad PWM.
El sistema que controle el proceso de producción estará compuesto por dos
módulos sensores de infrarrojos IR FC-51 y un servo TowerPro SG90.
El modulo infrarrojo para productos de tipo A identificara los productos que
lleguen al final de la línea, llevara una cuenta de los mismos y nos informara
en caso de que el lote este completo.
El trabajo del módulo infrarrojo B será el de identificar los productos cuales
su tamaño no sea el adecuado para el almacenamiento, el mismo estará
conectado a un servo el cual activara una compuerta de rechazo cada vez que
el sensor reconozca un defecto en la producción.

 El sistema consta de las siguientes E/S digitales:

4
1 salida digital modulo sensor infrarrojo A
1 salida digital modulo sensor infrarrojo B
1 salida digital servo TowerPro sg90

 Software y planteo de interfaz grafica

La interfaz gráfica será una aplicación programada en Dev C++.

Esta interfaz será una ventana interactiva e informativa, la cual nos dará
como opción encender o apagar la cinta transportadora, y además nos dará
los datos del conteo de productos almacenados o en su defecto nos indicara
en el caso de que un producto fuese rechazado.

3) Etapa III: Especificación y selección del controlador

En nuestro proyecto utilizaremos la placa Arduino MEGA 2560.


Arduino Mega 2560 es una versión ampliada de la tarjeta original de Arduino
y está basada en el micro controlador Atmega2560.
Dispone de 54 entradas/salidas digitales, 14 de las cuales se pueden utilizar
como salidas PWM (modulación de anchura de pulso). Además dispone de 16
entradas analógicas, 4 UARTs (puertas series), un oscilador de 16MHz, una
conexión USB, un conector de alimentación, un conector ICSP y un pulsador
para el reset. Para empezar a utilizar la placa sólo es necesario conectarla al
ordenador a través de un cable USB, o alimentarla con un adaptador de
corriente AC/DC. También, para empezar, puede alimentarse mediante una
batería.

Las características principales son:

-Microprocesador ATmega2560
-Tensión de alimentación (recomendado) 7-12V
-Integra regulación y estabilización de +5Vcc
-54 líneas de Entradas/Salidas Digitales (14 de ellas se pueden utilizar
como salidas PWM)

5
-16 Entradas Analógicas
-Máxima corriente continúa para las entradas: 40 mA
-Salida de alimentación a 3.3V con 50 mA
-Memoria de programa de 256Kb (el bootloader ocupa 8Kb)
-Memoria SRAM de 8Kb para datos y variables del programa
-Memoria EEPROM para datos y variables no volátiles
-Velocidad del reloj de trabajo de 16MHz
-Reducidas dimensiones de 100 x 50 mm

 Documentación de compra:

6
Arduino Mega 2560 R3 16au Domótica Y Robótica Mejor Precio
Cantidad: 1
$ 333,00 c/u

Envío
Acuérdalo con el vendedor.

Pago
Pagar en efectivo con Rapipago
Producto $ 333,00
Total: $ 333,00

4) Etapa IV: Especificación y Selección de dispositivos de campo

El proyecto de cinta transportadora incluye a los siguientes dispositivos de


campo:

 Motor EM-534 JEI-1040012. OME-14230G/A

Datasheet:
-45 mm de largo (sin contar el eje)
-15 mm de largo ( lo que sobresale del eje )
-30 mm de diámetro
-21 mm de distancia entre los tornillos de anclaje.

-Potencia: DC 12V
-Static current: = 10mA
-Current:50~200mA
-Frequency: 315MHz
-Channels: 2
-Contact current: 5A 220VAC/10A 12VDC
-Dimensiones: 70 × 50 × 20mm

7
-Operating temperature: -10 ¿ ~ +50 ¿3)

 Módulo PWM control de velocidad para motores de CC

- 6v – 28v
- 3A

 Modulo detector sensor de obstáculos infrarrojo Arduino Pic × 2

-Especificaciones técnicas
-Número de modelo: FC-51

8
-Ángulo de detección: 35 °
-Voltaje de funcionamiento: 3.0V - 6.0V
-Alcance de detección: 2cm - 30cm (ajustable usando el potenciómetro)
- Pcb tamaño: 3.1 cm (L) x 1.4 cm (W)
-Dimensión total: 4.5cm (L) x 1.4 cm (W), 0.7cm (H)
-Nivel de salida activa: Salidas Nivel lógico bajo cuando se detecta un
obstáculo
-Nivel de salida activo: Salidas Nivel lógico alto cuando no se detecta
obstáculo
-Consumo actual:
a 3,3 V: ~ 23 mA
a 5,0 V: ~ 43 mA

Pinouts:

-VCC: clavija de entrada de alimentación de 3.3V-5V


-GND: clavija de alimentación de 0V
-OUT: Pin de salida digital

 Mini servo TowerPro SG 90

Características

9
-Micro Servo Tower-pro
-Velocidad: 0.10 sec/60° a 4.8V
-Torque: 1.8 Kg-cm @ 4.8V
-Voltaje de funcionamiento: 3.0-7.2V
-Temperatura de funcionamiento: -30 ℃ ~ 60 ℃
-Ángulo de rotación: 180°
-Ancho de pulso: 500-2400 µs
-Longitud de cable de conector: 24.5cm

 Fuente externa casera

- 5v a 12v

10
 Documento de compra

Mini Servo Tower Pro Sg90 9g Robótica Arduino Servomotor × 1 $53,00

Modulo Detector Sensor De Obstáculos Infrarrojo Arduino Pic × 2 $110,00

Pwm Control De Velocidad Para Motores Regulador 6v-28v 3a Cc × 1 $145,00

Pack 40 Cables Hembra Hembra 10cm × 1 $35,00

Pack 50 Leds 3mm Rojos Amarillos Verdes Azul Blanco Arduino × 1 $49,00

Kit 220 Resistencias 5% Valores Diversos Ideal Arduino Pack × 1 $66,00

Display Lcd Arduino Pic Arm Nokia 5110 Spi 84x48 Monocromo × 1 $94,00

11
Envió de productos $200

SUBTOTAL: $752

5) Etapa V: Programación de software y firmware

 Programación en ARDUINO:

Diagrama de flujos:

12
Programa en plataforma de ARDUINO:

#include <Servo.h>

int i;
int sensor=9;
int Contador=8;
int conta;
int conta2;
int contat;
int lote;
int control=7;
int dato = 0;
Servo servoMotor;

void setup() {
Serial.begin (9600);
pinMode(control, OUTPUT);
pinMode(Contador,INPUT);
servoMotor.attach(13);
}
void loop() {

if(Serial.available())
{
dato = Serial.read();

if((dato) == '1')
{
//Serial.println("Motor encendido");
digitalWrite(control, HIGH);
}

if((dato) == '0')
{
//Serial.println("Motor apagado");
digitalWrite(control, LOW);
}

if(dato == '1'){

13
if ( digitalRead(Contador) == LOW )
{
//delay(100);

conta ++;
if(conta==5)
{
lote++;
conta=0;
}
contat=conta+conta2+lote*5;
if ( digitalRead(Contador) == HIGH ){
//Incrementa el contador

// delay (200); // Retardo


}

delay(1000);
}

Serial.print("C");
Serial.println(conta);
Serial.print("T");
Serial.println(contat);
Serial.print("L");
Serial.println(lote);

if(digitalRead(sensor) == LOW)
{

delay(500);
servoMotor.write(0);
conta2++;
contat=conta2+conta+lote*5;
delay(200);
}

if(digitalRead(sensor) == HIGH)
{

delay(1000);
servoMotor.write(180);

14
}
Serial.print("G");
Serial.println(conta2);
Serial.print("T");
Serial.println(contat);
}
}

 Programación en DEV C++:

Diagrama de flujos:

Programacion en Dev c++:


#include <iostream>

15
#include <string>

#include <Windows.h>

#include <winbgim.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <time.h>

//using namespace std;

DCB dcb;

DWORD dwEventMask,n;

HANDLE h=CreateFile("COM3",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

char data, texto[200];

int ReadByte();

int BorrCad(char*);

int RecCad(char*);

int cajac=0,total,lote=0,cajag=0,entrada1=0,entrada2=0,ent_old=0;

char A1[50],A2[50],A3[50],A4[50];

FILE *fp;

char T_Fecha[20],T_Hora[10],T_Hoy[25],T_Dia[10],T_Mes[5],T_Anio[5];

int dia_sem,dia,old_dia,mes,anio,hora,min,old_min;

char* dS[7] = {"DOMINGO","LUNES","MARTES","MIERCOLES","JUEVES","VIERNES","SABADO"};

char* dM[13] =
{"","ENERO","FEBRERO","MARZO","ABRIL","MAYO","JUNIO","JULIO","AGOSTO","SEPTIEMBRE","OCTUB
RE","NOVIEMBRE","DICIEMBRE"};

void menu(), mouse(),mouse2(), salir(), ingreso(), volver(), oncinta(), offcinta();

int x, cordx, cordy,j,k;

16
struct tm* tmP;

void update_time(){

time_t tSac = time(NULL);

tmP = localtime(&tSac);

dia=(tmP->tm_mday);

dia_sem=(tmP->tm_wday);

mes=(tmP->tm_mon)+1;

anio=(tmP->tm_year + 1900);

hora=tmP->tm_hour;

min=tmP->tm_min;

sprintf(T_Fecha,"%02d/%02d/%d", dia, mes, anio);

sprintf(T_Hora,"%02d:%02d", hora, min);

sprintf(T_Dia,"%s", dS[dia_sem]);

sprintf(T_Hoy,"%02d DE %s", dia, dM[mes]);

sprintf(T_Mes,"%02d", mes);

sprintf(T_Anio,"%d", anio);

void bienvenida()

setfillstyle(1,0);

bar(0,0,800,600);

setfillstyle(1,COLOR(200,100,5));

bar(1,1,799,599);

delay(1000);

setfillstyle(1,0);

17
bar(0,0,800,600);

setfillstyle(1,COLOR(200,100,5));

bar(1,1,799,599);

setfillstyle(1,0);

setbkcolor(COLOR(200,100,5));

settextstyle(1,0,5);

setcolor(0);

outtextxy(220,75,"Bienvenido");

delay(1000);

setfillstyle(1,0);

setbkcolor(COLOR(200,100,5));

settextstyle(1,0,5);

setcolor(0);

outtextxy(360,200,"a");

delay(1000);

setfillstyle(1,0);

setbkcolor(COLOR(200,100,5));

settextstyle(1,0,4);

setcolor(0);

outtextxy(80,350,"S");

delay(200);

outtextxy(115,350,"0");

delay(200);

outtextxy(150,350,"R");

delay(200);

outtextxy(190,350,"T");

18
delay(200);

outtextxy(225,350,"I");

delay(200);

outtextxy(255,350,"N");

delay(200);

outtextxy(300,350,"G");

delay(200);

outtextxy(405,350,"C");

delay(200);

outtextxy(447,350,"O");

delay(200);

outtextxy(487,350,"N");

delay(200);

outtextxy(527,350,"V");

delay(200);

outtextxy(567,350,"E");

delay(200);

outtextxy(607,350,"Y");

delay(200);

outtextxy(647,350,"O");

delay(200);

outtextxy(687,350,"R");

delay(200);

19
void menu()

{ setfillstyle(1,0);

bar(0,0,800,600);

setfillstyle(1,COLOR(200,100,5));

bar(1,1,799,599);

setfillstyle(1,0);

setbkcolor(COLOR(200,100,5));

settextstyle(1,0,3);

setcolor(0);

outtextxy(200,75,"SORTING CONVEYOR");

setfillstyle(1,0);

bar(220,260,600,330);

setfillstyle(1,COLOR(0,120,0));

bar(221,261,599,329);

setbkcolor(COLOR(0,120,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(240,280,"INGRESO AL SISTEMA");

setfillstyle(1,0);

bar(640,50,740,96);

setfillstyle(1,4);

bar(641,51,739,95);

setbkcolor(4);

settextstyle(8,0,3);

outtextxy(653,60,"SALIR");

20
mouse();

void ingreso()

setfillstyle(1,0);

bar(220,260,600,330);

setfillstyle(1,COLOR(0,102,0));

bar(220,260,600,330);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(240,280,"INGRESO AL SISTEMA");

delay(200);

setfillstyle(1,0);

bar(220,260,600,330);

setfillstyle(1,COLOR(0,120,65));

bar(220,260,600,330);

setbkcolor(COLOR(0,120,65));

settextstyle(8,0,4);

setcolor(0);

outtextxy(240,280,"INGRESO AL SISTEMA");

delay(100);

WriteFile(h,"ence", 4, &n, NULL);

21
setfillstyle(1,0);

bar(40,40,750,550);

setfillstyle(1,COLOR(200,190,5));

bar(41,41,749,549);

setfillstyle(1,0);

setbkcolor(COLOR(200,190,5));

settextstyle(1,0,2);

setcolor(0);

outtextxy(225,64,"CONTROL CONVEYOR");

setfillstyle(1,0);

bar(50,130,400,200);

setfillstyle(1,COLOR(0,102,0));

bar(51,131,399,199);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(90,150,"ENCENDER CINTA");

setfillstyle(1,0);

bar(410,130,740,200);

setfillstyle(1,COLOR(0,102,0));

bar(411,131,739,199);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(460,150,"APAGAR CINTA");

22
setfillstyle(1,0);

bar(400,279,475,317);

setfillstyle(1,COLOR(0,102,0));

bar(401,280,474,316);

setfillstyle(1,0);

setbkcolor(COLOR(200,190,5));

settextstyle(3,0,4);

setcolor(0);

outtextxy(50,280,"Cajas Erroneas:");

setfillstyle(1,0);

bar(400,339,475,377);

setfillstyle(1,COLOR(0,102,0));

bar(401,340,474,376);

setfillstyle(1,0);

setbkcolor(COLOR(200,190,5));

settextstyle(3,0,4);

setcolor(0);

outtextxy(50,340,"Cajas OK:");

setfillstyle(1,0);

bar(400,399,475,437);

setfillstyle(1,COLOR(0,102,0));

bar(401,400,474,436);

setfillstyle(1,0);

setbkcolor(COLOR(200,190,5));

settextstyle(3,0,4);

23
setcolor(0);

outtextxy(50,400,"Total de Cajas:");

setfillstyle(1,0);

bar(400,459,475,497);

setfillstyle(1,COLOR(0,102,0));

bar(401,460,474,496);

setfillstyle(1,0);

setbkcolor(COLOR(200,190,5));

settextstyle(3,0,4);

setcolor(0);

outtextxy(50,460,"Total de Lotes:");

setfillstyle(1,0);

bar(50,50,165,96);

setfillstyle(1,COLOR(0,102,0));

bar(51,51,164,95);

settextstyle(8,0,4);

setbkcolor(COLOR(0,102,0));

outtextxy(66,58,"Atrás");

setfillstyle(1,0);

bar(640,50,740,96);

setfillstyle(1,4);

bar(641,51,739,95);

setbkcolor(4);

settextstyle(8,0,3);

outtextxy(653,60,"SALIR");

24
mouse2();

void volver()

setfillstyle(1,0);

bar(50,50,165,96);

setfillstyle(1,COLOR(0,102,0));

bar(51,51,164,95);

settextstyle(8,0,4);

setbkcolor(COLOR(0,102,0));

outtextxy(66,58,"Atrás");

delay(200);

setfillstyle(1,0);

bar(50,50,165,96);

setfillstyle(1,COLOR(0,120,65));

bar(51,51,164,95);

settextstyle(8,0,4);

setbkcolor(COLOR(0,120,65));

outtextxy(66,58,"Atrás");

menu();

void salir()

25
WriteFile(h,"0", 1, &n, NULL);

update_time();

fp = fopen("Historial.csv","a+");

fprintf(fp,"%s;%s;%i;%i;%i;%i;\n",T_Hoy,T_Hora,cajag,cajac,lote,total);

fclose(fp);

closegraph();

exit(0);

void mouse() //Menu

do

do

getmouseclick(WM_LBUTTONDOWN,cordx,cordy);

if(cordx>640&&cordy>50&&cordx<740&&cordy<96)

salir();

if(cordx>220&&cordy>260&&cordx<600&&cordy<330)

ingreso();

if(kbhit())

x++;

while(x!=100999990);

26
}

while(1);

closegraph();

void mouse2() //Ingreso al sistema

do

{ do{

data=ReadByte();

setfillstyle(1,0);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

if(data=='C'){

RecCad(texto);

cajac=atoi(texto);

BorrCad(texto);

sprintf(A1,"%i",cajac);

outtextxy(427,340,A1);

if(data=='G'){

RecCad(texto);

cajag=atoi(texto);

BorrCad(texto);

sprintf(A2,"%i",cajag);

outtextxy(427,280,A2);

27
}

if(data=='T'){

RecCad(texto);

total=atoi(texto);

BorrCad(texto);

sprintf(A3,"%i",total);

outtextxy(427,400,A3);

if(data=='L'){

RecCad(texto);

lote=atoi(texto);

BorrCad(texto);

sprintf(A4,"%i",lote);

outtextxy(427,460,A4);

getmouseclick(WM_LBUTTONDOWN,cordx,cordy);

if(cordx>640&&cordy>50&&cordx<740&&cordy<96)

salir();

if(cordx>50&&cordy>130&&cordx<400&&cordy<200)

oncinta();

if(cordx>410&&cordy>130&&cordx<740&&cordy<200)

offcinta();

if(cordx>50&&cordy>50&&cordx<165&&cordy<96)

volver();

if(kbhit())

28
x++;

while(x!=100999990);

while(1);

closegraph();

void oncinta()

setfillstyle(1,0);

bar(50,130,400,200);

setfillstyle(1,COLOR(0,102,0));

bar(51,131,399,199);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(90,150,"ENCENDER CINTA");

delay(200);

setfillstyle(1,0);

bar(50,130,400,200);

setfillstyle(1,COLOR(0,120,65));

bar(51,131,399,199);

setbkcolor(COLOR(0,120,65));

settextstyle(8,0,4);

setcolor(0);

outtextxy(90,150,"ENCENDER CINTA");

29
WriteFile(h,"1", 1, &n, NULL);

void offcinta()

setfillstyle(1,0);

bar(410,130,740,200);

setfillstyle(1,COLOR(0,102,0));

bar(411,131,739,199);

setbkcolor(COLOR(0,102,0));

settextstyle(8,0,4);

setcolor(0);

outtextxy(460,150,"APAGAR CINTA");

delay(200);

setfillstyle(1,0);

bar(410,130,740,200);

setfillstyle(1,COLOR(0,120,65));

bar(411,131,739,199);

setbkcolor(COLOR(0,120,65));

settextstyle(8,0,4);

setcolor(0);

outtextxy(460,150,"APAGAR CINTA");

WriteFile(h,"0", 1, &n, NULL);

mouse2();

30
main()

initwindow(800,600);

bienvenida();

delay(2000);

if(h==INVALID_HANDLE_VALUE)

{ /*ocurrio un error al intentar abrir el puerto

*/

/* obtenemos la configuracion actual */

if(! GetCommState(h, &dcb))

{/* error: no se puede obtener la configuracion

*/

/* Configuramos el puerto */

dcb.BaudRate = CBR_9600; //9600 Baud

dcb.ByteSize = 8; //8 data bits

dcb.Parity = NOPARITY; //no parity

dcb.StopBits = ONESTOPBIT; //1 stop

COMMTIMEOUTS timeouts; //Comando para establecer la espera al leer el puerto

timeouts.ReadIntervalTimeout = 50;

timeouts.ReadTotalTimeoutMultiplier = 50;

timeouts.ReadTotalTimeoutConstant = 50;

timeouts.WriteTotalTimeoutMultiplier = 50;

31
timeouts.WriteTotalTimeoutConstant = 10;

SetCommTimeouts(h, &timeouts); /* Establecemos la nueva configuracion */

if(!SetCommState(h, &dcb))

/* Error al configurar el puerto */

/* Para que WaitCommEvent espere el evento RXCHAR */

SetCommMask(h, EV_RXCHAR);

menu();}

int BorrCad(char* text){

for(j=0;j<strlen(text);j++){

text[j]='\0';

int RecCad(char* text){

k=0;

do{

data=ReadByte();

texto[k]=data;

k++;

}while(data!=13);

int ReadByte(){

int Val;

BYTE Byte;

DWORD dwBytesTransferred;

32
DWORD dwCommModemStatus;

if (!GetCommState(h,&dcb))

return 0;

SetCommMask (h, EV_RXCHAR | EV_ERR);

ReadFile (h, &Byte, 1, &dwBytesTransferred, 0);

Val = Byte;

return Val;

6) Etapa VI: Montaje y documentación del prototipo

Listado de materiales:

 Perfiles C x 2 de 50 cm
 Perfil L x 4 de 5 cm
 Eje de 5 mm de diámetro x 3, de 10 cm cada uno.
 Rodamiento HCH 658 zz X 6
 Banda de goma eva de 6 cm de ancho por 80 cm de largo
 Materiales electrónicos especificados en la etapa IV

Fotografías y videos del prototipo:

33
34
35

También podría gustarte