INSTITUTO FEDERAL DE EDUCAÇÃO, CIENCIA E TECNOLOGIA DO MARANHÃO DIRETORIA DE ENSINO SUPERIOR DEPARTAMENTO DE ELETRO-ELETRONICA CURSO DE ENGENHARIA ELÉTRICA

INDUSTRIAL DISCIPLINA: INFORMÁTICA INDUSTRIAL PROF: CLAÚDIO LEÃO TORRES

PROJETO: ESTEIRA CLASSIFICADORA DE CAIXAS

Alexandre Rosa Carvalho – EE0711002-21 Álvaro Meton Sousa Perdigão – EE0711003-21

SÃO LUÍS - MA 2011

ALEXANDRE ROSA CARVALHO ÁLVARO METON SOUSA PERDIGÃO

PROJETO: ESTEIRA CLASSIFICADORA DE CAIXAS

Relatório referente ao Projeto da Disciplina de Informática Industrial do Curso de Engenharia Elétrica Industrial do Instituto Federal de Educação, Ciência e Tecnologia do Maranhão, IFMA, com intuito de obter nota para aprovação na disciplina.

São Luís-MA 2011

Resumo

Este relatório apresentado à disciplina de Informática Industrial aborda o projeto de uma esteira classificadora de caixas. Ele mostra os materiais utilizados para uma montagem em menor escala do processo e detalha os procedimentos tomados por um programa desenvolvido em uma linguagem de programação orientada a objetos. Este projeto consiste em passar caixas por uma esteira para que estas possam ser classificadas em dois tamanhos, pequena ou grande. Ele é iniciado pelo usuário indicando a quantidade de caixas a serem contadas, as caixas passam pela esteira e depois o programa retorna quantas dessas caixas são grandes e quantas são pequenas. Para realizar esta tarefa, será utilizado um sensor infravermelho do controle do vídeo-game Wii da Nintendo, o WiiMote, e como visto anteriormente, um código desenvolvido em uma linguagem de programação orientada a objetos. Após o término da classificação, os dados referentes ao processo recém executado serão salvos em um banco de dados, para que estes possam ser visualizados ou manipulados futuramente caso o usuário tenha necessidade.

Palavras-Chave: Esteira, Classificação, Orientado a objeto, WiiMote, Banco de dados

Abstract

This report presented to the discipline of Industrial Informatics focuses on the design of a classifier belt boxes. It shows the materials used for mounting on a smaller scale of the process and details the procedures taken by a program developed in a programming language object-oriented. This project is to move boxes onto a conveyor so that they can be classified in two sizes, small or large. It is initiated by the user indicating the number of boxes to be counted, the boxes go through the mat and then the program returns how many of these boxes are large and many are small. To accomplish this, an infrared sensor will be used to control video game Nintendo Wii, Wiimote, and as seen above, a code developed in a programming language object-oriented. After the classification, the data for the newly implemented process will be saved in a database, so that they can be viewed or manipulated in the future if the user needs. Keywords: Track, Classification, Object Oriented, WiiMote, Database

Sumário

1. INTRODUÇÃO ...................................................................................................... 6 2. VISÃO GERAL DO PROCESSO .......................................................................... 7 2.1. Deslocamento ................................................................................................... 7 2.2. Leitura ............................................................................................................... 8 2.3 Classificação e Armazenamento ........................................................................ 8 3. CONFECCÇÃO DA ESTEIRA ................................................................................. 9 4. SISTEMA DE LEITURA ......................................................................................... 12 5. CLASSIFICAÇÃO E ARMAZENAMENTO ............................................................. 17 CONCLUSÃO ............................................................................................................ 23 REFERÊNCIA BIBLIOGRÁFICA ............................................................................... 24

6

1. INTRODUÇÃO
Atualmente na indústria muitos processos necessitam de automação, e a base para a automação de um processo é a Informática Industrial, que consiste em aplicar técnicas da informática nos processos produtivos para retirar o homem de atividades repetitivas e cansativas para colocá-lo em atividades pensantes de análise e tomada de decisão. Algumas das técnicas da informática largamente utilizadas em processos industriais são as linguagens orientadas a objeto e os bancos de dados. As linguagens orientadas a objeto se tornaram praticamente padrão devido a sua facilidade de reutilização, que diminui bastante o custo de desenvolvimento e a agregação de código, que pode expandir e muito a funcionalidade de um programa. Já os bancos de dados são vitais para um processo produtivo, pois sendo bem projetados, qualquer informação de qualquer produto produzido a anos pode ser obtida em questão de minutos, a produção de meses pode ser resumida em um relatório em segundos. Conhecendo esses conceitos e tendo como desafio proposto pelo professor a criação de um processo em que variáveis tinham que ser lidas por um sensor e guardadas em um bando de dados para uma posterior verificação foi escolhido um processo de classificação de caixas por tamanhos através de dados vindos de um sensor infravermelho, que deveriam ser analisados e guardados em um banco de dados. No Capítulo 2 teremos uma visão geral do processo, que pode ser resumido em: Deslocamento, Leitura e Classificação e Armazenamento da Informação. O Capítulo 3 mostrará todos os passos e materiais para a confecção da Esteira de Deslocamento. No Capítulo 4 será detalhado o processo de leitura, os dados obtidos pelo sensor e quais os parâmetros adotados para a classificação de uma caixa em grande ou pequena Por fim, no capítulo 5 será exposto o código do Programa Orientado a Objeto que fará a interpretação dos dados vindos do sensor e o armazenamento no Banco de Dados.

7

2. VISÃO GERAL DO PROCESSO
O processo de classificação de caixas pode ser dividido em três etapas: Deslocamento, Classificação e Armazenamento da Informação.

Figura 1 – Visão Geral

2.1. Deslocamento Em qualquer processo produtivo que se tenham várias atividades é necessário com que se faça o produto se deslocar por essas atividades, pode ser um envasamento, uma lavagem, secagem, montagem, pintura e no nosso caso leitura para classificação. Para efetuar a leitura era necessário que as caixas passassem com uma velocidade constante e baixa na frente dos Leds para que pudesse ser identificado quando eles estavam encobertos. Foram feitos vários testes, tanto com tração direta por engrenagens ao eixo de rolamento da esteira quanto transmissão da força por correia. Que foi o método mais adequado. Os materiais e o processo de montagem será completamente apresentado no próximo capítulo.

8

2.2. Leitura Para conseguir identificar o tipo de caixa foi utilizada a câmera infravermelha presente no controle do Nintendo Wii, o WiiMote, juntamente com o software GlovePIE, desenvolvido por Carl Kenner, que é um software completamente gratuito que utiliza uma linguagem não linear com funções próprias e consegue emular joysticks, mouse ou teclado através dos recebido do WiiMote por uma conexão Bluetooth. No Capítulo 4 será mostrado tanto as especificações para a montagem da coluna de leds que servirá de referência para o controle, quando o código que foi desenvolvido no GlovoPIE para emular em teclas os sinais captados pelo controle vindos desses leds e o software utilizado para fazer a comunicação via Bluetooth com o controle do Nintendo Wii. 2.3 Classificação e Armazenamento Nesse ponto do processo que serão aplicados todos os conhecimentos adquiridos na disciplina de Informática Industrial, que será a Programação Orientada a Objeto, que nesse caso foi aplicado à linguagem C++, para a interpretação dos dados vindos dos sensores, que de acordo com os padrões encontrados irá classificar os tipos de caixas e irá armazenar em um arquivo .TXT, formatado de modo que possa ser aberto no Microsoft Excel tendo todas as informações organizadas em células. No Capítulo 5 será exposto todo o código feito em C++ para a interpretação dos padrões obtidos na leitura dos sensores para cada tipo de caixa e a formatação necessária para poder abrir o arquivo .TXT gerado, no Excel.

9

3. CONFECCÇÃO DA ESTEIRA
Material Utilizado

Para a confecção da esteira foram feitos e testados vários projetos até se chegar ao modelo final. Como tração foi escolhido um Motor Elétrico CC retirado de carrinho de controle remoto, juntamente com a redução e os eixos que já vieram no carrinho. O Motor é alimentado por 4,5V (3 pilhas AA), tem em média 7000 rpm com carga máxima, e demanda uma corrente de 70mA.

Figura 2 – Motor CC com redução

Como a velocidade necessitava ser constante por um longo período de tempo, seria inviável a utilização de pilhas para a alimentação do motor, pois iria haver a variação da velocidade de acordo com o descarregamento natural das pilhas. Então foi definida como alimentação para o motor a porta USB do computador de armazenamento, que possui uma tensão constante de 5V e consegue suprir uma corrente de 500mA por porta, o que atende perfeitamente ao caso.

Figura 3 – Identificação dos cabos USB

10

Foi montada uma estrutura de cantoneiras de alumínio fixadas com arrebites nas extremidades com as seguintes dimensões:

Figura 4 – Dimensões da estrutura de alumínio

O material da esteira transportadora foi um grande desafio na confecção da esteira, primeiramente foi testado um elástico de 80mm de largura, porém a relação Tensão X Aderência não foi satisfatória, para se obter uma aderência suficiente entre o elástico e o eixo do motor para se conseguir fazer a transmissão da tração para movimentar o elástico era necessário uma tensão muito grande no elástico, o que acabava sobrecarregando o motor DC que não dava nem a partida. Para a solução do problema foram tomadas duas medidas, primeiro o aumento do diâmetro do eixo do motor para aumentar a área de contato com a esteira e conseqüentemente aumentar a tração transmitida, fixando um cano de PVC de 15mm junto ao eixo e a troca do material da esteira, que foi trocado de elástico por um material plástico, que precisa de menos tensão para obter o mesmo nível de aderência. No primeiro teste com o eixo de tração ligado diretamente na redução a velocidade de deslocamento da caixa não foi satisfatória, pois a velocidade da esteira estava muito alta, impossibilitando tanto a estabilidade da caixa sobre a esteira quanto a leitura no instante da passagem da caixa pelo sensor.

11

Figura 5 – Moto-redutor Para reduzir ainda mais a velocidade da esteira seria necessário modificar o tamanho das engrenagens da redução, porém como não dispúnhamos de outras engrenagens foi decido modificar o sistema de transmissão de tração. Foi acoplada uma roldana de diâmetro 5 cm ao eixo de tração e confeccionada uma correia com fita isolante para transmitir a tração de um eixo secundário para a roldana instalada que por ter um diâmetro muito maior do que o eixo secundário diminuirá bastante o número de rotações por minuto,

conseqüentemente diminuindo a velocidade da esteira.

Figura 6 – Sistema de Correa

Com a alteração feita foi obtida uma velocidade satisfatória, que possibilitou a estabilidade da caixa sobre a esteira e tempo suficiente de passagem no sensor para a leitura correta.

12

4. SISTEMA DE LEITURA
Devido a grande variedades de sensores presentes no controle do vídeogame Nintendo Wii que ele foi escolhido como base para o sistema de classificação das caixas. Além de três acelerômetros, sistema de vibração e alto-falante, ele possui uma câmera infra-vermelha na parte frontal, com uma resolução de 1024x768 pixels e taxa de atualização de 100Hz que consegue detectar até 4 pontos infravermelhos. Os leds que servirão de referência para o controle foram fixados em um palito de picolé com o espaçamento definido de acordo com o tamanho das caixas a serem classificadas. Para alimentação dos leds também foi utilizada outra porta USB do computador, só que para os leds foi utilizado um resistor de 120Ω para limitar a corrente para não ocorrer a queima.

Figura 8 – Dimensões das caixas e leds

A luz emitida pelos led é infra-vermelha, não visível a olho nu, mas com qualquer câmera, inclusive de celular, podemos visualizar se realmente o circuito está funcionando.

13

Figura 9 – Imagem capturada por câmera de celular

Figura 10 – Sistema de leitura

Todas as informações captadas pelo sensor são enviadas para o computador via Bluetooth. O computador reconhece o controle como um HID (Human Interface Device), que é um joystick comum. Para reconhecer o dispositivo é necessária a utilização de um software de gerenciamento de dispositivos Bluetooth, para esse trabalho foi utilizado o BlueSoleil 8.0 na versão para teste, que permite a troca de até 2Mb de dados, mais do que o suficiente para a aplicação, pois os dados enviados pelo controle são muito pequenos. Para poder tratar os dados recebidos pelo sensor e aplicá-los de acordo com a nossa necessidade é necessário outro software, o GloviePIE, que possui uma linguagem própria não linear. A linguagem utilizada pelo software é baseada em eventos, independente da ordem em que o programa é escrito, os eventos acontecem de acordo o pressionamento dos botões no controle.

14

O GlovePIE é um emulador capaz de simular teclado, mouse, joystick, mouse 3D e outros periféricos apenas interpretando os dados vindos do controle WiiMote, justamente a função que é utilizada para esse projeto.

Figura 11 – Interface GlovePIE

O código é muito simples e será comentado a seguir: var.A = WiiMote.dot2vis var.B = WiiMote.dot1vis

Na primeira parte são declaradas as variáveis para poderem ser verificadas no próprio programa e atribuído a elas a função de visibilidade dos leds, que retornam um valor True se o led estiver visível e False se o led não estiver visível.

A = !(WiiMote.dot1vis) B = !(WiiMote.dot2vis)

Na segunda parte são dados os comandos de emulação, com uma sintaxe bem simples e direta o comando é simples, quando o segundo led não estiver visível será pressionada a tecla “B” do teclado e quando o primeiro led não estiver visível será pressionada a tecla “A” do teclado, resultando em uma lógica inversa. O controle não consegue distinguir qual dos dois leds vistos é o primeiro ou o segundo, por default quando um led deixa de estar visível, automaticamente ele é considerado como o segundo led, e quando o próximo led deixar de estar visível é considerado o primeiro.

15

Então quando for bloqueada a visualização de apenas um dos leds, (caso da caixa pequena), será pressionada a tecla “B”. Quando os dois leds tiverem a visualização bloqueada será pressionada a tecla “A”. Como teste foi utilizado o Microsoft Word 2010 para verificar os padrões criados pela emulação do teclado, obtendo-se o seguinte resultado:

Passagem de Caixa Pequena Bbbbbb Bbbbbbb bbbbbb bbbbbbbbbb bbbbbb bbbb bbbbbbb bbbbbbbb bbbbbb bbbbbbb bbbbb

Passagem de Caixa Grande Baaaa Abbbbb Baaaaa Baaaaaa Baaaaa Baaaaa Baaaaaaa Abbbbb Baaaaaa Baaaaaa Baaaaa

Figura 12 – Padrões da emulação de teclado

Durante a passagem da caixa pelo sensor a emulação do teclado ocorre várias vezes. Pode ser observado que na passagem da caixa pequena, onde é bloqueada apenas a visão de um dos leds, o padrão são apenas teclas “B”, já na passagem da caixa grande, onde os dois leds são bloqueados, apresentam-se dois tipos de entrada, mas seguindo um padrão de aparecer sempre a tecla “A”, como explicado anteriormente, a linguagem utilizada pelo GlovePIE é não linear, então o programa executa as duas ações aleatoriamente, já que as duas estão acontecendo.

16

Tendo os dois padrões definidos o próximo passo é o tratamento dessas informações de entrada para a classificação e armazenamento, que serão detalhados no próximo capítulo.

17

5. CLASSIFICAÇÃO E ARMAZENAMENTO
De acordo com os padrões obtidos pela leitura do sensor, o objetivo agora era tratar e fazer com que esses caracteres se transformassem em informações e fossem armazenadas possibilitando a sua consulta futuramente. Para cumprir tal objetivo foi desenvolvido um software em uma Linguagem Orientada a Objeto, no caso C++, utilizando o CodeBlocks, que salva todas as informações tratadas em um arquivo .TXT formato de tal maneira que aberto no Microsoft Excel, consegue exibir todos os dados separadamente nas células. Todo o código será mostrado e comentado abaixo: #include <iostream> #include <fstream> #include <time.h> #include <conio.h> #include <stdio.h> using namespace std;

Essas

foram todas

as

bibliotecas

que foram necessárias

para

o

funcionamento do programa, com atenção para a namespace, que é fundamental para o processo de armazenamento no banco de dados. Void wait ( int seconds ){ clock_t endwait; endwait = clock () + seconds * CLOCKS_PER_SEC ; while (clock() < endwait) {} }

A criação da função WAIT é necessária para limitar a entrada de caracteres durante a leitura do sensor, pois como visto no padrão de leitura a quantidade de caracteres no momento da leitura não é constante, é constante apenas o caractere, “A” ou “B”.

18

main(){ int quant; ofstream myfile; time_t rawtime; struct tm * timeinfo; char ch, ch1, ch2, ch3, ch4, chs;

No início do programa principal é feita a declaração das variáveis: quant - receberá a quantidade de caixas a serem lidas myfile – será o arquivo .TXT de armazenamento ch1, ch2, ch3, ch4 – serão os caracteres de amostragem cout<<”\n Programa desenvolvido para contagem de caixas”; cout<<”\n em uma linha de produção por meio do controle WiiMote”;

Primeira interface com o usuário, para informar a função do programa a ser utilizado. For(;;){ int quantg = 0, quantp = 0; time (&rawtime); timeinfo = localtime(&rawtime); myfile.open (“caixas.txt”,ios::app); cout << “\n\n Quantidade de caixas para classificar:”; cin >> quant;

O corpo do código inicia-se com um laço FOR infinito, que só é interrompido após o processo da leitura e se o usuário não quiser executar mais uma nova contagem. No início do laço é perguntado ao usuário a quantidade de caixas a serem classificadas, como se ele tivesse recebido um estoque de caixas apenas com a informação da quantidade total, mas sem a especificação da quantidade de cada tipo de caixa. E são criadas mais duas variáveis:

19

quantg – receberá a quantidade de caixas grandes quantp – receberá a quantidade de caixas pequenas

// primeira leitura (para fugir do caso especial) cout << “\n Tamanho da caixa:”; ch1 = getche(); ch2 = getche(); ch3 = getche(); ch4 = getche();

Independente da quantidade de caixas, a primeira leitura tem que ser fora do laço de leitura que depende da quantidade de caixas, pois como visto no padrão de leitura, na leitura de uma caixa grande pode tanto começar com “B” e ter todos os outros caracteres “A” (Baaaaa), quanto começar com “A” e ter todos os outros caracteres “B” (Abbbbb), sendo assim, todos os caracteres precisam ser analisados para conseguir classificar a caixa lida. If((ch1 == ‘b’)&&(ch2 == ‘b’)&&(ch3 == ‘b’)){ quantp++; cout <<” Caixa pequena”; wait(3); } if((ch1 != ‘b’)or(ch2 != ‘b’)or(ch3 != ‘b’)){ quantg++; cout <<” Caixa grande”; wait(3); }

Essas são as condições de classificação, se os três primeiros caracteres da amostra forem “B”, a caixa é considerada uma caixa pequena, é incrementada a variável quantp. Já se aparecer algum “A”, a caixa será considerada uma caixa grande e a variável quantg será incrementada.

20

For (int i = 1; i <= quant-1; i++){ cout << “\n Tamanho da caixa:”; ch1 = getche(); ch2 = getche(); ch3 = getche(); ch4 = getche();

Após a primeira leitura inicia-se o laço para leitura das próximas caixas, tendo como parâmetro quant-1, que é uma leitura a menos do que a quantidade de caixas, pois já foi feita uma. If((ch2 == ‘b’)&&(ch3 == ‘b’)&&(ch4 == ‘b’)){ quantp++; cout <<” Caixa pequena”; wait(3); } if((ch2 != ‘b’)or(ch3 != ‘b’)or(ch4 != ‘b’ )){ quantg++; cout <<” Caixa grande”; wait(3); } }

As condições de classificação dentro do loop são um pouco diferentes. Durante os testes verificou-se que sempre após a leitura de uma caixa remanescia o último caractere para a classificação da próxima caixa, o que causa um erro. Para contornar esse ruído na classificação, os caracteres utilizados começam a partir do segundo e seguindo a mesma lógica, se todos os caracteres forem “B” a caixa é classificada como pequena e se houver pelo menos um caractere “A”, será classificada como uma caixa grande. Após o processo de classificação os dados serão armazenados, como cabeçalho do arquivo gerado são informados a dada e a hora da leitura, para

21

facilitarem a pesquisa em uma futura verificação, como se fosse um lote. E na seqüência a quantidade total de caixas grandes e pequenas. Cout << “\n\nData/hora: “ << asctime(timeinfo); cout << “Quantidade total de caixas: “ << quant << ‘\n’; cout << “Quantidade de caixas grandes: “ << quantg << ‘\n’; cout << “Quantidade de caixas pequenas: “ << quantp << ‘\n’; cout << “----------------------------------------------\n”;

A primeira saída é apenas para a interface com o usuário, utilizando a função cout, para a gravação do arquivo é utilizada a função myfile.

Myfile << “Data/hora: “ << asctime(timeinfo); myfile << “Quantidade total de caixas:;” << quant << ‘\n’; myfile << “Quantidade de caixas grandes:;” << quantg << ‘\n’; myfile << “Quantidade de caixas pequenas:;” << quantp << ‘\n’; myfile << “----------------------------------------------\n”; myfile.close();

Como pode ser visto no código, no final do texto que informa o tipo de caixa é utilizado o “;” ainda dentro da string, é essa pontuação que servirá para o Excel para formatar os dados separando em células. No final do armazenamento é perguntado ao usuário se ele deseja fazer uma nova contagem, se o usuário responder que não, o loop é encerrado e o aplicativo de contagem encerrado. Cout << “\n Deseja fazer outra contagem?(s/n) \n”; ch = getche(); chs = getche(); if (chs == ‘n’)break; } }

22

Figura 13 – Arquivo gerado sendo aberto no Bloco de notas

Figura 14 – Arquivo gerado sendo aberto no Microsoft Excel

23

CONCLUSÃO
Para a realização deste trabalho foram necessárias as aplicações de conceitos não só da Informática, mas como também da Física e da Mecânica, pois a informática é uma matéria multidisciplinar, seu objetivo é otimizar qualquer processo de uma forma inteligente. Foi enorme a experiência adquirida com a execução desse trabalho, pois mesmo em uma escala muito menor, vários problemas presentes em um processo industrial puderam ser vividos, desde a adaptação do sistema aos parâmetros do produto a ser produzido quanto à necessidade da aplicação de novas tecnologias, como foi a utilização de um controle de vídeo-game. Outro desafio foi a quantidade de softwares utilizados, com várias funções diferentes mas para chegar a único objetivo, mas isso é justamente o que acontece na realidade, enfrentando muitas vezes vários casos de incompatibilidades, sendo necessário adaptações, assim como no programa de classificação devido ao tipo de entrada do sensor. Concluímos que apesar de desafiador o problema proposto pelo professor, todos os requisitos foram atendidos e todos os conceitos a serem passados foram assimilados.

24

REFERÊNCIA BIBLIOGRÁFICA
ALMANADA, Negreiros. Como construir uma esteira transportadora. Disponível em: <http://www.comofazertudo.com.br/casa-e-jardim/como-construir-uma-esteira-

transportadora>. Acesso em: 28 nov. 2011.

CEBILDS. Projeto Esteira Seletora.avi. Disponível em: < http://www.youtube.com/watch?v=HDgVJQiJpcc >. Acesso em 23 nov. 2011 KENNER, Carl. Documentation - GlovePIE.doc. Disponível em: <http://glovepie.org/> Acesso em: 12 nov. 2011

SOULIÉ. Juan. C++ Language Tutorial. Disponível em: <http://www.cplusplus.com/files/tutorial.pdf>. Acesso em 12 de Nov. de 2011.

Sign up to vote on this title
UsefulNot useful