Main Page

From Inmotion.pt

Jump to: navigation, search

Material de apoio para a Workshop de Introdução a Sensores (Physical Computing), Julho de 2008

Contents


Prototyping Physical Interactions


CDVJ08 presentation
CDVJ08 presentation

Desde tempos antigos que o acto de jogar um jogo está associado à manipulação de objectos físicos. Nesta apresentação iremos mostrar como é possível utilizar hardware de baixo custo em conjunto com ferramentas open source para criar protótipos de jogos e de interacções tipo jogo que permitem passar além do ecrã e interagir com um mundo real. Foi com este pensamento que a doubleMV - I+D e a InMotion desenvolveram esta apresentação para a CDVJ08, Criação e Desenvolvimento de Videojogos, 2008. Esta sessão foi apresentada juntamente com uma série de demos interactivas utilizando o Arduino e a plataforma Phidgets como ferramentas de prototipagem de interacções físicas, por forma a ilustrar a facilidade com que se pode desenvolver e explorar novos conceitos de interacção.

Pdf_icon.png CDVJ08 Presentation Info_circle.png

Sobre as empresas envolvidas


  • doubleMV - I+D: é uma empresa que desenvolve videojogos e investiga a aplicação de tecnologia de videojogos para resolver problemas de interacção humana no mundo real.
  • InMotion: é uma empresa em formação que desenvolve e comercializa tecnologias interactivas baseadas em sensores para aplicações em arte digital, prototipagem industrial e interacção homem-máquina.


Ambas as empresas juntaram-se à associação sem fins lucrativos Audiência Zero para ajudar a criar o CCT - Centro de Criatividade e Tecnologia, um laboratório livre que promove actividades educativas, promocionais, de investigação e produção que exploram as possibilidades do uso criativo de tecnologia.

Arduino


The Arduino Diecimila.
The Arduino Diecimila.

O Arduino é uma plataforma de physical computing baseada numa placa com entradas/saídas analógicas e digitais e num ambiente de desenvolvimento que implementa a linguagem Processing/Wiring. O Arduino pode ser utilizado para desenvolver objectos interactivos autónomos ou utilizado com software através de uma ligação a um computador (e.g., Macromedia Flash, Processing, Max/MSP, Pure Data, SuperCollider). O Arduino recebeu a menção honrosa na categoria Digital Communities, Prix Ars Electronica 2006. Existem uma série de Tutoriais de Arduino que podem ser utilizados para aprender a trabalhar com esta board. É recomendado o uso de um kit de iniciação, que já reúne uma série de componentes necessários para alguns dos exercícios referidos na maioria dos tutoriais.

Hardware


A board Arduino é constituída por um microcontrolador ATmega168 (nas novas versões) e por alguns componentes extras (eg. conversor porta série <-> USB) que facilitam a sua programação bem como a sua interligação com outros componentes. A actual versão Diecimilia, oferece 14 portas de entrada/saída digitais, das quais 6 portas são capazes de produzir sinais PWM, e 6 portas de entrada analógicas. Entre as características principais destacam-se as seguintes:

  • 16kB de memória Flash
  • 1kB de RAM
  • 16MHz (Apple II: 1MHz)
  • 13 portas de I/O digital
  • 6 portas de entrada analógica
  • RS232, PWM, I2C, SPI



Software


O ambiente de desenvolvimento é baseado na linguagem Java, sendo multi-plataforma, desde que exista suporte no sistema operativo para ler a porta série utilizada para a programação e comunicação de dados. O ambiente de desenvolvimento foi baseado na linguagem Processing, e permite a escrita de programas utilizando uma linguagem derivada da linguagem Wiring, sendo possível escrever código utilizando a linguagem C e C++

Ambiente de desenvolvimento (IDE)


Para quem está a iniciar-se no desenvolvimento de aplicações em Arduino, existe um excelente tutorial (em inglês) que permite aos utilizadores tornarem-se familiarizados com o ambiente de desenvolvimento. Em geral, e apesar das limitações do IDE, este é suficiente para desenvolver pequenas aplicações. Existe ainda a possibilidade de utilizar um qualquer editor de código.

Exemplos de utilização


Alguns exemplos de utilização do Arduino, apresentados na Workshop de Physical Computing.

Poor Man Oscilloscope


Exemplo de um osciloscópio.
Exemplo de um osciloscópio.

Um osciloscópio é um instrumento de medida que cria um gráfico bi-dimensional. Em geral, o eixo horizontal representa o tempo, e o eixo vertical o valor amostrado. Com o Arduino é possível construir um simples osciloscópio que permite a observação do sinal amostrado, neste caso, de um qualquer sensor que esteja a ser lido pelo Arduino. Apesar de não ser um instrumento vital na bancada, em especial, quando se faz prototipagem, é no entanto um excelente instrumento para observar o comportamento de um sinal, permitindo que o utilizador observe o comportamento do mesmo. Em muitos casos pode ser uma excelente ferramenta de debug.

Antes de utilizar este sketch deve modificar/actualizar o código do Arduino para que seja enviada pela porta série os dados do sensor. O sketch só permite a visualização de um sensor de cada vez, mas é possível com algumas modificações observar mais do que um sensor em simultâneo. Porém, antes de podermos ver os dados do sensor é necessário que o Arduino envie os dados pela porta série. No final do sketch encontra-se em comentário o seguinte bloco de código, que deve ser copiado e instalado no Arduino como habitualmente, ou (para os mais experientes) integrado num projecto já existente. A velocidade da porta série é de 38400, o que deverá ser suficiente para a maioria das aplicações. Se necessário este valor poderá ser aumentado, desde que seja efectuada a respectiva alteração no sketch Processing.

#define ANALOG_IN 0
 
void setup() {
  Serial.begin(38400); 
}
 
void loop() {
  int val = analogRead(ANALOG_IN);
  Serial.print( 0xff, BYTE);
  Serial.print( (val >> 8) & 0xff, BYTE);
  Serial.print( val & 0xff, BYTE);
}


O sketch original foi modificado por forma a permitir ao utilizador a escolha da porta série a utilizar. Ao executar o sketch deverá aparecer um ecrã com indicação das portas série disponíveis. Nem todas as portas podem ser utilizadas, algumas são específicas a dispositivos existentes (BlueTooth) ou impressoras. Como nota: no MacOSX, as portas série aparecem sempre com dois nomes distintos: um nome na forma /dev/tty.usbserial-XXXXXXXX e outro na forma /dev/cu.usbserial-XXXXXXXX devendo-se sempre escolher o nome /dev/tty.usbserial-XXXXXXXX para se referir à porta associada ao Arduino. Ao seleccionar a porta série, o sketch passa a ler os valores transmitidos pelo Arduino.

Metro Led Blink


Zip_icon.png Múltiplos LED's Info_circle.png Este exemplo tira proveito da biblioteca Metro permitindo que vários LED's sejam ligados/desligados em simultâneo.

Switch Button


Zip_icon.png Read a Switch Info_circle.png Este exemplo lê um switch utilizando uma porta digital do Arduino. Desta forma, um siwtch passa a funcionar como uma tecla.

Motor Servo


Zip_icon.png Controlo de motor servo Info_circle.png Este exemplo controla directamente um motor servo a partir do Arduino. Para utilizar correctamente este exemplo convém consultar a especificação do motor utilizado por forma a que os impulsos utilizados para o controlo do motor não estejam desajustados dos valores especificada pelo fabricante.

SimpleMessageSystem


SimpleMessageSystem é uma biblioteca do Arduino que permite ao utilizador controlar o Arduino sem que este necessite de programar o Arduino. Esta biblioteca permite que um utilizador controle de forma elegante o Arduino sem ter que o programar directamente. O princípio de funcionamento da biblioteca é simples: o utilizador envia pela porta série uma mensagem ao Arduino e este devolve uma resposta com os valores desejados. As mensagens que podem ser enviadas ao Arduino são de dois tipos: leitura de valores analógicos/digitais ou escrita de valores analógicos/digitais.

 r d -> read digital pins
 r a -> read analog pins
 w d [pin] [value] -> write digital pin
 w a [pin] [value] -> write analog pin


O exemplo seguinte é uma mensagem de leitura das portas digitais:

// mensagem a enviar ao Arduino, seguida do caracter CR (carriage return)
r d

// resposta: o primeiro caracter indica o tipo de resposta (d para digital) seguido dos valores das portas 2-11
// como é esperado as portas digitais 0 e 1 são utilizadas para comunicação série pelo que não podem ser utilizadas
d 0 1 0 1 1 1 0 0 1 0 1 0


O exemplo seguinte é uma mensagem de leitura das portas analógicas:

// mensagem a enviar ao Arduino, seguida do caracter CR (carriage return)
r a

// resposta: o primeiro caracter indica o tipo de resposta (a para analógico) seguido dos valores das portas analógicas 0 a 5
// como é esperado as portas digitais 0 e 1 são utilizadas para comunicação série pelo que não podem ser utilizadas
a 500 456 234 0 10 61


Como é de esperar, existem também mensagens para escrever valores nas portas analógicas e digitais do Arduino. Porém, ao contrário do exemplo anterior, na escrita, cada mensagem enviada só escreve um valor por porta. O exemplo seguinte ilustram a escrita de valores analógicos (PWM).

// escreve um valor analógico nas portas 3, 5, 6, 9, 10, 11. Estas são as únicas portas que 
// suportam saída PWM (ver referência para a função analogueWrite(). O valor analógico a
// escrever dever ser >= 0 e <= 255
w a 5 100


O exemplo seguinte ilustra a escrita de valores digitais (0 ou 1) para as portas 2-11.

// escreve um valor digital em qualquer uma das portas 2 a 11. O valor a escrever deve ser 0 ou 1
w d 11 1

Zip_icon.png Exemplo de Simple Message System Info_circle.png

O sketch exemplo é fornecido com a biblioteca SimpleMessageSystem. Se ao compilar o código, o Arduino der erro é provável que a biblioteca já esteja instalada no ambiente de desenvolvimento do Arduino. Para confirmar esta situação abrir a pasta onde está instalado o ambiente de desenvolvimento do Arduino e verificar se já existe a biblioteca SimpleMessageSystem nas pastas hardware/libraries ou lib/targets/libraries. Se sim, devem abrir a pasta onde está o sketch SimpleMessageSystem_Arduino e remover os ficheiros SimpleMessageSystem.h, SimpleMessageSystem.cpp

Exemplo Max/MSP


Max/Msp e SimpleMessageSystem
Max/Msp e SimpleMessageSystem
Windows Device Manager
Windows Device Manager

Esta patch Max permite ao utilizador aceder aos valores das portas do Arduino sem ter que o programar directamente. Para isso, é utilizada a biblioteca SimpleMessageSystem, que já vem com um exemplo de utilização em Arduino. Este exemplo recebe/descodifica e envia de volta mensagens num formato previamente definido, permitindo que o utilizador actue sobre o Arduino sem ter que o programar. A interligação com o Max/Msp é feita utilizando os objectos asciimessage2max, max2asciimessage fornecidos com o exemplo. Estes objectos são responsáveis por formatar mensagens do Max e enviar as mensagens de volta ao Arduino e vice-versa. O único inconveniente desta abordagem é que é necessário configurar a porta série a utilizar no Max/Msp indicando ao objecto serial o nome da porta e a configuração. O método de configurar a porta depende em grande parte do sistema operativo. Antes de executarem a patch é ncessário configurar o objecto Max/Msp serial, caso contrário não haverá comunicação de dados com o Arduino.

Para configurar o objecto serial para Max/Msp em Windows é necessário saber o nome da porta COM associada ao Arduino. Para saber qual a porta correcta podem abrir as Preferências de Sistema (Device Manager) e verificar o nome da porta COM junto dos dispositivos instalados. Uma vez conhecido o nome da porta devem configurar o objecto serial indicando o nome da porta. Não utilizem minúsculas para o nome da porta, caso contrário o Max/Msp não irá reconheçer a porta com3 como sendo a porta COM3 sendo o resultado final uma mensagem de erro pouco animadora.

Para configurar o objecto serial para Max/Msp em MacOSX é necessário mais algum trabalho. Ao contrário do Windows, em MacOSX o nome da porta série segue uma nomenclatura própria. Ao contrário do Windows, estas portas aparecem como device drivers e o nome da porta série é na forma /dev/tty.usbserial-XXXXXXXX A boa notícia é que me geral os nomes das portas série em MacOSX para um mesmo computador costumam ser fixas por períodos de tempo relativamente longos. Outra das vantagens do Max/Msp para MacOSX é permitir que as portas série sejam enumeradas através de letras, sendo a 1ª porta série a letra a, a segunda porta a letra b e assim sucessivamente até não existirem mais portas séries (ou letras disponíveis).

Nota:

O nome da porta série pode mudar de cada vez que se faz reboot ou se liga o Arduino, em especial, quando se liga a ficha a uma nova tomada USB. Não existe (para já) solução que permita ao Max/Msp detectar correctamente a porta a utilizar. Quando utilizarem este exemplo (ou nos vosso futuros trabalhos) e "estranhamente" a conexão com o Arduino deixar de funcionar, devem verificar novamente a configuração do objecto serial com o nome actual da porta série utilizada pelo Arduino.


Zip_icon.png Max/Msp e SimpleMessageSystem Info_circle.png

Exemplo Processing


Este exemplo utiliza a linguagem Processing para comunicar com o Arduino utilizando a biblioteca SimpleMessageSystem. Ao contrário do exemplo anterior para Max/Msp, o código foi modificado para suportar a escolha da porta série a utilizar. É possível modificar o Processing e a biblioteca SimpleMessageSystem para que a escolha da porta série seja totalmente transparente para o utilizador. Esperamos ter esse trabalho desenvolvido brevemente e publicado neste wiki. Desta forma a utilização do Arduino em Processing será completamente transparente para o utilizador final, deixando de existir problemas de configuração da porta Série.

Zip_icon.png Processing e SimpleMessageSystem Info_circle.png

Outros Exemplos


Este ficheiro contém os exemplos anteriores bem como exemplos de utilização do SimpleMessageSystem para PureData e documentação da biblioteca.

Zip_icon.png Todos os exemplos de SimpleMessageSystem Info_circle.png

Tutoriais (em inglês)


Excelentes tutoriais de iniciação ao Arduino. A 1ª série de tutoriais (conheçida como Spooky Projects) ilustram bem a utilização do Arduino como plataforma de prototipagem e interacção.

Spooky Projects Tutorial


Originalmente publicado no blog todbot, spookyprojects. Estes tutoriais contém exemplos simples e práticos para utilização do Arduino como ferramenta de prototipagem, abordando alguns assuntos mais avançados como interfaces Arduino <-> MIDI e motores servos. Útil para quem não tem medo do ferro de soldar e de experimentar os brinquedos velhos que estão lá em casa à espera de dias mais felizes.

Pdf_icon.png Arduino Spooky Projects #1 Info_circle.png
Pdf_icon.png Arduino Spooky Projects #2 Info_circle.png
Pdf_icon.png Arduino Spooky Projects #3 Info_circle.png
Pdf_icon.png Arduino Spooky Projects #4 Info_circle.png

Bionic Arduino Tutorial


Originalmente publicado no blog todbot, bionic arduino. Estes tutoriais são uma versão revista dos tutoriais anteriores, porém contém material novo, como controlo de motores DC, uma revisão de controlo de motores servos, protocolo I2C (Wii Remote), acelerómetros, bem como material mais avançado. Algumas secções destes tutoriais contém material de leitura mais avançada. Recomendado para quem gosta de um bom desafio ou para quem pretenda tirar o máximo partido do seu Arduino e não tenha medo de programar um pouco mais.

Pdf_icon.png Bionic Arduino Class #1 Info_circle.png
Pdf_icon.png Bionic Arduino Class #2 Info_circle.png
Pdf_icon.png Bionic Arduino Class #3 Info_circle.png
Pdf_icon.png Bionic Arduino Class #4 Info_circle.png

Projectos baseados na tecnologia Arduino


Apesar do Arduino ser uma tecnologia recente, o seu baixo custo e flexibilidade, aliados a uma licensa Creative Commons Attribution Share-Alike sobre os diagramas eléctricos e respectivos ficheiros CAD permitiram que a tecnologia desenvolvida fosse disseminada rapidamente. Aliado a um ambiente de desenvolvimento multi-plataformas que permite a escrita de código em C, C++ utilizando uma sintaxe semelhante à da linguagem Processing e com uma licensa GPL, esta plataforma tornou-se a base de muitos projectos semelhantes, criados para satisfazer uma crescente necessidade de soluções personalizadas sobre a plataforma Arduino. Seja Arduino Diecemilia, Mini, Wee ou Lylipad o importante é a facilidade com que os projectos se podem executar sobre cada uma destas soluções.
As soluções apresentadas abaixo não constituem uma pesquisa exaustiva de todas as boards compatíveis com o Arduino, constituindo apenas uma breve amostra do potencial existente nesta tecnologia. Para uma listas mais alargada de soluções compatíveis com o Arduino ver a secção SimilarBoards no site oficial.

Arduino Nano


Arduino Nano
Arduino Nano

O Arduino Nano é uma board semelhante ao Arduino Mini sendo que a principal diferença reside no conversor USB <-> Série que já está incorporado na board. Para quem desenvolve projectos utilizando uma breadboard esta é uma solução ideal uma vez que pode ser montado directamente por cima de uma breadboard. Esta board tem todas as funcionalidades do Arduino Diecemilia, incluindo a função de auto-reset utilizada para programar directamente o Arduino através da porta USB. Esta board é uma pequena peça de engenharia, sendo a própria PCB fabricada em quatro camadas!!! Inclui funções avançadas como escolha automática da fonte de alimentação (USB ou conector externo)

Principais características:

  • ATmega168 (SMD)
  • Operating Voltage 5V
  • Input Voltage 7-9 V
  • Input Voltage (limits) 6-20 V
  • Digital I/O Pins 14 (of which 6 provide PWM output)
  • Analog Input Pins 8
  • DC Current per I/O Pin 40 mA
  • Flash Memory 16 KB (of which 2 KB used by bootloader)
  • SRAM 1 KB
  • EEPROM 512 bytes
  • Clock Speed 16 MHz
  • Dimensions 0.73” x 1.70”



Arduino Mini


Arduino Mini
Arduino Mini

O Arduino Mini é uma board desenvolvida para projectos onde existe a necessidade poupar no espaço utilizado pelo hardware existente. Esta board não inclui o conversor série <-> USB pelo que deve ser programada utilizando um conversor USB <-> Série. De salientar que esta board também não possui protecção contra inversão da polaridade da alimentação, pelo que se a fonte de alimentação for ligada de forma errada a board será destruída.

Principais características:

  • ATmega168 (SMD)
  • Operating Voltage 5V
  • Input Voltage 7-9 V
  • Digital I/O Pins 14 (of which 6 provide PWM output)
  • Analog Input Pins 8 (of which 4 are broken out onto pins)
  • DC Current per I/O Pin 40 mA
  • Flash Memory 16 KB (of which 2 KB used by bootloader)
  • SRAM 1 KB
  • EEPROM 512 bytes
  • Clock Speed 16 MHz



Arduino Bluetooth


Arduino Bluetooth
Arduino Bluetooth

O Arduino Bluetooth é uma board semelhante à board Arduino Diecimilia. As principais diferenças estão na utilização de um módulo Bluetooth <-> Série e na utilização de um conversor DC-DC que permite ao Arduino ser alimentado por fontes de energia com um mínimo de 1.2V e um máximo de 5.5V. A utilização de tensões mais elevadas ou a inversão de polaridades nos conectores irá danificar de forma permanente a board. nesta versão o pino 7 da board está ligado a um pino de Reset do módulo Bluettoth. O módulo Bluetooth só suporta uma única velocidade para a porta série de 115200 baud.

Arduino ZigBee


Arduino ZigBee
Arduino ZigBee

O Arduino ZigBee é uma board semelhante ao Arduino Diecimila sendo que a principal diferença reside no conversor USB <-> Série que pode ser desligado através de um jumper. Ao seleccionar esta configuração a porta série do Arduino é desligada do módulo USB, permitindo que o utilizador incorpore um shield sobre a board e que permite ao utilizador a comunicação de dados utilizando o protocolo ZigBee. Este shield só pode ser utilizado nas boards que tenham sido desenhadas para permitir que a porta USB seja desligada utilizando jumpers.

Lilypad


"Lilypad" é o nome de uma tecnologia para wearable computing que foi desenvolvida pela designer Leah Buechley para ser uma tecnologia que permitisse a sua integração com têxteis. As boards foram desenhadas para serem laváveis dentro de determinados critérios, permitindo a sua utilização em produtos têxteis convencionais. Entre as principais características desta board conta-se a alimentação de 3.3V e a utilização de uma velocidade de relógio mais reduzida (8Mhz). A restante funcionalidade é semelhante a uma board Arduino, sendo que no caso do Lilypad não existe um adaptador integrado USB <-> Série. Esta configuração permite ao utilizador uma maior autonomia em termos de alimentação bem como escolher o módulo de comunicação de dados que pretende utilizar (Bluetooth, ZigBee, GSM ...) A inmotion.pt já possui alguns kits e que serão comercializados em breve, estando prevista uma sessão especialmente dedicada ao Lilypad. Esperamos divulgar mais informação em breve.



Wee


Wee
Wee

"Wee" é o nome de uma das mais pequenas boards Arduino que foram desenvolvidas até ao momento. Entre as principais características desta board conta-se a alimentação de 3.3V e a utilização de uma velocidade de relógio mais reduzida (8Mhz). A restante funcionalidade é semelhante a uma board Arduino, sendo que no caso do Wee não existe um adaptador integrado USB <-> Série. Esta configuração oferece uma maior flexibilidade de utilização, dado que esta board foi desenhada para ter um baixo consumo de energia. A Wee é uma board 100% compatível com o Arduino Mini (pino a pino). A board vem com um regulador DC de 3.3V e suporta alimentação de 3.3V a 12V. Este design só peca por não ter uma versão de 16Mhz.
A inmotion.pt irá comercializar estas boards brevemente. Esperamos divulgar mais informação em breve.

Phidgets


Phidget Interface Kit e sensores
Phidget Interface Kit e sensores

Phidgets é um conjunto de hardware ao estilo building blocks que permitem o controlo e aquisição de dados a partir de um computador. Toda a parte de comunicação USB com o dispositivo é escondida pela API, permitindo desta forma que o utilizador se concentre na concepção e desenvolvimento de conceitos, utilizando a sua plataforma de software preferida. As aplicações podem ser feitas em virtualmente qualquer linguagem, e o interface corre actualmente em Windows, MacOSX e Linux. Ao contrário da plataforma [Arduino] a plataforma Phidgets foi desenvolvida para esconder do utilizador a complexidade de programação de um micro-controlador. A gama de produtos da Phidgets estende-se não só ao controlo e aquisição de dados, mas também à medida de características físicas como o Ph, aceleração, força e grandezas eléctrica. Paralelamente, a Phidgets também desenvolve produtos dedicados à criação de interfaces tangíveis através de controladores baseados em toque, produtos para RFID e controlo de motores passo a passo e motores DC.

Esta plataforma distingue-se pela facilidade de montagem e ligação dos sensores. É praticamente impossível ligar um sensor Phidgets de forma errada a um InterfaceKit, uma vez que todas as ligações usam um conector específico, evitando desta forma erros de montagem e a eventual destruição dos componentes. O facto de existir uma API de acesso a todos os componentes faz desta plataforma a solução ideal para quem deseja começar a trabalhar com sensores sem ter que se preocupar com a programação do micro-controlador ou com ligações eléctricas.

Principais características


  • Modelo Plug and Play entre sensores/controlos/motores e o computador
  • Facilidade de utilização do equipamento
  • API de acesso aos dispositivos, em Windows, MacOSX e Linux
  • Facilidade de interligação a hardware existente
  • Alimentação via USB (com excepção dos motores passo a passo)
  • Suportado em mais de 15 linguagens de programação



Linguagens suportadas


Phidgets InterfaceKit Panel
Phidgets InterfaceKit Panel

A Phidgets oferece integração directa num extenso conjunto de linguagens e ambientes de programação. Antes de começar a desenvolver numa das linguagens ou ambientes de desenvolvimento já existentes é necessário instalar os drivers para o sistema operativo onde vai desenvolver as suas aplicações Phidgets. Sempre que instalar uma versão mais actual dos drivers, é recomendado que actualize o suporte para a(s) linguagem(s) de programação que utilizar. Desta forma poderá tirar proveito imediato de alterações que tenham existido ao código e suporte, bem como aproveitar novas funcionalidades introduzidas pela Phidgets. Actualmente, existe suporte para os seguintes sistemas:


Linguagens suportadas
Windows MacOS X Linux



Suporte para linguagem Processing


Estrutura da pasta Processing
Estrutura da pasta Processing

Para utilizar os sensores Phidgets com a linguagem Processing, é necessário instalar uma biblioteca no directório onde se encontram as várias bibliotecas distribuídas com a linguagem Processing. Este passo é trivial tanto em Windows como em MacOS X, porém, quem instalar os drivers da Phidgets em Linux precisa de ter mais alguma atenção. Se utilizar os Phidgets em Linux é necessário compilar o driver distribuído sobre a forma de código fonte com suporte nativo para JNI. As instruções para efectuar este passo já vem com o fiecheiro README distribuído com o driver da Phidgets para Linux. Não esquecer de verificar se o driver Phidgets foi correctamente instalado.

Zip_icon.png Phidgets para Processing Info_circle.png

Finalmente, copiar o ficheiro zip fornecido acima, para a pasta libraries dentro do directório onde foi instalada a linguagem Processing e descomprimir o ficheiro zip. Para confirmar se a instalação foi bem sucedida, é necessário abrir o ambiente Processing, e incluir a biblioteca através do menu Sketch image:mac_arrow.png Import Library ... image:mac_arrow.png phidgets Ao importar a biblioteca Phidgets, verificar se as seguintes linhas aparecem no início do sketch:

import com.phidgets.*;
import com.phidgets.event.*;


Agora, é altura de adicionar algum código para obter as 8 entradas analógicas de um InterfaceKit 8/8/8. Este código pode ser reutilizado noutros sketchs, onde se pretenda utilizar os sensores Phidgets. Este código só permite o acesso ao InterfaceKit 8/8/8, pelo que é necessário adaptar o código se pretender utilizar outro InterfaceKit com o Processing. Existe uma API Java para cada um dos InterfaceKit disponíveis, pelo que é recomendável consultar a documentação existente antes de começar a desenvolver ou alterar o código de acesso aos Phidgets.

int analogueInputs[] = new int[8];
InterfaceKitPhidget ik = null; 
 
void setupInterfaceKit()
{
  try 
  {
      ik = new InterfaceKitPhidget();
 
      ik.addSensorChangeListener(new SensorChangeListener() {
          public void sensorChanged(SensorChangeEvent se) {
              analogueInputs[se.getIndex()] = se.getValue();
          }
      });
 
      // ler entradas de qualquer InterfaceKit 8/8/8
      ik.openAny();
      print("Waiting for InterfaceKit 8/8/8: ");
      ik.waitForAttachment();      
      println("OK");
   } 
   catch(Exception e) { println("ERROR"); }
}
 
void setup()
{
  /* your code here */ 
  setupInterfaceKit();
}


Finalmente, uma breve explicação do código acima: se o sketch aparecer parado ou não executar, convém verificar se a mensagem que está na consola do Processing é: Waiting for InterfaceKit 8/8/8: e não Waiting for InterfaceKit 8/8/8: OK. Se sim, então mais existe pelo menos mais do que um programa a tentar utilizar o InterfaceKit. A solução é fechar todos os programas que estão a utilizar o InterfaceKit antes de executar o sketch novamente. Como é normal, o InterfaceKit só pode ser usado por um programa de cada vez. Finalmente usar o exemplo abaixo para testar os Phidgets. Não esquecer de ligar um sensor na entrada analógica 0.

Zip_icon.png Tree - Exemplo com Phidgets Info_circle.png

Sensores e InterfaceKit


Phidget InterfaceKit 8/8/8
Phidget InterfaceKit 8/8/8

Um InterfaceKit é uma placa de entrada/saída de sinal analógico e/ou digital que permite a aquisição e/ou controlo de dados sensoriais e equipamento eléctrico. Nesta workshop foi utilizado o InterfaceKit 8/8/8 que é um InterfaceKit com 8 entradas analógicas, 8 entradas digitais e 8 saídas digitais. A principal característica de um InterfaceKit com entradas analógicas é permitir que qualquer sinal analógico com valores entre 0V e 5V seja convertido num valor digital pelo InterfaceKit. O InterfaceKit 8/8/8 possui um [ADC] de 12 bits o que permite converter valores entre 0V a 5V em valores digitais de 0 a 4096. Apesar da precisão do [ADC] a Phidgets envia um valor ao utilizador compreendido entre 0 e 1000. Esta conversão suaviza os valores de saída e elimina pequenas oscilações que existam na entrada do sinal analógico.

Não é possível apresentar uma lista exaustiva de todo o tipo de sensores analógicos da Phidgets porém aqui ficam alguns dos mais importantes e mais utilizadas nesta e em futuras workshops. Esta lista deverá ser expandida brevemente, incluindo exemplos de utilização e ajuda em Português. Para quem já possui o InterfaceKit 8/8/8 aqui fica o guia de utilização. Antes de utilizar o InterfaceKit não esqueçer de instalar os driver's e respectivas frameworks de desenvolvimento para a linguagem desejada.

Pdf_icon.png Phidget InterfaceKit 8/8/8 Info_circle.png

Alguns sensores analógicos


Sounds like a Tennis Guitar!!!
Sounds like a Tennis Guitar!!!

Os sensores apresentados nesta categoria são geralmente mais utilizados para a construção e controlo de interfaces tangíveis, apesar de poderem ser utilizados noutro tipo de situações. A figura seguinte apresenta um controlador MIDI construído com um sensor de vibração Phidgets e um sensor de rotação. Nesta situação, o sensor de rotação é utilizado para controlar o parâmetro do interface MIDI que determina qual a qunatidade de vibração que deve existir para que seja disparada uma nota via MIDI ao jogo Guitar Hero. Desta forma ao detectar a vibração da "guitarra" o interface envia um comando MIDI ao jogo, simulando a acção de um jogador numa guitarra real. Para esta demo foi utilizado o código do Frets on Fire, ligeiramente modificado para receber informação do Phidgets InterfaceKit. O código e ideia são do Pedro Ângelo que realizou este trabalho na 1ª Workshop em Physical Computing. Brevemente, o código de interface Phidgets <-> Frets on Fire será publicado, permitindo a todas as pessoas experimentar o jogo com interfaces não convencionais.



Outro tipo de sensores I


Sensor de movimento (PIR)
Sensor de movimento (PIR)

A gama de sensores Phidgets não se limita apenas aos sensores apresentados anteriormente. Existem também sensores capazes de medir grandezas físicas como a corrente eléctrica, variações de luz e temperatura. A maioria destes sensores foram desenhados por forma a permitir uma fácil utilização com qualquer um dos InterfaceKit que disponham de entradas analógicas. A tabela abaixo apresenta uma selecção dos sensores mais adequados a interfaces interactivas. Existem também sensores adequados à medida de cargas e correntes eléctricas, porém, são mais adequados em situações que exigem medir com precisão o consumo de um determinado equipamento, eg: medir a quantidade de corrente eléctrica consumida por um motor passo a passo de alto débito. A gama de sensores não se limita apenas a estas grandezas, existindo ainda sensores para detecção de movimento, sensores de medição de distância a um objecto utilizando ultra-sons ou infra-vermelhos bem como detectores de movimento baseados em tecnologia PIR (Passive Infra-Red).


Outro tipo de sensores II


Sensor de distância (sonar)
Sensor de distância (sonar)

Para os mais aventureiros no mundo da electrónica, a lista de sensores que se podem utilizar com o InterfaceKit cresce exponencialmente. O sensor de distância (sonar) é um exemplo deste princípio. Não tendo sido desenhado pela Phidgets, fornece uma saída analógica proporcional à distância ao objecto entro da gama de trabalho aceite pelo InterfaceKit. Este sensor permite medir distâncias até 6.20 metros utilizando o princípio do sonar. A distância é medida como o intervalo de tempo que demora a receber de volta um determinado impulso de ultra-sons que foi enviado em direcção ao objecto a medir. A Maxbotix, fabricante deste sensor, oferece uma vasta gama de sensores de ultra-sons adequados a uma variedade de situações, sendo todos eles compatíveis com um InterfaceKit. Entre os sensores apresentados nesta secção damos destaque ao sensor de voltagem que permite ligar qualquer sinal analógico entre -30V a 30V e obter uma leitura no InterfaceKit. Desta forma pode-se obter valores com uma boa precisão de um conjunto ainda mais alargado de sensores analógicos. Alguns destes sensores já estão disponíveis na loja online para venda.



Controlo de Motores


PhidgetServo Kit 4-Motor
PhidgetServo Kit 4-Motor

A Phidgets desenvolve InterfaceKit's para o controlo de motores DC. Actualmente é possível controlar directamente motores passo a passo, pequenos motores DC e motores unipolares através dos respectivos InterfaceKit's. Este tipo de motores encontram-se com facilidade em hardware antigo como drives de disquetes, leitores de cassetes e carros telecomandados. Quem já trabalhou com LEGO Mindstorms ou com robots conhece os motores passo a passo utilizados em robótica. O PhidgetServo Kit 4-Motor é um exemplo dos kits disponíveis, e permite controlar facilmente até 4 motores passo a passo com 0.1 graus de precisão. A velocidade e rotação de motores DC ou unipolares podem ser facilmente controlados utilizando o PhidgetMotorControl LV ou o PhidgetStepper Unipolar 4-Motor. Para os mais exigentes existe ainda o PhidgetMotorControl HC que permite o controlo de motores Dc até 15V e 14A.

A integração com outras plataformas e linguagens de programação é semelhante ao Phidgets InterfaceKit 8/8/8, existindo uma API que permite o controlo individual de um motor. A Phidgets fornece ainda suporte para a plataforma Microsoft Robotics. Esta plataforma permite desenvolver controlos para pequenos robots utilizando uma linguagem de programação visual semelhante ao Max/Msp, oferecendo ainda um ambiente virtual onde é possível simular e testar o comportamento do robot sem ter que começar pela sua concepção mecânica.



Sensores de toque


Sensor de toque (iPod wheel)
Sensor de toque (iPod wheel)

Um sensor de toque é um tipo de sensor que permite determinar se uma pessoa ou um objecto está em contacto com um sensor. Este tipo de sensores são úteis para criar interfaces homem-máquina que permitem uma interacção mais natural com um equipamento. Provavelmente, a maioria das pessoas já experimentou este tipo de interfaces sem se aperceber da tecnologia que está por detrás deste modo de interacção. O iPod será talvez o exemplo mais ubíquo de um interface baseado em sensores de toque. O mecanismo de controlo do iPod combina 4 switch's nos pontos cardeais com um sensor de toque circular capaz de detectar a posição do dedo quando este está sobre o interface, bem como a velocidade a que o dedo se desloca sobre o interface. Este é um exemplo de interacção que ficará na história por utilizar sensores que conseguem descrever e quantificar um movimento gestual, tornando-o num gesto regular no dia a dia. Do ponto de vista do utilizador a noção de rodar o dedo num movimento circular sobre o iPod, assemelha-se em muito ao movimento efectuado para aumentar ou diminuir o volume num aparelho de áudio. Desta forma, o gesto é facilmente reconhecido e incorporado na nossa linguagem gestual do dia a dia.

A Phidgets ofereçe actualmente um sensor de toque que permite a sua utilização directa com o InterfaceKit 8/8/8 bem como dois interfaces que permitem a criação de interfaces mais complexos. O sensor de uso individual é indicado para utilização onde se deseja substituir um interruptor ou um switch por um modo de interacção mais natural. O sensor detecta a proximidade de um dedo a alguns milímetros de distância, permitindo que o sensor seja colocado atrás de um material não condutor como um vidro ou uma folha de plexiglass. Desta forma será possível utilizar 8 sensores individuais com um único InterfaceKit 8/8/8 e criar um interface que pode assumir qualquer forma (limitado apenas pelos materiais e usabilidade). Quanto aos interfaces de toque estes foram concebidos para simularem dois gestos extremamente habituais como a acção de deslizar ao longo de uma linha recta ou o movimento circular. Estes dois movimentos permitem um grande leque de aplicações, se, pensarmos em termos de áudio/vídeo e luz. Utilizando o interface para Max/Msp facilmente, se poderia criar um interface de VJing. Ou, se preferirem, um interface de controlo de um robot, permitindo que a direcção e velocidade fossem comandadas em termos de toques. É discutível se esta seria a melhor interface para um robot, mas claramente, este tipo de interfaces vence em situações onde se pretende dissimular a interacção com o interface, criando a a ilusão entre o toque e o controlo efectuado sobre a luz ou o som (como exemplo).


Leitores RFID


RFID starter kit
RFID starter kit

A tecnologia RFID (Radio-frequency identification) é actualmente parte integrante da nossa sociedade, desde as lojas dos grandes centro comerciais ao passe do metro utilizado diariamente por milhões de pessoas. A sua utilização actual é maioritariamente industrial, embora actualmente seja possível encontrar módulos que permitam a escrita e leitura de cartões RFID. Das várias normas existentes, a Phidgets optou por desenvolver um leitor de RFID que usa a a frequência de 125kHz para a comunicação dos dados de identificação. Existem actualmente várias normas que oferecendo diferentes vantagens e naturalmente, trabalham a diferentes frequências de rádio, porém, o sistema RFID desenvolvido pela Phidgets opera na norma LFID ou LowFID em frequências que variam de 30 kHz a 300 kHz. A norma LFID é mais fácil e económica de implementar, permitindo que a utilização desta tecnologia em pequenos projectos. Para começar a experimentar com esta tecnologia só necessita do PhidgetRFID se já dispuser de tags RFID que operem dentro desta norma. A solução ideal para quem está a começar a utilizar esta tecnologia é adquirir o kit ou comprar simultaneamente um pequeno conjunto de tags. O PhidgetRFID possui ainda duas saídas digitais que permitem o accionar relés, LEDS ou outro tipo de equipamento eléctrico.



Exemplos de utilização




Max/Msp




Processing




Personal tools