Você está na página 1de 74

Centro Universitário Positivo - UnicenP

Núcleo de Ciências Exatas e Tecnológicas – NCET


Engenharia da Computação
Sergio Danton Machado Geisler

Sistema de Visão Computacional

Curitiba
2006
Centro Universitário Positivo - UnicenP
Núcleo de Ciências Exatas e Tecnológicas – NCET
Engenharia da Computação
Sergio Danton Machado Geisler

Sistema de Visão Computacional

Monografia apresentada à
disciplina de Projeto Final, como
requisito parcial à conclusão do
Curso de Engenharia da
Computação.
Orientador: Prof. Alessandro
Zimmer

Curitiba
2006

2
3
AGRADECIMENTOS

A Deus sem o qual nada seria possível; A toda minha família, em


especial meu pai Sergio Carneiro Geisler, pela construção da esteira e por tudo
mais em que me ajudou e minha mãe Nara Regina Machado Geisler por
trabalhar mais para ajudar a pagar meus estudos e por suportar a desordem
em casa; Ao meu professor orientador Alessandro Zimmer por sua
indispensável orientação durante todo o desenvolvimento do projeto; A todos
os meus professores e colegas que de alguma forma me agregaram
conhecimento durante minha vida acadêmica, principalmente minha colega
Vanessa Freire com a qual pude compartilhar muitos conhecimentos e que me
apoiou em muitos momentos.

4
SUMÁRIO

1. INTRODUÇÂO ......................................................................................... 13

2. REVISÃO BIBLIOGRÁFICA ............................................................................. 15

2.1. Microcontrolador 8051 ................................................................. 15

2.1.1. Características do microcontrolador 8051 ..................... 15

2.1.2. Descrição dos pinos do microcontrolador 8051 ............ 16

2.1.3. Memória do microcontrolador 8051 ................................ 18

2.1.3.1.Bancos de registradores do microcontrolador

8051 ...................................................................................... 20

2.1.3.2. Registradores de funções especiais .................... 21

2.1.4. Clock e Reset ..................................................................... 24

2.1.5. Interrupção ......................................................................... 25

2.1.5.1. Propriedades da interrupção ................................ 25

2.1.5.2. Interrupções no microcontrolador 8051 .............. 25

2.1.5.3. Programando as interrupções no microcontro-

lador 8051 ............................................................................ 28

2.1.6. Timer ........................................................................... 29

2.1.7. Canal Serial ................................................................ 30

2.2. Motores DC ................................................................................... 31

2.3. Fototransistores ........................................................................... 35

2.4. Processamento digital de imagens ............................................ 36

2.4.1. Aquisição de imagens ...................................................... 37

2.4.2. Armazenamento ................................................................ 38

2.4.3. Pré – processamento ........................................................ 38

2.4.4. Segmentação ..................................................................... 38

2.4.4.1. Detecção de bordas ............................................... 39

5
2.4.4.2. Limiarização ........................................................... 40

2.4.5. Afinamento ........................................................................ 40

2.4.6. Perseguição de contorno ................................................. 41

3. E SPECIFICAÇÂO .................................................................................... 42

3.1 Descrição ....................................................................................... 42

3.2. Hardware ....................................................................................... 42

3.2.1. Construção da esteira ...................................................... 42

3.2.2. Funções do hardware ....................................................... 49

3.2.3. Componentes do hardware .............................................. 50

3.2.4. Firmware ............................................................................ 50

3.2.5. Diagrama em blocos do sistema ..................................... 51

3.2.6. Seqüência de funcionamento ......................................... 51

3.3. Especificação de Software .......................................................... 52

3.3.1 Funções do software ......................................................... 52

3.3.2. Ambiente de desenvolvimento ........................................ 52

3.3.3. Funcionamento do software ............................................ 52

3.3.4. Processamento digital de imagens ................................. 53

3.4. Requisitos Mínimos ..................................................................... 56

4. P ROJETO ................................................................................................ 57

4.1. Hardware ....................................................................................... 57

4.1.1. Sinais de interface ............................................................. 57

4.1.2. Lista de componentes ...................................................... 58

4.1.2.1. Lista de componentes da placa do

microcontrolador 8051 ....................................................... 58

4.1.2.2. Lista de componentes das placas de interface ... 58

6
4.2. Software ........................................................................................ 59

4.2.1.Diagrama de contexto ....................................................... 59

4.2.2. Diagrama de casos de uso ............................................... 60

4.2.3. Diagrama de classes ......................................................... 60

4.2.4. Fluxograma ........................................................................ 61

4.2.5. Diagramas de seqüência .................................................. 62

4.2.6. Interface ............................................................................. 65

4.3. Firmware ........................................................................................ 67

4.3.1. Diagrama de estados ........................................................ 67

4.3.2. Fluxograma do firmware .................................................. 67

5. RESULTADOS ......................................................................................... 68

6. CONCLUSÃO .......................................................................................... 70

7. CRONOGRAMA ...................................................................................... 71

8. L EVANTAMENTO DE CUSTOS .............................................................. 72

9. REFERÊNCIAS BIBLIOGRÁFICAS ....................................................... 73

10. ANEXOS ................................................................................................ 75

10.1 Diagramas esquemáticos de Hardware ..................................... 75

10.1.1. Interface com os displays de 7 segmentos .................. 75

10.1.2. Circuito do microcontrolador 8051 ................................ 76

10.1.3. Circuitos de interface dos motores DC com o

microcontrolador ......................................................................... 77
10.1.4. Circuito de interface serial ............................................. 79

10.1.5. Circuito de interface com o sensor e os leds

Indicativos .................................................................................... 79

10.2. Layouts ....................................................................................... 80

7
LISTA DE FIGURAS

Figura 1.1. Esteira


Figura 1.2. Diagrama em blocos do sistema
Figura 2.1. Pinagem nos microcontroladores da família 8051
Figura 2.2. Arquitetura básica do microcontrolador 8031
Figura 2.3. Disposição dos blocos de memória da RAM interna
Figura 2.4. Disposição dos bancos registradores
Figura 2.5. Circuito de clock do microcontrolador 8031
Figura 2.6. Circuito de reset do microcontrolador 8031
Figura 2.7. Ilustração do processo de interrupção não vetorada
Figura 2.8. Processo de interrupção da /INT0
Figura 2.9. Motor DC utilizado em vidro elétrico de automóveis
Figura 2.10. Desenho esquemático representando o funcionamento de um motor
elétrico
Figura 2.11. Ilustração do comutador e das escovas
Figura 2.12. Funcionamento do comutador
Figura 2.13. Circuito básico de utilização do fototransistor
Figura 2.14. Forma de representação em eixos de uma figura
Figura 2.16. Passos fundamentais em processamento de imagens
Figura 2.17. Detecção de bordas por operadores de derivação
Figura 3.1. Desenho técnico da esteira
Figura 3.2. Desenho técnico da lateral esquerda da esteira
Figura 3.3. Desenho técnico das laterais superior e inferior da esteira
Figura 3.4. Desenho técnico do suporte da câmera e da luminária
Figura 3.5. Desenho técnico do suporte da câmera e da luminária vista de outro lado
Figura 3.6. Desenho técnico da base de sustentação da câmera no suporte
Figura 3.7. Desenho técnico do emissor de laser
Figura 3.8. Desenho técnico do suporte do emissor de laser
Figura 3.9. Desenho técnico do encaixe do fototransistor
Figura 3.10. Desenho técnico do suporte do fototransistor
Figura 3.11. Desenho técnico do separador
Figura 3.12. Desenho técnico do Painel de Controle
Figura 3.13. Diagrama em blocos do sistema
Figura 3.14. Processamento de Imagem utilizado no sistema
Figura 3.15. Imagem obtida após o pré-processamento
Figura 3.16. Imagem obtida após a limiarização

8
Figura 3.17. Imagem obtida após a detecção de cantos
Figura 4.1. Diagrama de contexto do sistema
Figura 4.2. Diagrama de casos de uso
Figura 4.3. Diagrama de classes
Figura 4.4. Fluxograma do software
Figura 4.5: Diagramas de seqüência de Inicio com o objeto Imagem
Figura 4.6. Diagramas de seqüência de Inicio com o objeto Captura
Figura 4.7. Diagramas de seqüência de ConfVideoSource com o objeto Captura
Figura 4.8. Diagramas de seqüência de ConfFormatoDeVideo com o objeto Captura
Figura 4.9. Diagramas de seqüência de Form1 com o objeto Captura
Figura 4.10. Diagrama de seqüência dos métodos de EnviarrByte();
Figura 4.11. Diagrama de seqüência dos métodos de ReceberByte();
Figura 4.12. Tela inicial do Software
Figura 4.13. Tela de configuração do formato de vídeo
Figura 4.14. Tela de configuração do Vídeo Source
Figura 4.15. Tela de configuração de caixa
Figura 4.16. Diagrama de estados
Figura 4.17. Fluxograma do firmware
Figura 5.1. Situações em que o sistema apresentou sucesso
Figura 5.2. Valores de sombra e cor para o sistema apresentar sucesso
Figura 5.3. Valores comparativos
Figura 10.1. Diagrama esquemático da interface com os displays de 7 segmentos.
Figura 10.2. Diagrama esquemático do circuito do microcontrolador 8051.
Figura 10.3. Diagrama esquemático do primeiro circuito de interface dos Motores
DC com o microcontrolador
Figura 10.4. Diagrama esquemático do segundo circuito de interface dos Motores
DC com o microcontrolador
Figura 10.5. Diagrama esquemático da interface serial.
Figura 10.6. Diagrama esquemático da interface com o sensor e os leds indicativos
Figura 10.7. Layout da placa do microcontrolador.
Figura 10.8. Layout da placa de interface com os displays de 7 segmentos.
Figura 10.9. Layout da placa de interface serial.
Figura 10.10. Layout da primeira placa de interface com os motores DC.
Figura 10.11. Layout da segunda placa de interface com os motores DC.
Figura 10.12. Layout da segunda placa de interface com os leds indicativos e com o
sensor.

9
LISTA DE T ABELAS

Tabela 2.1: Seleção dos bancos de registradores


Tabela 2.2: Disposição dos Registradores de Função Especial na memória.
Tabela 2.3: Endereços de Interrupção
Tabela 2.4: Registrador IE e seus endereços
Tabela 2.5: Registrador IP e seus endereços
Tabela 2.6: Registrador TCON e seus endereços
Tabela 2.7: Registrador TMOD e seus endereços
Tabela 2.8: A outra metade do registrador TCON e seus endereços
Tabela 2.9: Registrador SCON
Tabela 2.10: Programação dos modos de transmissão serial
Tabela 2.11: Seqüência de ativação das bobinas no motor de passo
unipolar
Tabela 2.12: Seqüência de ativação das bobinas no motor de passo
unipolar para se ter o aumento de torque
Tabela 2.13: Seqüência de pulsos para o motor de passo bipolar
Tabela 2.14: Estrutura de vizinhança de 8
Tabela 4.1: Sinais de interface
Tabela 4.2. Lista de componentes da placa do microcontrolador 8051
Tabela 4.3. Lista de componentes da placa de interface serial
Tabela 4.4. Lista de componentes das placas de interface

10
RESUMO

Este documento descreve a construção detalhada de um sistema que


separa objetos de acordo com suas dimensões através da sua imagem. O
sistema conta com uma esteira pela qual os objetos passarão, uma câmera
que irá realizar a captura de imagem e com um software integrado à esteira
que tratará a imagem.
O hardware do projeto consiste na esteira e na câmera. A esteira possui
um microcontrolador que realizará através do seu firmware o controle sobre o
motor DC que fará a esteira rodar, sobre o motor que atuará no dispositivo
separador, sobre os displays de sete segmentos que contarão o número de
caixas que passaram e sobre o fototransistor que detectará o momento em que
a imagem deve ser capturada. A câmera será acionada pelo software que fará
a interface com a esteira quando o fototransistor detectar a passagem de um
objeto e estará conectada diretamente ao computador. A esteira também
possuirá um sistema de iluminação simples para melhorar as condições de
captura de imagem.
Através da comunicação serial a esteira será controlada pelo software,
que por sua vez fará a interface com o usuário. Além disso, o software realizará
o tratamento da imagem capturada retirando as informações de algumas
dimensões do objeto e apresentará os resultados.
Para efeitos de validação do projeto serão utilizadas caixas de diversos
tamanhos como objetos a serem analisados pelo sistema.

11
ABSTRACT

This document describes the detailed construction of a system that


separates objects in accordance with your dimensions through your image. The
system counts on a mat for which the objects will pass, a camera that will go to
carry through the capture of image and with a software integrated to the mat
that will treat the image.
The hardware of the project consists of the mat and the camera. The mat
posses a microcontroller that will carry through its firmware the control on the
DC engine that will make the mat to twirl, on the engine that will act in the
separating device, on displays of seven segments that will count the number of
boxes that had passed and on the phototransistor that the moment will detect
where the image must be captured. The camera will be set in motion by the
software that will make the interface with the mat when the phototransistor to
detect the ticket of an object and will be connected directly to the computer. The
mat also will possess a simple lighting system to improve the conditions of
image capture.
Through of the serial communication the mat will be controlled for
software, that in turn will make the interface with the user. Moreover, software
will carry through the treatment of the captured image removing the information
of some dimensions of the object and will present the results.
For the purpose of validation of the project boxes of diverse sizes will be
used as objects to be analyzed for the system.

12
1. INTRODUÇÃO

A rapidez nos procedimentos industriais é cada vez mais necessária para


uma indústria estar bem colocada no mercado. Para obter essa rapidez as
indústrias estão cada vez mais automatizando seus processos. Dessa forma,
os sistemas mecânicos, elétricos e computacionais são de grande importância
para essa automatização. A automatização dos processos industriais se torna
mais eficaz com esses tipos de sistema porque sistemas não sofrem o
desgaste físico e mental que um ser humano sofre ao realizar certos
processos. Além disso, a capacidade de um sistema pode ir muito além da
capacidade de um ser humano. Por exemplo, um sistema computacional pode
realizar milhares de cálculos por segundo, coisa que é impossível para um
homem.
A automatização também pode trazer mais segurança aos processos
industriais. Um ser humano após muitas horas de trabalho sofre um desgaste
físico e mental de forma que poderia deixar passar algumas falhas em um
determinado processo.
Tendo isso em vista, automatizar um processo de separação de caixas
pode ter muita utilidade numa indústria. Ao invés de se ter uma pessoa
realizando esse processo, pode-se ter um sistema eletromecânico separando
fisicamente as caixas, controlado por um sistema computacional. Dessa forma,
evitam-se erros humanos, se tem um controle maior sobre a situação e um
sistema pode estar trabalhando o tempo todo.
Esse processo de separação das caixas é muito usado nas indústrias
para a estocagem de materiais. A tecnologia usada neste projeto para alcançar
esse fim, será a da visão computacional.
A visão computacional consiste em fazer com que o computador retire
informações de uma imagem. Isso se consegue com algoritmos de
processamento de imagens. O interesse por esses algoritmos surgiu com a
necessidade da melhoria da informação visual e com a necessidade de realizar
a percepção de dados de imagens através das máquinas.
Aproveitando que o sistema contará com um processamento de imagens,
pode-se também monitorar melhor o sistema, sendo que, se ocorrer alguma

13
falha, o indivíduo que estiver controlando o sistema através do software poderá
ver o problema através da imagem que estará sendo exibida no computador.
O sistema tem como objetivo atender às características citadas
anteriormente utilizando-se da tecnologia e ainda, com novas implementações,
permitir outras aplicações na indústria. A primeira figura abaixo é uma foto
tirada da esteira deste projeto e a segunda figura é um diagrama em blocos do
sistema.

Figura 1.1. Esteira


Fonte: Geisler, 2006

Figura 1.2. Diagrama em blocos do sistema


Fonte: Geisler, 2006

14
2. REVISÃO BIBLIOGRÁFICA

2.1. Microcontrolador 8051

Os microcontroladores são dispositivos que estão sendo cada vez mais


usados em projetos de eletrônica digital. Isso se deve à sua grande
compatibilidade de periféricos, a sua relativa facilidade de programação e ao
seu baixo custo.
As vantagens dos sistemas microcontrolados sobre os sistemas
microprocessados, são que os microcontroladores possuem vários elementos
internos como contadores, canal de comunicação serial, temporizadores e
memórias. Esses elementos, no caso dos sistemas microprocessados, tinham
suas funções desempenhadas por chips separadamente. Além do tamanho
reduzido, os microcontroladores apresentam uma facilidade maior de
programação tendo em vista que seus periféricos são considerados como
memória pela CPU interna.

2.1.1. Características do microcontrolador 8051

Os microcontroladores são sistemas seqüenciais síncronos. Esses


sistemas têm por característica executarem uma instrução a cada ciclo de clock
ou a cada grupo de ciclos de clock (SILVA JÚNIOR, 1998).
O microcontrolador 8051 pertence à família de microcontroladores 8051 e
geralmente é utilizado com clock de 12MHz. Esse clock é dividido internamente
pelo fator 12, o que significa que cada instrução será executada em 1µs (SILVA
JÚNIOR, 1998). Isso também quer dizer que a cada 1µs um ciclo de clock é
usado. Existem instruções que levam mais de um ciclo de máquina para serem
executadas. Há instruções de 1 ciclo, 2 ciclos e 4 ciclos de máquina.
O microcontrolador da família 8051 que será usado é uma versão um
pouco diferente do microcontrolador 8051, pois o microcontrolador AT89S8252
não possui a memória ROM interna como os microcontroladores 8051 e sim
uma memória flash de 4kbytes interna.

15
Em termos de memória o microcontrolador 8051 ainda conta com uma
memória RAM interna de 128 bytes expansível para 64 kbytes externos. Essa
memória RAM é a memória de dados.
O hardware do microcontrolador também conta com quatro portas de I/O,
sendo que cada uma possui 8 bits individualmente endereçáveis. Além disso,
possui uma estrutura de interrupção com nesting (quando uma interrupção
pode interromper uma outra que já está sendo atendida desde que tenha maior
prioridade), dois contadores/temporizadores de 16 bits, um oscilador de clock
interno (que requer apenas um cristal e mais dois capacitores) e por fim, um
canal de comunicação serial full-duplex (SILVA JÚNIOR, 1998).

2.1.2. Descrição dos pinos do microcontrolador 8031

A figura 2.1 mostra a pinagem da família de microcon-troladores 8051, nas


duas formas de encapsulamento. A primeira forma de encapsulamento é a DIL
e a segunda é a QUAD PACK.

Figura 2.1. Pinagem nos microcontroladores da família 8051


Fonte: Silva Júnior, 1998

Do pino 1 ao pino 8 temos o port P1, que vai de P1.0 a P1.7. Estes pinos
são bidirecionais, podendo ser endereçáveis individualmente ou como porta de

16
8 bits. Possuem resistores de pull-up internos, forçando assim nível lógico alto.
Cada pino pode acionar até 4 portas TTL-LS.
O pPino 9 (RST/VPD) é o pino do reset. Com a aplicação de um nível
lógico alto, este pino reseta o sistema por, pelo menos, dois ciclos de máquina,
tendo um resistor de pull-down interno permitindo que se use apenas um
capacitor externo para obter o reset por power-on.
Do pino 10 ao pino 17 temos o port P3, que vai de P3.0 a P3.7. Tem as
mesmas características de funcionamento do port P1, tendo também outras
funções especiais que estão descritas abaixo:
- pino 10 = P3.0 RXD/ Data : entrada de dados serial.
- pino 11 = P3.1 TXD/Clock: saída de dados serial.
- pino 12 = P3.2 INT0: interrupção externa de número 0, ativo em nível
lógico baixo.
- pino 13 = P3.3 INT1: interrupção externa de número 1, ativo em nível
lógico baixo.
- pino 14 = P3.4 T/C0 : entrada externa para o temporizador/contador de
eventos.
- pino 15 = P3.5 T/C1: entrada externa para o temporizador/ contador de
eventos.
- pino 16 = P3.6 WR: strobe (sinalizador) de escrita de dados externo.
- pino 17 = P3.7 RD : strobe (sinalizador) de leitura de dados externo
O pino 18 é o XTAL 2 que é saída do amplificador inversor do oscilador e
entrada para o clock interno ou externo.
O pino 19 é o XTAL 1 que é a entrada do amplificador inversor do
oscilador e deve ser conectado ao terra em caso de clock externo.
O pino 20 é o VSS conectado ao terra do circuito.
Do pino 21 ao pino 28 temos o port P2, que vai de P2.0 a P2.7 e possui as
mesmas características de funcionamento do port P1, sendo estes pinos
usados como pinos de endereçamento externo endereçando a parte mais
significativa dos 16 bits (A8 a A15).
O pino 29 é o PSEN (Program Store Enable) que é a saída para
habilitação do programa externo. Também é um sinalizador de leitura da
memória de programa externa e quando o microcontrolador busca instruções
este pino vai ao nível lógico zero.

17
O pino 30 é o ALE (Address Latch Enable) que é uma saída habilitadora
do latch de endereços, separando o barramento de dados da parte menos
significativa do barramento de endereços que são multiplexados pelo port P0.
O pino 31 é o EA (External Enable) que é uma entrada de seleção de
memórias. Quando colocado em nível lógico baixo, a CPU executa somente as
instruções da memória de programa externa; quando em nível lógico alto, a
CPU executa as instruções da memória de programa interna (se existir).
Do pino 32 ao pino 39 temos o Port P0 que vai de P0.0 a P0.7. Este é um
port de 8 bits bidirecional com dreno aberto. Sem resistores de pull-up internos,
funciona como um barramento de dados, e a parte menos significativa do
barramento de endereços.
No pino 40, encontramos o VCC que é o pino de Alimentação positiva.

2.1.3. Memória do microcontrolador 8051

O esquema da figura 2.2 representa a arquitetura básica para a utilização


de um microcontrolador 8031.

Figura 2.2. Arquitetura básica do microcontrolador 8051


Fonte: Mohr, 2004

A memória no microcontrolador 8051 está dividida em memória de


programa e memória de dados. A memória de programa é uma ROM externa
que pode ter até 64 kbytes.
A memória de dados é uma RAM interna que também pode ter até 64
kbytes externos. Essa memória RAM está dividida em três blocos, dois de 128

18
bytes mapeados nos endereços 00H até 7FH e 80H até FFH e mais 20
registradores de funções especiais espelhados pelos endereços de 80H até
FFH. Os acessos aos blocos são feitos através dos modos de endereçamento
o que distingue dois blocos cujos endereços coincidam (MOHR, 2004). O
esquema da Figura 2.3 mostra melhor a disposição dos blocos da memória
RAM interna.

Figura 2.3. Disposição dos blocos de memória da RAM interna


Fonte: Mohr, 2004

A memória RAM do microcontrolador também pode ser estendida


externamente. Nesse caso, há endereços coincidentes com toda faixa de
endereços da memória de programa e com a faixa de endereços da memória
de dados interna.
A primeira distinção é feita pelo pino PSEN que habilita a memória
correspondente. Esse pino é habilitado quando se realiza a leitura da instrução
MOVC, que transfere dados entre a memória de programa e os registradores.
Já na segunda distinção, o microcontrolador oferece o uso de duas
instruções: a MOV para o acesso da memória interna e a MOVX para o acesso
de dados externos (o X vem de external). Nesse caso é necessário o
endereçamento indireto.

19
2.1.3.1.Bancos de registradores do microcontrolador 8051

Os bancos de registradores nada mais são do que posições na memória


RAM que permitem seu endereçamento pelo nome de cada registro, além de
seu endereçamento pela posição da memória. (NICOLOSI, 2001)
Utilizar-se de bancos de registradores resulta em algumas vantagens.
Estas vantagens estão relacionadas ao seu uso pelo sistema como índice para
endereçamento e ao fato de ser mais fácil de lembra seu nome. Uma outra
vantagem que pode ser levada em conta é a de que os registradores são
amplamente usados pelos compiladores de linguagem de alto nível.
Os registradores estão dispostos em 4 bancos de 8 registradores que
correspondem aos primeiros 24 bytes da memória RAM interna. Em cada
banco os registradores são nomeados como R0, R1, R2, R3... R7 e podem ser
endereçados através de seus nomes. Essa nomenclatura é a mesma para
todos os bancos de registradores e o que define qual banco vai ser usado, é a
configuração do registrador PSW que possui dois bits o RS1 e o RS2 que
permite o endereçamento dos 4 bancos de registradores. A figura 2.4 mostra
como estão dispostos os bancos de registradores na memória.

Figura 2.4. Disposição dos bancos registradores


Fonte: Mohr, 2004

A tabela 2.1 descreve a lógica de controle aplicada aos pinos RS1 e RS0
para realizar o controle de qual banco de registradores será selecionado.

20
Tabela 2.1. Seleção dos bancos de registradores
Fonte: Mohr, 2004

Acima dos bancos de registradores, nos endereços de 20H a 2FH, existe


uma região de 16 bits que pode ser endereçada individualmente pelo
programador. Para isso são usadas as instruções SETB (set bit), CLR (clear) e
CPL (complemento). A diferença é que estes não podem ser acessados pelo
nome. (MOHR, 2004).

2.1.3.2. Registradores de funções especiais

São como os registradores dos bancos de registradores, podem ser


acessados pelo seu nome, porém eles têm uma função já determinada dentro
do microcontrolador. Dentre eles estão as posições de acesso aos ports,
registradores de interrupção, registradores de porta serial, temporizadores e
registradores aritméticos. Podem ser acessados individualmente ou pelo
endereço do primeiro bit no caso de registradores situados em endereços
múltiplos de 8. Abaixo estará uma breve descrição desses registradores e em
seguida uma tabela com seus nomes e endereços.
ACC (E0) – Acumulador: Apesar de se ter o costume de chamá-lo de
ACC, o seu nome para ser acessado no programa é A. Como seu próprio nome
já diz, ele é usado para guardar um valor.
P0 (80H), P1 (90H), P2 (A0H) e P3 (B0H): Registradores especiais dos
ports de comunicação. O port P0 multiplexa endereços/dados no caso em que
se utiliza memória externas, como no caso do microcontrolador 8031. No P1
ficam os pinos de propósito geral, onde costuma-se acoplar os periféricos. O
P2 é o port dedicado exclusivamente ao gerenciamento de endereços quando
se usa memória externa. O port P3 possui os pinos compromissáveis com
algum periférico ou comunicação externa.

21
B (F0): É um registrador usado para se guardar um valor para se realizar
uma operação de multiplicar ou dividir (MUL AB e DIV AB), tirando esses casos
é usado como um registrador comum.
PSW (D0H) – Program Status Word: Este registrador indica o status da
última operação realizada no acumulador. O PSW.7 corresponde ao flag de
carry, o “vai um” das operações aritméticas. É usado em várias instruções
booleanas como operando. O PSW.6 é o flag de carry auxiliar, ou seja, é o “vai
um” dos primeiros 4 bits do acumulador. O PSW.5 é um bit registrador de uso
geral, sem função específica. O PSW.4 e o PSW.3 correspondem ao RS1 e ao
RS2 citados anteriormente e servem para fazer a seleção do banco de
registradores a ser utilizado, conforme a tabela 1. O PSW.2 é um bit de
overflow flag que vai para 1 quando, após uma adição ou subtração, acontece
um “estouro” da conta. O PSW.1 é um bit não disponível ao usuário. O PSW.0
é um bit que é setado se a paridade do acumulador for ímpar.
IE (A8H - Interrupt Enable) e IP(B8H -Interrupt Priority): Permitem
programar as prioridades, o modo e a liberação de interrupções internas e
externas.
DPTR - DPH e DPL (83H e 82H): Correspondem a dois registradores, que
juntos possuem 16 bits, usados como ponteiros em algumas instruções de
acesso a memória.
SP (81H - Stack Pointer): Registrador 8 bits usado para armazenar o
endereço para o topo de uma pilha. As instruções PUSH (insere um elemento
na pilha) e POP (remove um elemento da pilha) incrementam e decrementam o
SP.
PCON (87H – Power Control Register): Permite adaptar o chip a uma
situação na qual não há processamento, onde se querem manter os conteúdos
das memórias internas.
TCON (88H – Timer Control Register) e TMOD (89H): São os
registradores que permitem o controle e modo de operação dos
Timers/contadores.
SCON (98H – Serial Port Control Register) e SBUF (99H – Serial Buffer):
Permitem respectivamente, programar a porta de comunicação serial e
armazenamento do dado recebido ou a ser transmitido.

22
TH1 (8DH), TH0 (8CH), TL1 (8BH), TL0 (8AH): contêm os valores de
contagem dos timers/counters.
Abaixo, na Tabela 2.2, encontra-se a disposição dos registradores de
função especial na memória e os endereços dos mesmos.

Tabela 2.2. Disposição dos Registradores de Função Especial na memória.


Fonte: Nicolosi, 2001

23
2.1.4. Clock e Reset

Pode - se definir clock como relógio interno do microprocessador para a


execução seqüencial de qualquer atividade interna ou externa à máquina.
(NICOLOSI, 2001). Como já foi mencionado o microcontrolador utiliza um clock
de 12MHz e o seu circuito é constituído de um cristal e dois capacitores, como
pode ser visto na figura abaixo.

8031
C3

Xtal 2
33p
X1
C2 11,0592MHz
Xtal 1
33p

Figura 2.5. Circuito de clock do microcontrolador 8051

O reset consiste em um pino do microcontrolador que deve ter um circuito


capaz de deixar o pino RST por dois ciclos de máquina no estado “1” no
ligamento do chip. O pino de reset é responsável por forçar os registradores a
irem para estados definidos. Além disso, o circuito deve forçar o reset por uma
chave. O circuito do RESET está na Figura 2.6.

8031
VCC

SW1 C1

10u
RST

R1
10k

Figura 2.6. Circuito de reset do microcontrolador 8051

24
2.1.5. Interrupção

A Interrupção consiste em um sinal enviado ao microcontrolador que o


leva a suspender as tarefas em execução para atender ao evento que gerou o
sinal de interrupção. Após o término do serviço de interrupção o
microcontrolador retorna à execução da tarefa que estava executando antes.

2.1.5.1. Propriedades da interrupção

A interrupção pode ser vetorada ou não vetorada. No caso da não


vetorada, o microprocessador tem um endereço fixo de desvio. E no caso da
vetorada, o microprocessador permite o envio de um endereço de desvio.
O microcontrolador também possui uma propriedade chamada de
mascaramento que consiste em permitir ou não, que certo dispositivo
interrompa sua tarefa em execução. Pode ser implementada via hardware ou
via software.
A prioridade é uma propriedade na qual o microcontrolador permite o
atendimento de mais de uma interrupção. A prioridade indica qual interrupção
será atendida antes. As interrupções de maior prioridade são atendidas antes.
Outra propriedade importante é a origem da interrupção. A origem pode
ser interna ou externa e ser tratada por dispositivos internos ou externos.
E por fim, tem-se a propriedade do tipo de disparo das interrupções
externas ao chip. De acordo com a sua programação o microcontrolador
permite ser interrompido externamente por nível (0 ou 1), por borda (subida ou
descida) ou pela combinação de ambos.

2.1.5.2. Interrupções no microcontrolador 8051

O microcontrolador 8031 possui cinco fontes de interrupção:


- Interrupção externa /INT0 (B2H): pino físico de interrupção que deve ser
ativado via software, juntamente com sua prioridade de atuação.
- Interrupção externa /INT1 (B3H): é semelhante ao /INT0.

25
- Interrupção gerada pelo TIMER/COUNTER 0: interrupção interna gerada
pelo pino TIMER_0.
- Interrupção gerada pelo TIMER/COUNTER 1: interrupção interna gerada
pelo pino TIMER_1.
- Interrupção pela serial: é uma interrupção interna gerada pelo periférico
SERIAL.

Tabela 2.3. Endereços de Interrupção


Fonte: Nicolosi, 2001

O processo de interrupção na família 8051 é não vetorada. Segue abaixo


uma ilustração desse processo.

Figura 2.7. Ilustração do processo de interrupção não vetorada


Fonte: Nicolosi, 2001

26
Figura 2.8. Processo de interrupção da /INT0
Fonte: Nicolosi, 2001

27
2.1.5.3. Programando as Interrupções no microcontrolador 8051

Para se programar utilizando interrupções, levam-se em conta os dois


registradores de interrupção, o IE e o IP.
O IE é o responsável por determinar qual tipo de interrupção será usada.
O bit EA é um bit que aciona as outras chaves. O ES é habilitado quando há
uma interrupção por parte do periférico da serial. O EX0 e o EX1 são usados
para as interrupções internas /INT0 e /INT1 respectivamente. Assim como, o
ET0 e o ET1 são usados para as interrupções dos TIMERS/COUNTERS 0 e1.
Todos esses bits fazem parte do registrador IE, conforme a tabela abaixo:

IE EA - - ES ET1 EX1 ET0 EX0


A8H AF - - AC AB AA A9 A8

Tabela 2.4. Registrador IE e seus endereços


Fonte: Adaptada de Nicolosi, 2001

Tem-se ainda o IP que é o registrador que define a prioridade das


interrupções. O bit PS serve para definir a prioridade da serial. O PT0 e o PT1
servem para definir a prioridade dos TIMERS/COUNTERS 0 e1. O PX0 e o
PX1 servem para definir a prioridade das interrupções internas /INT0 e /INT1.
Isso sendo que, setar um determinado bit com “1” significa colocar o dispositivo
no grupo de alta prioridade e setar com “0” significa colocar o dispositivo no
grupo de baixa prioridade.

IP - - - PS PT1 PX1 PT0 PX0


B8H - - - BC BB BA B9 B8

Tabela 2.5. Registrador IP e seus endereços


Fonte: Adaptada de Nicolosi, 2001

Ainda se pode definir o modo de acionamento das interrupções que pode


ser por borda ou pro nível. O registrador TCON possui 4 bits que podem se
usados para esse fim. Para acionar as interrupções internas por nível deve-se

28
setar em “0” os bits IT1 e/ou IT0. Para acionar por borda deve-se setar com “1”.
O IE0 e o IE1 servem para verificar se o pino físico realmente disparou a
interrupção. A Tabela abaixo mostra os endereços do registrador TCON.

TCON - - - - IE1 IT1 IE0 IT0


88H - - - - 8B 8A 89 88

Tabela 2.6. Registrador TCON e seus endereços


Fonte: Adaptada de Nicolosi, 2001

2.1.6. Timer

O microcontrolador 8051 possui dois timers/counters internos


programáveis. Um timer é um grupo de flip-flops em arranjo de “divisor por 2”
acionado pelo mesmo clock do microcontrolador. Esse clock é dividido por 12
antes de entrar nos timers.
Para se programar os timers, usam-se dois Registradores de Função
especial que são o TMOD e o TCON.
Podem-se programar os dois timers em quatro modos de operação:
- Modo 0: Contador com capacidade máxima de 13 bits.
- Modo 1: Contador com capacidade máxima de 16 bits.
- Modo 2: Contador com capacidade máxima de 6 bits e auto-reload.
- Modo 3: Contador misto usado em aplicações especiais.
Existe um registrador que seleciona o modo de operação dos timers que é
o TMOD. Isso é feito pelos bits M1 e M0 de cada timer. A disposição dos bits
M0 e M1 no registrador TMOD pode ser vista na seguinte tabela.

TMOD GATE C/T M1 M0 GATE C/T M1 M0


89H * * * * * * * *
TIMER1 TIMER0

Tabela 2.7. Registrador TMOD e seus endereços


Fonte: Adaptada de Nicolosi, 2001

29
O registrador TCON possui uma outra metade relativa aos timers. Nele se
tem os bits TR1 e TR0 que ligam uma contagem com ”1” ou desligam com “0”.
Os bits TF1 e TF0 são flags que indicam estouro de contagem (overflow). A
outra metade não mencionada do TCON segue na tabela 2.8

TCON TF1 TR1 TF0 TR0 - - - -


88H 8F 8E 8D 8C - - - -

Tabela 2.8. A outra metade do registrador TCON e seus endereços


Fonte: Adaptada de Nicolosi, 2001

2.1.7. Canal Serial

O canal de comunicação serial do microcontrolador 8051 possui dois


registradores o SCON que realiza o controle da serial e o SBUF que é
responsável pela transmissão e recepção (NICOLOSI, 2001).
A transmissão serial pode ser síncrona ou assíncrona. A transmissão
serial síncrona usa uma saída para envio ou recepção e outra para levar um
sinal de sincronismo, para o receptor saber quem é o bit 0 e o bit 1 na
transmissão. Além disso, é necessário enviar um byte inicial de geração do
sincronismo e um byte no fim da transmissão para indicar que a mesma
acabou. O modo assíncrono não depende de sinal de sincronismo, pois cada
byte transmitido possui um padrão de transmissão. Todo byte possui um bit de
inicio e um de fim.
O controle da serial é realizado pelo registrador SCON, que é responsável
pelo status e pelo modo de transmissão do periférico serial.

SCON SM0 SM1 SM2 REN TB8 RB8 TI RI


98H 9F 9E 9D 9C 9B 9A 99 98

Tabela 2.9. Registrador SCON


Fonte: Adaptada de Nicolosi, 2001

30
Os bits SM0 e SM1, em parceria, são responsáveis por dizer qual dos
quatro modos de trabalho da serial está sendo usado, conforme a tabela
abaixo:
MODO SM0 SM1 COMUNICAÇÂO TAMANHO BAUD-RATE
0 0 0 Síncrona 8 bits fclk /12
1 0 1 Assíncrona 8 bits Dado por Timer
1
2 1 0 Assíncrona 9 bits fclk /32 ou fclk /64
3 1 1 Assíncrona 9 bits Dado por Timer
1

Tabela 2.10. Programação dos modos de transmissão serial


Fonte: Adaptada de Nicolosi, 2001

O bit SM2 é usado para multiprocessamento. O bit REN permite iniciar


uma recepção. Os bits TB8 e RB8 servem para enviar um nono bit com cada
byte. Os bits TI e RI são flags de interrupção para a transmissão e recepção.
O registrador PCON também é usado para programar a serial, porém é só
o bit de SMOD que é de interesse. Esse bit dobra a divisão de freqüência da
SERIAL.

2.2. Motores DC

A rotação dos motores elétricos é a base do funcionamento de muitos


equipamentos amplamente usados pelo ser humano, como é o caso dos
eletrodomésticos, equipamentos de informática, robôs, etc.
Os motores DC em especial, são usados quando a alimentação disponível
é de corrente contínua. A alimentação desses motores geralmente varia de 3V
a 12V, o que permite seu amplo uso em equipamentos digitais como
computadores por exemplo e em equipamentos cuja alimentação elétrica se dá
por baterias como é o caso dos automóveis, câmeras filmadoras, etc. A figura a
seguir mostra um motor DC utilizado em vidros elétricos de automóveis.

31
Figura 2.9. Motor DC utilizado em vidro elétrico de automóveis
Fonte: Geisler, 2006

O giro do rotor de um motor elétrico é causado por um torque, que é


produzido por forças eletromagnéticas desenvolvidas entre os pólos
magnéticos do rotor e os do estator. Essas forças podem ser de atração ou de
repulsão e elas empurram ou puxam os pólos móveis do rotor. Isso faz o motor
girar cada vez mais rápido até que o torque resultante seja zero e
consequentemente a velocidade angular se torne constante.

Figura 2.10. Desenho esquemático representando o funcionamento de um


motor elétrico
Fonte: Ferraz Neto, 2003

Em (a) os pólos magnéticos da bobina são atraídos pelos pólos


magnéticos opostos dos ímãs fixos. Depois, como se pode ver em (b), a bobina
gira para levar esses pólos magnéticos o mais perto possível um do outro mas,

32
(c) ao chegar nessa posição o sentido da corrente é invertido e (d) agora os
pólos que se defrontam se repelem, continuando a impulsionar o rotor
Entretanto, por ser movido a pilhas ou baterias, o funcionamento de um
motor DC é um pouco mais complexo. Não basta apenas colocar ímãs
permanentes fixos e uma bobina, pela qual circule corrente elétrica, de modo
que possa girar entre os pólos desses ímãs. Uma corrente contínua, como é a
fornecida por pilhas ou baterias, é muito boa para fazer eletroímãs com pólos
imutáveis mas, como para o funcionamento do motor é preciso periódicas
mudanças de polaridade, algo tem que ser feito para inverter o sentido da
corrente nos momentos apropriados
Na maioria dos motores elétricos DC, o rotor é um eletroímã que gira entre
os pólos de ímãs permanentes estacionários. Para tornar esse eletroímã mais
eficiente o rotor contém um núcleo de ferro, que o torna fortemente
magnetizado, quando a corrente flui pela bobina. O rotor girará desde que essa
corrente inverta seu sentido de percurso cada vez que seus pólos alcançam os
pólos opostos do estator. O modo mais comum para produzir essas reversões
é usar um comutador (FERRAZ NETO, 2003).

Figura 2.11. Ilustração do comutador e das escovas


Fonte: Ferraz Neto, 2003

A corrente flui ora num sentido ora no outro, no rotor desse motor CC,
graças às escovas de metal (esquerda da ilustração). Essas escovas tocam o
comutador do rotor de forma que a corrente inverte seu sentido a cada meia
volta do rotor (FERRAZ NETO, 2003).
Em sua forma mais simples, um comutador apresenta duas placas de
cobre encurvadas e fixadas isoladamente no eixo do rotor; os terminais do
enrolamento da bobina são soldados nessas placas. A corrente elétrica chega
por uma das escovas, entra pela placa do comutador, passa pela bobina do

33
rotor, 'sai' pela outra placa do comutador e 'retorna' á fonte pela outra escova.
Nessa etapa o rotor realiza sua primeira meia-volta. A figura a seguir ilustra o
processo (FERRAZ NETO, 2003).

Figura 2.12. Funcionamento do comutador


Fonte: Ferraz Neto, 2003

Nessa meia-volta, as placas do comutador trocam seus contatos com as


escovas e a corrente inverte seu sentido de percurso na bobina do rotor. E o
motor CC continua girando, sempre com o mesmo sentido de rotação.
Mas, o motor CC acima descrito tem seus problemas. Primeiro não há nada
que determine qual será o sentido de sua rotação na partida, tanto poderá
iniciar girando para a 'esquerda' como para a 'direita'. Segundo, é que por
vezes, as escovas podem iniciar tocando ambas as placas ou eventualmente
nenhuma; o motor 'não dá partida'! Para que a partida se dê com total
confiança e no sentido certo é preciso que as escovas sempre ‘enviem’
correntes para o rotor e que não ocorra nenhum curto circuito entre as placas
devido às escovas (FERRAZ NETO, 2003).
Na maioria dos motores CC consegue-se tais exigências colocando-se
várias bobinas no rotor, cada uma com seu par de placas no comutador.
Conforme o rotor gira, as escovas suprem a corrente para as bobinas, uma de
cada vez, uma após a outra. A 'largura' das escovas também deve ser bem
planejada (FERRAZ NETO, 2003).
O rotor de um motor CC gira com velocidade angular que é proporcional à
tensão aplicada em suas bobinas. Tais bobinas têm pequena resistência
elétrica e conseqüentemente seriam percorridas por intensas correntes
elétricas se o rotor permanecesse em repouso. Todavia, uma vez em

34
movimento, as alterações do fluxo magnético sobre tais bobinas, geram uma
força contra-eletromotriz extra em energia daquela corrente e baixa as tensões
elétricas sobre tais bobinas. O torque resultante se anulará quando essa
f.c.e.m. se igualar á tensão elétrica aplicada; a velocidade angular passa a ser
constante (FERRAZ NETO, 2003).
Em geral, carregando-se o motor, sua rotação não varia acentuadamente,
mas, uma maior potência será solicitada da fonte de alimentação. Para alterar
a velocidade angular devemos alterar a tensão aplicada ao motor (FERRAZ
NETO, 2003).
O sentido de rotação do rotor depende das assimetrias do motor e
também do sentido da corrente elétrica, invertendo-se o sentido da corrente o
motor começará a girar para trás. (FERRAZ NETO, 2003).

2.3. Fototransistores

Todos os transistores são componentes sensíveis à luz. Os


fototransistores são os transistores que são projetados para fornecer alguma
maneira de se explorar essa característica dos transistores.
Um transistor comum apresenta três terminais: base, coletor e emissor. Já
um fototransistor pode apresentar somente dois: o coletor e o emissor. Nesse
caso a base é que é sensível à luz.
O princípio de funcionamento de um fototransistor é bem simples. Quando
a base do fototransistor for sensibilizada a luz, o transistor estará em estado de
condução. Caso contrário estará no estado de corte.

VCC

FT R1
470

D1
U1
L14G1/TO LED

Figura 2.13. Circuito básico de utilização do fototransistor


Fonte: Adaptado de www.rogercom.com

35
2.4. Processamento digital de imagens

O processamento digital de imagens nasceu da necessidade de se


realizar a transmissão e impressão de imagens (GONZALES, 2000). Um dos
problemas a serem resolvidos é a melhoria da qualidade visual dessas
imagens digitais.
Processar uma imagem significa aplicar métodos nas imagens visando à
melhora de sua qualidade em uma transmissão ou para se retirar alguma
informação de uma figura.
Uma imagem pode ser representada como uma função bidimensional de
intensidade da luz f (x, y), onde x e y são componentes espaciais e f (x, y) o
brilho da imagem naquele ponto. Uma imagem digital, conseqüentemente,
pode ser representada por uma função f (x, y) discretizada, em coordenadas
espaciais e em brilho. Outra forma de representar uma imagem é uma matriz
de “pixels”. (GONZALES, 2000).

Figura 2.14. Forma de representação em eixos de uma figura


Fonte: Bastos, 2002

Figura 2.15. Passos fundamentais em processamento de imagens


Fonte: Adaptado de Gonzales, 2000.

36
2.4.1. Aquisição de imagens

O primeiro passo é a aquisição da imagem, para isso, é necessário um


elemento sensor que capture a imagem e um elemento capaz de digitalizar o
sinal do sensor. Esse sensor pode ser uma câmera e o sinal pode ser
digitalizado por um conversor analógico digital, caso a câmera não realize a
conversão.
Dentre as categorias de sensores é válido citar os sistemas imageamento
de raios X, luz visível e infravermelha.
No caso dos raios-X, a imagem é adquirida através da diferença de
absorção dos raios X pelo objeto.
Nos outros casos, utilizam-se microdensitrômetros, analisadores de
imagem, câmeras vidicon e matrizes de estado sólido fotossensíveis. Os
microdensitrômetros exigem que a imagem a ser digitalizada esteja na forma
de filme negativo ou positivo ou fotografia. As câmeras vidicon e as matrizes de
estado sólido fotossensíveis aceitam imagens nessa forma e ainda podem
digitalizar imagens naturais de intensidade luminosa suficiente para excitar o
detector.

2.4.2. Armazenamento

O armazenamento digital de imagens é dividido em três categorias


principais:
- Armazenamento por curto tempo: Usada durante o processamento e é
provido pela memória computacional.
- Armazenamento On-line: Seu acesso é relativamente rápido e ocorre
nos discos magnéticos.
- Armazenamento em arquivos: Usado quando o armazenamento não
requer acessos freqüentes.

37
2.4.3. Pré - Processamento

O processamento envolve procedimentos algorítmicos e a maioria de suas


funções costumam ser implementadas em software. O hardware especializado
é usado quando há a necessidade de velocidade.
As técnicas de processamento servem para melhorar a qualidade da
imagem digitalizada para que se obtenham mais chances de sucesso nas
etapas seguintes. O pré-processamento tipicamente envolve técnicas para o
realce de contrastes, remoção de ruído e isolamento de regiões cuja textura
indique a probabilidade de informação alfanumérica (BASTOS, 2002).

2.4.4. Segmentação

Segmentar consiste em dividir a imagem em diferentes regiões, que serão


posteriormente analisadas por algoritmos especializados em busca de
informações ditas de "alto-nível" (ALBUQUERQUE, 2000).
Costuma - se usar as técnicas de segmentação para separar duas ou
mais áreas em uma imagem digital. Uma situação em que isso é bastante
importante é quando se quer separar um objeto do fundo na imagem. Isso
resulta em uma imagem binária com apenas 2 tons de cinza, um para o fundo
que costuma ser branco e outro para o objeto que costuma ser preto.
.

2.4.4.1. Detecção de bordas

Uma borda é o limite entre duas regiões com propriedades relativamente


distintas de nível de cinza (GONZALES, 2000). Essa técnica consiste em obter
a derivada primeira e a derivada segunda de um ponto da imagem a partir de
um operador diferencial. A derivada primeira é usada para detectar a presença
de borda e a derivada segunda é usada para determinar em qual parte o pixel
está. Conforme a figura 2.15:

38
Figura 2.16. Detecção de bordas por operadores de derivação
Fonte: Gonzales, 2000.

2.4.4.2. Limiarização

A limiarização é uma técnica de segmentação em que há um determinado


limiar T que separa o objeto do fundo. Esse limiar é um valor de níveis de
cinza. Se o pixel tiver seus níveis de cinza maior que o limiar T ele pertence a
um dos grupos, se for menor ou igual pertence a outro.

39
2.4.5. Afinamento

A técnica de afinamento que costuma ser usada é a de regiões binárias. O


método consiste em aplicar sucessivamente de dois passos aos pontos de
contorno da região. Um ponto de contorno é um pixel de valor 1 que possua
pelo menos 1 vizinho de 8 com valor 0 (GONZALES, 2000).

p9 p2 p3
p8 p1 p4
p7 p6 p5

Tabela 2.14. estrutura de vizinhança de 8


Fonte: Gonzales, 2000

O primeiro passo determina que um ponto deve ser eliminado se:


a) 2 = N(p1) = 6;
b) S(p1) =1;
c) p2*p4*p6 = 0;
d) p4*p6*p8 = 0;
Onde N(p1) é o numero de vizinhos não nulos de p1.
No segundo passo, as condições c e d são alteradas para:
c’) p2*p4*p8 = 0;
d’) p2*p6*p8 = 0;
Dessa forma, para uma iteração tem-se:
1) Aplicação do primeiro passo para marcar os pontos de borda a serem
apagados.
2) Eliminação dos pontos marcados.
3) Aplicação do segundo passo para marcar os ponto de borda a serem
apagados.
4) Eliminação dos pontos marcados
As iterações se repetem até que não se tenham mais pontos que possam
ser eliminados, ou seja, quando todas as condições dos dois passos forem
violadas em uma só iteração.

40
2.4.6. Perseguição de contorno

Para se perseguir um contorno basta se saber a direção dos pixels e ir


analisando um por um. Se isso for feito contando os pixels que já foram
analisados é possível se ter o tamanho de uma linha em pixels. Assim, usando-
se uma pequena associação de escalas, é possível se ter o tamanho de uma
dimensão de um objeto real, a partir da imagem.

41
3.E SPECIFICAÇÂO

3.1 Descrição

O projeto consiste no desenvolvimento de um sistema que permita


separar certos objetos definidos (caixas), distinguindo–os através de sua área
ou através de suas dimensões. Para tal fim, o projeto possui uma esteira na
qual os objetos passam e uma câmera (webcam ou câmera digital) que captura
a imagem do objeto. A esteira conta com um controle de velocidade do motor
DC que rotaciona a esteira (aumentar ou diminuir a velocidade de rotação da
esteira), com um sensor que detecte o momento no qual a imagem pode ser
capturada, um sistema de iluminação para ter-se a melhor condição para
realizar a captura da imagem, displays de 7 segmentos indicando o numero de
objetos que passaram, dois leds sinalizando visualmente o tipo do objeto e um
dispositivo que separe os objetos de acordo com o seu tipo (um motor
conectado a uma haste que mudará o destino do objeto). Tudo isso pode ser
controlado e analisado por um painel de controle em conjunto com um
software. Além disso, o software realiza a captura da imagem e após processá-
la apresenta as medidas, a quantidade de objetos verificados, quantidade e
porcentagem de objetos de cada tipo. O software conta com uma interface
mais simples e amigável o possível e que permite um amplo controle da
situação. A câmera fica conectada ao microcomputador e tem sua interface
com a esteira através do software e da comunicação serial.

3.2. Hardware

3.2.1. Construção da Esteira

A construção da esteira foi baseada nos desenhos técnicos seguintes,


sendo que a lateral direita segue as mesmas medidas da lateral esquerda. A
esteira foi construída utilizando madeira na base e em alguns suportes.

42
Figura 3.1. Desenho técnico da esteira

Figura 3.2. Desenho técnico da lateral esquerda da esteira

Figura 3.3. Desenho técnico das laterais superior e inferior da esteira

43
O metalon perfilado foi utilizado na confecção do suporte da câmera e da
luminária, que foi construído conforme os dois desenhos técnicos seguintes.

Figura 3.4. Desenho técnico do suporte da câmera e da luminária

44
Figura 3.5. Desenho técnico do suporte da câmera e da luminária vista de
outro lado

Chapas de PVC foram usadas para fazer o acabamento da esteira e para


construir o separador, o painel de controle, as peças e suportes do emissor de
laser e do receptor de luz e ainda, no suporte da câmera e da luminária. As
figuras a seguir mostram os desenhos técnicos desses elementos.

45
Figura 3.6. Desenho técnico da base de sustentação da câmera no suporte

Figura 3.7. Desenho técnico do emissor de laser

46
Figura 3.8. Desenho técnico do suporte do emissor de laser

Figura 3.9. Desenho técnico do encaixe do fototransistor

47
Figura 3.10. Desenho técnico do suporte do fototransistor

Figura 3.11. Desenho técnico do separador

Os eixos foram construídos com tubos de PVC, sendo que o eixo principal
foi acoplado ao motor DC de vidro elétrico de automóvel.

48
O material sobre qual vão passar os objetos é o courino. Um motor DC de
vidro elétrico de automóvel rotaciona a esteira e um motor DC de limpador de
pára-brisas rotaciona o dispositivo separador.
É no painel de controle localizado na esteira que estão as placas de
circuitos elétricos, o sensor, os leds e os displays. A figura seguinte mostra o
desenho técnico do painel de controle.

Figura 3.12. Desenho técnico do Painel de Controle

3.2.2. Funções do Hardware

As principais funções do Hardware são:


- Fazer a esteira girar através do motor DC de vidro elétrico de automóvel.
- Determinar a hora em que a imagem deve ser capturada através do
fototransistor.
- Controlar o acionamento do motor DC realizando a separação dos
objetos.
- Controlar o acionamento dos displays e leds.

49
- Realizar a comunicação serial com o computador, através do
microcontrolador.

3.2.3. Componentes do Hardware

Os principais componentes utilizados serão descritos abaixo:


- Uma webcam com driver para Windows.
- Motor DC retirado de um limpador de pára-brisas de automóvel,
acoplado em um dos eixos da esteira.
- Interface para os dispositivos
- Fototransistor L14G1.
- Motor DC modeloMDN3JL4DSF.
- Interface com o fototransistor, o motor DC e os leds
- Displays de 7 segmentos e interface
- Microcontrolador AT89S8252 da família 8051 e interface de uso
- Iluminação feita através de uma luminária construída com leds brancos
de alta luminosidade.
- Fonte de computador que será responsável pela alimentação (5V e 12V)

3.2.4. Firmware

As linguagens de programação usadas para desenvolver o fimware, são a


linguagem C e a linguagem assembly. O ambiente de desenvolvimento é o Keil
da microvision, utilizando o sistema operacional Windows 2000/XP.

50
3.2.5. Diagrama em blocos do sistema

Figura 3.13. Diagrama em blocos do sistema

3.2.6. Seqüência de Funcionamento

Quando o sistema é ligado deve-se colocar a caixa na frente do sensor da


esteira que começará a girar. O sensor da esteira (fototransistor) estará
esperando que um objeto passe por ele para que ele possa mandar um sinal
para o microcontrolador de que a imagem já pode ser capturada. Cada vez que
esse sensor for acionado, o contador visualizado nos displays de 7 segmentos
será incrementado. Esse sinal do fototransistor é transmitido do
microcontrolador para o software, através da comunicação serial, e acionará a
captura de imagem pela webcam.
Com a imagem capturada, o software trata a imagem e manda uma
resposta para o microcontrolador que dirá se o dispositivo separador deve ser
acionado ou não. Se o dispositivo for acionado o microcontrolador acenderá um

51
led indicando que o objeto vai ser separado. Caso contrário, um outro led será
aceso indicando que não foi necessária a separação.
O software também pode mudar a velocidade da esteira. Se isso ocorrer,
a velocidade irá mudar instantaneamente, pois o firmware vai ler a velocidade
da esteira a cada ciclo de programa. Esse processo se repete até que se
desligue o sistema.

3.3. Especificação de Software

3.3.1 Funções do Software

O software tem como principais funções:


- Controle da velocidade de rotação da esteira.
- Receber o sinal de ativação da captura da imagem.
- Acionar a câmera para que ela realize a aquisição da imagem.
- Realizar o processamento digital de imagem na foto do objeto.
- Acionar o dispositivo separador caso necessário.
- Mostrar os resultados da analise da foto.

3.3.2. Ambiente de desenvolvimento

O software foi desenvolvido em linguagem C/C++, no ambiente de


desenvolvimento Borland C++Builder 6.0, utilizando o sistema operacional
Windows 2000/XP.

3.3.3. Funcionamento do software

O software é o responsável por dizer em qual velocidade a esteira deve


rodar. Então, ele deve enviar para o microcontrolador um sinal indicando essa
velocidade de acionamento do motor. Com o motor rodando na velocidade
indicada, o software espera o sensor ser acionado. Quando isso ocorre, o
software ativa a captura da imagem através da câmera. Após a aquisição da
imagem ela deve ser processada. Essa parte será melhor explicada
separadamente após esse item.

52
Depois de processada a imagem, o programa envia um sinal ao
microcontrolador dizendo se o dispositivo separador deve ou não ser ativado.
Em seguida, apresentará os resultados na tela. Esses resultados são as
dimensões do objeto, quantos objetos já foram analisados e a porcentagem de
cada tipo de objeto. O usuário terá ainda a opção de salvar os resultados
apresentados.

3.3.4. Processamento digital de imagens

Figura 3.14. Processamento de Imagem utilizado no sistema

O primeiro passo para se realizar um processamento de imagem é a


aquisição da imagem. Essa aquisição é realizada pela câmera acoplada à
esteira. Para se obter uma imagem mais fácil de ser processada, o ambiente
não deve possuir mais de uma fonte de luz incidindo na esteira. Essa situação
causa sombras escuras demais e reflexos que atrapalham o processamento. O
software é o responsável por acionar a câmera no momento da aquisição após
os 2 ou 3 segundos que é o tempo levado pela caixa para chegar até a câmera.

53
Depois de capturada, a imagem deve passar por um pré-processamento,
que irá prepará-la para receber o processamento propriamente dito. Os
métodos utilizados serão, o filtro de média móvel e a transformação da imagem
RGB24 para tons de cinza.
O filtro de média móvel é o responsável por tirar ruídos da imagem. Em
processamento de imagens, ruídos são regiões muito pequenas com
intensidade de cor muito diferente da dos seus vizinhos. O filtro implementado,
percorre toda a matriz de dados de imagem, tirando a média dos do ponto da
vez e de seus vizinhos e colocando o valor da média neste ponto. Neste caso
foi usada a “vizinhança de 2”, ou seja, participam da média 2 vizinhos em cada
direção, cima, baixo, direita e esquerda, formando uma matriz 5X5 pixels. Essa
quantidade foi escolhida para não se apresentar muita intensidade de efeito de
borda, o que diminui a precisão das medidas.
Também como parte do pré-processamento tem-se um algoritmo para
converter uma imagem RGB24 em uma imagem em tons de cinza. Esse
algoritmo consiste em percorrer a matriz de dados da imagem tirando a média
dos valores de R, G, e B atribuindo a todos estes, o valor da média. A figura
seguinte mostra o resultado do pré-processamento.

Figura 3.15. Imagem obtida após o pré-processamento

54
Em seguida aplica-se a segmentação. A segmentação é um processo que
consiste em separar um objeto do fundo da imagem. O método de
segmentação utilizado foi de limiarização que consiste em binarizar os pixels
de uma imagem. Na limiarização, é feito um histograma da imagem em tons de
cinza, para se poder definir um limiar T. Pixels de intensidade menor que T
recebem ‘0’ e os de intensidade maior que T recebem ‘255’. Por esse motivo é
que a sombra não pode ser muito escura. Caso a sombra seja muito escura, os
pixels correspondentes a ela podem estar abaixo do limiar sendo confundidos
com os pixels da caixa. A figura que segue apresenta o resultado desta etapa.

Figura 3.16. Imagem obtida após a limiarização

Para se retirar as medidas das caixas, o algoritmo implementado foi um


detector de cantos. Um detector de cantos percorre a matriz procurando por
cantos nos pixels pretos. Levando-se em conta que um dos cantos possui as
coordenadas XY mínimas e que outro possui as coordenadas XY máximas, já
se tem dois cantos. Os outros dois possuem as coordenadas (X máximo, Y
mínimo) e (X mínimo, Y máximo) respectivamente. Encontrando-se estes
pontos basta, aplicar a conhecida fórmula da geometria analítica que calcula a
distância entre dois pontos em um plano:
D²=(X-Xo)²+(Y-Yo)²

E assim têm-se as medidas dos quatro lados de um retângulo, como


mostra a figura seguinte.

55
Figura 3.17. Imagem obtida após a detecção de cantos

3.4. Requisitos Mínimos

O sistema de Visão Computacional necessita dos seguintes requisitos


mínimos de Hardware e Software.
Requisitos de Hardware:
?? Processador 600 MHZ ou superior;
?? 128 MB de memória RAM;
?? 20 MB de espaço livre no disco rígido;
?? Porta Serial que suporte a velocidade de 9600 bps;
?? Porta USB;
?? CD-ROM;
?? Usar o sistema em ambientes de iluminação semelhante à dos
testes realizados apresentados na seção de “Resultados” deste
documento.

Requisitos de Software:
?? Sistema Operacional Windows 2000/XP;
?? Driver de webcam (presente no CD-ROM deste projeto).

56
4. PROJETO

4.1. Hardware

4.1.1. Sinais de interface

Rótulo do Tipo do Lógica de Função


Sinal Barramento Operação
ME Controle 0/1 Saída do microcontrolador
para a placa de interface com
os motores para o
acionamento do.motor da
esteira
M1 Controle 0/1 Saída do microcontrolador
para a placa de interface com
os motores para o
acionamento do motor do
separador.
M2 Controle 0/1 Saída do microcontrolador
para a placa de interface com
os motores para o
acionamento do motor do
separador.
M Controle 0/1 Saída do microcontrolador
para a placa de interface
como motor de passo para o
acionamento deste.
ME Controle 0/1 Saída da placa de interface
para o motor da esteira para
o acionamento deste.
M1 Controle 0/1 Saída da placa de interface
para o motor do separador
para o acionamento deste.
M2 Controle 0/1 Saída da placa de interface
para o motor do separador
para o acionamento deste.
EFT Controle 0/1 Entrada do microcontrolador
e saída do circuito do
fototransistor que aciona a
interrupção 0 indicando que
um objeto passou.
L1 Controle 0/1 Saída do microcontrolador
para a placa de interface que
aciona o led 1 de sinalização
do tipo do objeto
L2 Controle 0/1 Saída do microcontrolador
para a placa de interface que

57
aciona o led 2 de sinalização
do tipo do objeto.
AD0 – AD3 Dados 0/1 Saídas do barramento de
dados do microcontrolador
que mostram a contagem no
display 1 de 7 segmentos
AD3 – AD7 0/1 Saídas do barramento de
dados do microcontrolador
que mostram a contagem no
display 2 de 7 segmentos

Tabela 4.1. Sinais de interface

4.1.2. Lista de componentes

4.1.2.1. Lista de componentes da placa do microcontrolador 8051

1 1 Microcontrolador AT89S8252
2 2 Capacitores de 33pF
3 1 Cristal de clock de 11,059MHZ
4 1 Soquete de 40 pinos
5 Barras de pinos com conexões para 40 pinos
6 1 Push-Button NF
7 1 Capacitor de 10uF
8 1 Resistor de 100Ohms
9 1 Resistor de 8k2

Tabela 4.2. Lista de componentes da placa do microcontrolador 8051

1 1 Conversor MAX232
2 1 Conector DB9 fêmea
3 4 Capacitores de 10uF
4 1 Soquete de 16 pinos

Tabela 4.3. Lista de componentes da placa de interface serial

4.1.2.2. Lista de componentes das placas de interface

1 9 Resistores de 10k
2 2 TIP 122
3 2 TIP 127
4 1 TIP 140

58
5 4 transistores BC548
6 3 Resistores de 1k
7 1 7404
8 174LS541
9 1 Led verde
10 2 Leds vermelhos
11 1 Fotransistor
12 1 Capacitor de 150p
13 1 74LS244
14 2 Resistores de 470 Ohms
15 2 BC 4511
16 2 Displays de 7 segmentos vermelhos

Tabela 4.4. Lista de componentes das placas de interface

4.2. Software

4.2.1. Diagrama de Contexto

Figura 4.1. Diagrama de contexto do sistema

59
4.2.2. Diagrama de casos de uso

Figura 4.2. Diagrama de casos de uso

4.2.3. Diagrama de classes

cImagem
cCaptura
+ *BitmapImage: char
1 1 + filePtr: File
+ novoNome: String + bitmapFileHeader: BFH
+ capDriver: CAPDRIVERCAPS + bitmapInfoHeader: BITMAPINFOHEADER
Coleta de dados
+ capStatus: CAPSTATUS + altura: int
+ janela: HWND VFWAPI + largura: int
+ altura_caixa: float
- TirarFoto(String nome): void + largura_caixa: float
- FormatoDeVideo(): void + area_caixa: float
- VideoSource(): void + A1max: float
+ A1min: float
- Preview(): void + Alt1max: float
- Driver(): void + Alt1min: float
+ Lar1max: float
+ Lar1max: float
cSerial

+ dcb:DCB - CarregaBMP (String nomeBMP): bool


+ handle:HANDLE - NiveisdeCinza(): void
1 1 - MediaMovel(int n): void
- Serial(AnsiString,int,int,int,int): - Binariza(int valor): void
void Recepção/envio de dados
- Enviar(char*,int): void - Medidas(): void
- Receber(int &): unsigned char - Compara(): int

60
Figura 4.3. Diagrama de classes

4.2.4. Fluxograma

Figura 4.4. Fluxograma do software

61
4.2.5. Diagramas de seqüência

Figura 4.5: Diagramas de seqüência de Inicio com o objeto Imagem

Figura 4.6. Diagramas de seqüência de Inicio com o objeto Captura

62
Figura 4.7. Diagramas de seqüência de ConfVideoSource com o objeto
Captura

Figura 4.8. Diagramas de seqüência de ConfFormatoDeVideo com o objeto


Captura

63
Figura 4.9. Diagramas de seqüência de Form1 com o objeto Captura

Figura 4.10. Diagrama de seqüência dos métodos de EnviarrByte();

Figura 4.11. Diagrama de seqüência dos métodos de ReceberByte();

64
4.2.6. Interface

Figura 4.12. Tela inicial do Software

Figura 4.13. Tela de configuração do formato de vídeo

65
Figura 4.14. Tela de configuração do Vídeo Source

Figura 4.15. Tela de configuração de caixa

66
4.3. Firmware

4.3.1. Diagrama de estados

Figura 4.16. Diagrama de estados

4.3.2. Fluxograma do firmware

Figura 4.17. Fluxograma do firmware

67
5. RESULTADOS

Para verificar os resultados obtidos, o sistema foi submetido a testes


com caixas de 4 tamanhos, todas da cor preta. Duas caixas tinham áreas bem
próximas e em alguns casos foram separadas e em outros não. A precisão que
se conseguiu foi relativamente boa, levando-se em conta a simplicidade do
processamento de imagem. Em uma situação onde a luz não favorecia muito, o
maior erro de medição encontrado durante os testes foi de 4mm para mais ou
para menos. Em situações favoráveis, o sistema apresentou um excelente
rendimento e nenhuma das caixas que passaram na esteira deixou de ser
medida e avaliada. O sistema aceita as caixas em qualquer posição, pois seu
algoritmo de retirada de medidas é invariante com relação a isso. O sistema
também foi testado com a luminária acesa em locais com pouca luz e locais
sem luz nenhuma. O erro máximo não foi maior do que o anterior. E pôde-se
observar que quando há a incidência de duas ou mais fontes de luz, a sombra
fica escura demais o que faz com que essa não seja uma condição
recomendada para o uso do sistema. A figura abaixo mostra as situações onde
o sistema apresentou sucesso. Na primeira situação usou-se a luz amarela, na
segunda a luz solar e na terceira a luz da luminária.

Figura 5.1. Situações em que o sistema apresentou sucesso

O diagrama da figura 5.2 representa os valores numa escala de tons de


cinza, nos quais a sombra é tolerada e o reflexo não interfere muito na cor da
caixa. Se este esquema for respeitado o sistema deve apresentar sucesso. Na
figura 5.3, tem-se a cor máxima da sombra e a cor mínima da caixa na escala
de tons de cinza. Esse esquema pode ser usado para comparações da
situação de iluminação apresentada, com a ideal para verificar se esta situação
é tolerada.

68
Figura 5.2. Valores de sombra e cor para o sistema apresentar sucesso

Figura 5.3. Valores comparativos

O funcionamento do Hardware também apresentou resultados bastante


satisfatórios, pois todos os dispositivos funcionaram corretamente. Inclusive o
dispositivo separador que foi motivo de dúvidas na fase de implementação do
projeto. Ele funcionou adequadamente e realmente conseguiu desviar a
trajetória das caixas fazendo com que elas caíssem no depósito lateral e não
no frontal como aconteceria se ele não funcionasse.

69
6. CONCLUSÃO

A implementação deste sistema demonstra que processos simples como


o de separar caixas em uma indústria, já pode ser automatizado, diminuindo a
possibilidade de falhas humanas. Com esse sistema também se pode perceber
o poder do processamento digital de imagens. Se o processamento simples
que foi utilizado já demonstrou eficiência, um processamento mais avançado
aumentaria a precisão do sistema e permitiria a identificação de outros
elementos das caixas.
Como implementações futuras pretende-se melhorar os algoritmos de
retirada de medidas das caixas para se obter uma melhor precisão. A
separação por cores também é um dos objetivos futuros e até já está sendo
estudada. Pode-se também trabalhar com reconhecimento de padrões mais
elaborados, utilizando-se caixas com rótulos e coisas escritas para se fazer um
controle de qualidade da impressão desses elementos na caixa.
A viabilidade do sistema é indiscutível tendo em vista os resultados
eficientes apresentados e a quantidade de melhorias que podem ser feitas
aumentando ainda mais os setores nos quais o Sistema de Visão
Computacional poderá ser utilizado.

70
7. CRONOGRAMA

Nº Atividade Início Fim


1 Fazer a proposta do projeto 20/2/06 4/3/06
2 Pesquisas iniciais 22/2/06 6/3/06
3 Estudo preliminar das placas e componentes que serão usados 9/3/06 12/3/06
4 Obtenção dos motores e suas especificações 13/3/06 17/3/06
5 Desenho técnico do projeto 13/3/06 17/3/06
6 Desenvolvimento da especificação do projeto (Hardware e Software) 13/3/06 30/3/06
7 Estudo e obtenção dos materiais para a confecção da esteira 13/3/06 30/3/06
8 Confecção e testes das placas 4/4/06 18/4/06
9 Programação do mIcrocontrolador 19/4/06 1/5/06
10 Construção da esteira 5/4/06 1/5/06
11 Testes do Hardware 2/5/06 5/5/06
12 Implementação do software 5/5/06 5/6/06
13 Confecção da monografia 5/6/06 12/6/06
14 Testes e correções 12/6/06 9/10/06

71
8. LEVANTAMENTO DE CUSTOS

COMPONENTE CUSTO
Materiais para a construção da esteira R$ 500,00
WebCam R$ 170,00
Motor DC de vidro elétrico de automóvel R$ 120,00
Motor DC de limpador de pára-brisas R$ 45,00
Microcontrolador AT89S8252 R$ 35,00
Outros componentes R$ 150,00
Displays R$ 10,00
Emissor de laser R$ 10,00
Cabos Serial e USB R$ 20,00
Fonte de microcomputador R$ 65,00
Horas de trabalho (R$12,00 a hora) R$ 10.000,00
Custo Total R$ 11.125,00

72
9. REFERÊNCIAS BIBLIOGRÁFICAS

ALBUQUERQUE, Márcio Pontes. Processamento de Imagens: Métodos e


Análises.
http://www.cbpf.br/cat/pdsi/pdf/ProcessamentoImagens.PDF. Consultado
em 02/04/2006.

BASTOS, Vanessa Parodes. Técnicas de Segmentação de Imagens para


Recuperação de Informações Visuais.
http://atlas.ucpel.tche.br/~vbastos/pi.htm. Consultado em 26/03/2006.

FERRAZ NETO, Luis, Motores Elétricos


http://www.feiradeciencias.com.br/sala22/motor_teoria1.asp

GONZALES, Rafael. Processamento Digital de Imagens. São Paulo:


Edgar Blücher, 2000.

MARINHO, José Edson dos Santos. Mini-Curso de microcontrolador.


http://meusite.mackenzie.com.br/ivair/download/minicurso.pdf. Consultado
em 22/03/2006.

MOHR, Hari Bruno. A Família de Microcontroladores 8051.


http://www.eel.ufsc.br/eel7030/8051.pdf. Consultado em 22/03/2006.

NICOLOSI, Denys Emilio Campion. Microcontrolador 8051 detalhado. São


Paulo: Erica, 2000.

NICOLOSI, Denys Emilio Campion. Microcontrolador 8051 com


Linguagem C. São Paulo: Erica, 2005.

ROGERCOM.
http://www.rogercom.com. Consultado em 26/03/2006.

73
ROLIM, Jaqueline. Eletricidade Básica – Circuitos Optoeletrônicos.
http://www.labspot.ufsc.br/~jackie/eel7011/Aula10.PDF. Consultado em
26/03/2006.

SAMBATTI, Francisco Sérgio. Microcontroladores Família MCS-51


http://www.inf.unioeste.br/~anibal/ftp/AOC/Apt8051.pdf. Consultado em
22/03/2006.

SILVA JÚNIOR, Vidal Pereira. Aplicações práticas do microcontrolador


8051.
Tatuapé: Érica, 2000.

VENTURI, Jacir. Álgebra Vetorial e Geometria Analítica. São Paulo: Erica,


2000.

74

Você também pode gostar