Vous êtes sur la page 1sur 21

TUTORIAL Leitura de Sensores

Autor: Tiago Lone Nvel: Bsico Criao: 07/03/2006 ltima verso: 18/12/2006

PdP
Pesquisa e Desenvolvimento de Produtos

http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

http://www.automato.com.br atendimento@automato.com.br

1 Introduo
Nesse tutorial vamos aprender como podemos ler, atravs de um programa no computador, parmetros do ambiente que so capturados por sensores conectados ao Mdulo de Sensores ou ao Mdulo de Sensores Genrico do KDR5000 ou s entradas de sensores do MEC1000. Criaremos dois projetos, um em que fazemos a leitura de um sensor de cada vez e outro em que fazemos a leitura de vrios sensores em uma nica operao e apresentamos esses valores em um grfico.

2 Material
Nesse tutorial vamos utilizar o Mdulo de Sensores e o Mdulo de Sensores Genrico do KDR5000 ou o MEC1000, com alguns sensores conectados a eles. Para a criao do programa ser necessrio o Borland Delphi 6. A seguir a imagem do Mdulo de Sensores com vrios sensores conectados a ele.

Figura 1: Mdulo de Sensores. 1-Sensor de Temperatura, 2-Sensor de Luminosidade, 3-Potencimetro Linear, 4-Potencimetro Angular, 5-Microfones, 6Sensor de Vibrao, 7-Sensor de Peso, 8-Sensor de Distncia, 9-Par ptico I, 10Par ptico II, 11-Chave Magntica, 12-Entrada auxiliar I, 13-Entrada auxiliar II, 14-Conector flat de 20 vias para conexo com o Mdulo Principal.

3 Projeto
Vamos criar dois projetos nesse tutorial. O primeiro ser um programa que apenas l o valor da leitura de um sensor e o apresenta em forma numrica. Ser possvel ler apenas um sensor de cada vez. A interface desse programa ser a seguinte.

Figura 2: Primeiro programa que ser criado nesse tutorial.

O segundo programa ir ler todos os sensores simultaneamente e apresentar essas leituras em uma forma de grfico. Sua interface ser a seguinte.

Figura 3: Segundo programa que ser criado nesse tutorial.

Vamos iniciar o desenvolvimento criando a interface grfica do primeiro programa. 2

Vamos utilizar o projeto criado no tutorial Base e em cima dele adicionar componentes e cdigo. Para isso copiamos o projeto daquele tutorial e vamos adicionar alguns componentes grficos extras. A interface do programa composta por trs componentes Label, um Button e um ComboBox. Um Label utilizados para indicar que o ComboBox ser utilizado para selecionar o sensor que queremos ler. Outro utilizado para indicar que o Label com letras maiores mostra a leitura do sensor e por fim, o ltimo Label apresenta a leitura do sensor. Temos ainda o ComboBox, que como j foi dito, utilizado para selecionar o sensor que queremos ler e um Button que utilizado para atualizar a leitura do sensor. Todos esses componentes podem ser encontrados na aba de componentes Standard. A seguir uma imagem dessa aba.

Figura 4: Aba "Standard" da Barra de componente.

Vamos adicionar um Label e um ComboBox para a seleo do sensor que queremos ler. O componente Label possui o seguinte cone:

Figura 5: cone do componente Label.

E o componente ComboBox possui o seguinte cone:

Figura 6: cone do componente ComboBox.

Adicionamos um Label e modificamos as seguinte propriedades. Name Caption Font/Style/fsBold = = = LabelSensor Sensor: true

Em seguida adicionamos um componente ComboBox e modificamos as propriedades a seguir. Name Style Items.Strings = = = ComboBoxSensor csDropDownList 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 3

ItemIndex

Dessa forma teremos nosso Form principal com a seguinte aparncia.

Figura 7: Aparncia do Form aps adio dos componentes para seleo do sensor que ser lido.

Em seguida adicionamos mais dois Labels e modificamos as seguinte propriedades do primeiro. Name Caption Font/Style/fsBold = = = LabelLeitura Leitura: true

E as seguintes propriedades do outro Label, que ir apresentar o valor da leitura do sensor. Name Caption Font/Style/fsBold Font/Style/Size = = = = LabelValorLeitura 0 true 14

Assim teremos a seguinte interface grfica.

Figura 8: Interface grfica aps a adio dos componentes para apresentao do valor da leitura do sensor.

O ltimo passo para finalizar nossa interface a adio de um boto para realizar a leitura. Utilizaremos um componente Button que pode ser encontrado na aba Standard e possui o seguinte cone.

Figura 9: cone do componente Button.

Modificamos as seguintes propriedades. Name Caption Font/Style/fsBold = = = ButtonLer Ler true

Assim a interface grfica est completa. Vamos apenas modificar um detalhe, a propriedade Caption do Form principal, que ainda possui a mensagem atribuda a ela no projeto Base. Vamos modificar essa propriedade de Projeto Base para Sensores I. A aparncia final do Form principal ser a seguinte.

Figura 10: Interface grfica completa do programa.

Com a interface grfica completa, vamos para a implementao do cdigo. O primeiro 5

passo para isso criar um manipulador para o evento OnClick do boto Ler. Para fazer isso podemos selecionar o componente Button correspondente, ir no Object Inspector, selecionar a aba Events e dar um duplo clique sobre a linha que est escrito OnClick. Uma forma mais fcil de fazer isso apenas dar um duplo clique sobre o boto no Form e com isso o Delphi ir criar automaticamente um manipulador para o evento OnClick. O seguinte cdigo ser criado. Procedure TFormMain.ButtonLerClick(Sender: TObject); begin end; Dentro desse manipulador adicionamos o cdigo que ir fazer a leitura do sensor selecionado. Para isso, utilizaremos o mtodo SensorReadNow da biblioteca de controle do Kit. Esse mtodo possui a seguinte declarao. Function SensorReadNow(sensor : Integer) :Integer;

Como podemos ver, esse mtodo possui um parmetro do tipo Integer. Esse parmetro indica qual canal de sensor deve ser lido. Tanto o Mdulo de Sensores quanto o Mdulo de Sensores Genrico possuem 16 canais de sensores, logo esse parmetro pode variar de 0 15 quando estamos utilizando esses mdulos. Esse mtodo retorna um valor do tipo Integer. Esse retorno representa a leitura do sensor. Para sensores analgicos esse valor varia de 0 1023 e para sensores digitais esse valor 0 ou 1. Utilizaremos esse mtodo no manipulador de evento do clique do boto Ler. A seguir, o incio do cdigo desse manipulador. procedure TFormMain.ButtonLerClick(Sender: TObject); var // Varivel para armazenar valor da leitura valor : integer; begin // Faz a leitura e armazena na varivel "valor" valor:= kit.SensorReadNow(ComboBoxSensor.ItemIndex); ...

end; Nesse incio de cdigo declaramos uma varivel denominada valor que ir conter o valor da leitura do sensor. Para fazer essa leitura, chamamos o mtodo SensorReadNow e passamos como parmetro o valor da posio do tem selecionado no ComboBox de seleo de sensores. A propriedade ItemIndex de um ComboBox indica a posio do tem selecionado no momento. Os tens do ComboBox de seleo de sensor foram adicionados na ordem correta para que a posio deles dentro do ComboBox fosse equivalente ao valor que deve ser passado como parmetro para represent-los. Seguindo a tabela abaixo, podemos localizar a resposta de qual sensor ser lida para determinado canal selecionado atravs do ComboBox.

Canal 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

Mdulo de Sensores Potencimetro II Microfone Vibrao Chave Magntica Temperatura Luminosidade Potencimetro I No utilizada Auxiliar I 5V 12V Par ptico I Peso Distncia Auxiliar II Par ptico II

Mdulo de Sensores Genrico Conector 1: Primeira entrada analgica Conector 1: Segunda entrada analgica Conector 1: Terceira entrada analgica Conector 1: Entrada digital Conector 2: Primeira entrada analgica Conector 2: Segunda entrada analgica Conector 2: Terceira entrada analgica Conector 2: Entrada digital Conector 3: Primeira entrada analgica Conector 3: Segunda entrada analgica Conector 3: Terceira entrada analgica Conector 3: Entrada digital Conector 4: Primeira entrada analgica Conector 4: Segunda entrada analgica Conector 4: Terceira entrada analgica Conector 4: Entrada digital

O retorno do mtodo SensorReadNow armazenado na varivel denominada valor. 7

Com o valor armazenado, falta apenas apresentar esse valor. o que fazemos em seguida. procedure TFormMain.ButtonLerClick(Sender: TObject); var // Varivel para armazenar valor da leitura valor : integer; begin // Faz a leitura e armazena na varivel "valor" valor:= kit.SensorReadNow(ComboBoxSensor.ItemIndex); // Converte a leitura para String e atribui // propriedade Caption do "LabelValorLeitura" LabelValorLeitura.Caption := IntToStr(valor); end; Essa nova linha de cdigo apenas converte o valor armazenado na varivel denominada valor para uma String, utilizando o mtodo IntToStr, e atribui essa String propriedade Caption do Label denominado LabelValorLeitura. Pronto, com isso finalizamos nosso programa e podemos fazer um teste de seu funcionamento. Para isso, vamos no menu Run Run ou pressionamos F9. Se no houver nenhum erro o programa ser compilado e executado. Com um Kit conectado em alguma porta serial podemos testar se o programa est funcionando. Selecione a porta serial correta, selecione algum canal de sensor e pressione o boto Ler. O texto do Label denominado LabelValorLeitura dever apresentar o valor da leitura realizada. A aparncia do programa devera ser a seguinte.

Figura 11: Aparncia final do programa.

Agora que finalizamos esse primeiro programa vamos iniciar o desenvolvimento do prximo. Como j foi dito, esse segundo programa ir ler todos os sensores simultaneamente, apresentar essas informaes de forma grfica e ter a seguinte aparncia.

Figura 12: Aparncia do segundo programa que ser criado nesse tutorial.

Como no projeto anterior, nosso primeiro passo ser o desenvolvimento da interface grfica do programa. Novamente, vamos utilizar o projeto criado no tutorial Base e em cima dele adicionar componentes e cdigo. Para isso copiamos o projeto daquele tutorial e vamos adicionar alguns componentes grficos extras. Como fizemos no projeto anterior, vamos modificar a propriedade Caption do Form principal de Projeto Base para Projeto Sensores II. A interface desse programa composta por um componente Chart, que ir apresentar as informaes dos sensores em forma de grficos, um Button, utilizado para realizar uma leitura e um Panel utilizado apenas para criar uma barra inferior onde ser adiocionado o boto de leitura. Os componentes Button e Panel podem ser encontrados na aba Standard da barra de componentes. J o Chart encontrado na aba Additional. J vimos o cone do componente Button anteriormente, a seguir o cone do componente Panel.

Figura 13: cone do componente Panel.

Vamos adicionar um componente Panel ao Form principal e modificar as seguintes propriedades.

Name Align Caption Height

= = = =

PanelInferior alBottom (deixar em branco) 41

Dentro desse Panel adicionamos um componente Button e modificamos as seguintes propriedades. Name Caption Font/Style/fsBold = = = ButtonLer Ler true

Dessa forma teremos a seguinte interface at o momento.

Figura 14: Interface do programa aps a adio de um Panel e um Button.

Agora temos que adicionar o componente Chart que pode ser encontrado na aba Additional da barra de componentes.

10

Figura 15: Aba "Additional" da barra de componentes.

Esse componente possui o seguinte cone:

Figura 16: cone do componente Chart.

Adicionamos esse componente e modificamos as seguintes propriedades. Name BackColor View3D Align = = = = ChartSensores clWhite false alClient

Aps modificar essas propriedades clicamos com o boto direito do mouse sobre o componente Chart, onde um menu ser apresentado e selecionamos a opo EditChart nesse menu. Com isso, ser apresentada uma janela onde podemos configurar vrios parmetros do componente Chart. Essa janela tem a seguinte aparncia.

11

Figura 17: Janela de configurao de um componente Chart.

Temos que adicionar grficos ao componente Chart. Esses grficos so denominados Series na nomenclatura desse componente. Cada canal de sensor dever possuir uma Serie correspondente a ele. Como os mdulos que estamos utilizando suportam at 16 canais de sensores, ento vamos adicionar 16 Series a esse Chart. Podemos fazer isso indo na aba Chart / Series, da janela de configurao que nos foi apresentada, e nessa aba pressionar o boto Add.... Ser apresentada uma tela onde podemos selecionar o tipo do grfico que queremos adicionar. Todas as 16 Series que iremos adicionar sero do tipo Fast Line.

12

Figura 18: Tela para a seleo do tipo de "Serie".

Aps a adio de todos os grficos, a janela de configurao ter a seguinte aparncia.

Figura 19: Janela de configurao do Chart aps adio das "Series".

Para uma melhor visualizao dos grficos, vamos remover o ttulo e a legenda do Chart. Para isso temos que desmarcar a opo Visible na aba Chart / Titles e Chart / Legend. 13

Figura 20: Tela de configurao para remoo do ttulo do grfico. Observe que a opo "Visible" foi desmarcada.

Figura 21: Tela de configurao para remoo da legenda do grfico. Observe que a opo "Visible" foi desmarcada.

Outra configurao que interessante que modifiquemos o valor mnimo e mximo apresentados no eixo Y do grfico. Pela configurao padro esses valores so definidos 14

automaticamente conforme vamos adicionando valores, no entanto, como o valor da leitura dos sensores varia de 0 1023, ento podemos definir que o eixo Y ir apresentar valores apenas nessa faixa. Isso facilitar a interpretao do grfico pois o valor mnimo e mximo de apresentao ser sempre o mesmo. Podemos modificar esses valores na aba Chart/Axis. Nessa aba selecionamos o eixo Left, que o eixo Y, em seguida desmarcamos a opo Automatic desse eixo. As duas opes abaixo dessa opo sero habilitadas permitindo que selecionemos o valor mximo e mnimo do eixo.

Figura 22: Aba "Chart/Axis" com o eixo "Left" selecionado e a opo "Automatic" ainda marcada.

15

Figura 23: Aba "Chart/Axis" com o eixo "Left" selecionado e a opo "Automatic" j desmarcada. Duas novas opes de seleo de valor mximo e mnimo foram habilitadas.

A aparncia do Form principal deve ser a seguinte nesse momente.

Figura 24: Aparncia final do Form principal.

16

Assim finalizamos a interface do programa. Podemos iniciar o desenvolvimento do cdigo. O primeiro passo para isso criar um manipulador para o evento OnClick do boto Ler. Para fazer isso podemos selecionar o componente Button correspondente, ir no Object Inspector, selecionar a aba Events e dar um duplo clique sobre a linha que est escrito OnClick. Uma forma mais fcil de fazer isso apenas dar um duplo clique sobre o boto no Form e com isso o Delphi ir criar automaticamente um manipulador para o evento OnClick. O seguinte cdigo ser criado. Procedure TformMain.ButtonLerClick(Sender: TObject); begin end; Dentro desse manipulador adicionamos o cdigo que ir fazer a leitura dos sensores e apresentar em forma de grfico no Chart a resposta. Para isso, utilizaremos o mtodo SensorReadAll da biblioteca de controle do Kit. Esse mtodo possui a seguinte declarao. Procedure SensorReadAll(var data : DynIntegerArray); Como podemos ver, temos um parmetro por referncia que um vetor dinmico de valores do tipo Integer. nesse vetor que ser retornado a leitura de todos os canais de sensores. O cdigo que faz essa leitura dentro do manipulador de eventos do boto Ler o seguinte. Procedure TFormMain.ButtonLerClick(Sender: TObject); var // Vetos de Inteiros valores : DynIntegerArray; // Varivel ndice para o "for" i : integer; begin // L todos os canais de sensores e armazena // na varivel denominada "valores" kit.SensorReadAll(valores); ... end; 17

Nesse trecho de cdigo so declaradas duas variveis, um vetor de inteiros denominado valores que ir armazenar o valor da leitura dos sensores e um inteiro denominado i que servir de ndice para uma estrutura for que veremos a seguir. Aps a declarao das variveis, invocado o mtodo SensorReadAll que ir ler todos os canais de sensores e armazenar os valores lidos no vetor de inteiros passado como parmetro, no caso o vetor denominado valores. Com isso temos os valores das leitura. E o cdigo a seguir mostra como fazemos para inserir esses valores no grfico. Procedure TFormMain.ButtonLerClick(Sender: TObject); var // Vetor de Inteiros valores : DynIntegerArray; // Varivel ndice para o "for" i : integer; begin // L todos os canais de sensores e armazena // na varivel denominada "valores" kit.SensorReadAll(valores); // Insere os valores lidos no grfico for i:=0 to Length(valores)-1 do ChartSensores.Series[i].Add(valores[i]); end; Com isso finalizamos a implementao do cdigo do nosso programa e j podemos testar todas as suas funcionalidades. Para isso, vamos no menu Run Run ou pressionamos F9. Se no houver nenhum erro o programa ser compilado e executado. Com um Kit conectado em alguma porta serial podemos testar se o programa est funcionando. Selecione a porta serial correta e pressione o boto Ler varias vezes. A aparncia final do programa ser a seguinte.

18

Figura 25: Programa finalizado.

4 Dicas
Uma funcionalidade interessante que podemos implementar nos programas criados nesse tutorial uma atualizao automtica da leitura dos sensores. Para isso temos apenas que adicionar uma linha de cdigo dentro do manipulador do evento OnTimer do Timer que verifica se existe um Kit conectado porta serial selecionada. O cdigo desse manipulador ficaria assim nos dois programas que foram criados. Procedure TFormMain.TimerCheckTimer(Sender: TObject); begin // Verifica se h um Kit respondendo if (kit.IsConnected) then begin // Acende LED. Muda cor de fundo do Shape ShapeLED.Brush.Color := clLime;

19

// Muda texto para indicar conexo LabelConnected.Caption := 'Conectado'; // Muda cor do texto para verde LabelConnected.Font.Color := clGreen; // Atualiza leitura de sensores ButtonLerClick(ButtonLer); end else begin // Apaga LED. Muda cor de fundo do Shape ShapeLED.Brush.Color := clGreen; // Muda texto para indicar erro de conexo LabelConnected.Caption := 'Desconectado'; // Muda cor do texto para vermelho LabelConnected.Font.Color := clRed; end; end; Observe que foi adicionada apenas uma linha a esse manipulador. Essa linha simplesmente chama o manipulador do evento de clique do botao Ler. Podemos testar os programas e verificar que agora a leitura dos sensores feita automaticamente sem a necessidade de pressionar o boto Ler.

5 Concluso
Nesse tutorial, aprendemos como fazer leitura de sensores a partir de um programa de computador. Criamos dois programas utilizando mtodos diferentes para a leitura dos sensores. No primeiro fazemos a leitura de um canal por vez e para isso utilizamos o mtodo da biblioteca de controle SensorReadNow. No segundo a leitura de todos os canais de sensores feita simultneamente e para isso utilizamos o mtodo SensorReadAll. Com os conhecimentos adquiridos aqui, podemos utilizar em nossos projetos, de forma muito simples, a leitura de parmetros do ambiente. 20