Um ícone na desktop controla (liga e desliga) o candeeiro de secretária. Este pequeno tutorial exemplifica como uma aplicação multimédia pode controlar aparelhos ligados a uma tomada, como por exemplo, um electrodoméstico, um candeeiro, uma aparelhagem de som ...
O microcontrolador arduino serve de interface entre o computador e o circuito de 220v via um releé. Qualquer aplicação que aceda à porta série virtual passará a poder controlar a tomada.
Para simplificar criámos um ficheiro BAT com a seguinte linha de comando:
echo k>com6
que, quando executado, envia o carácter k para a porta série virtual nº 6, que no meu computador corresponde à porta instalada pelo driver FTDI do arduino. Por sua vez, o arduino comuta o estado do pin de output nº8 que se encontra ligado ao relé por via de uma resitência e de um transistor. Por fim, criámos um atalho para o ficheiro bat na desktop e desenhámos um ícone para esse atalho.
![]() |
![]() |
![]() |
![]() |
|
download mylamp |
download mylamp |
O acelerómetro adxl330 é um sensor de aceleração sensível ao movimento nos 3 eixos (x,y,z) montado numa pequena placa com espaçamento DIP. Possui 6 pinos; VDD a 3 Volts, GND, X,Y e Z, sendo que o pino ST fica desconectado. Pode ser comprado por cerca de 35$ na loja online sparkfun onde se encontra também disponível para download o datasheet com informação técnica detalhada.

A sua ligação ao Arduino Deciemila ou ao Arduino BT é extremamente fácil, atendendo a que ambas as placas dispõem de uma saída de 3V3. O sensor envia a informação do movimento através das saídas analógicas X,Y e Z.
.

O programa que nós testámos envia repetidamente os valores da aceleração nos 3 eixos para a porta de comunicações podendo ser lido a partir de qualquer aplicação de terminal parametrizado com uma velocidade de transferência de 9600 bauds.
O acelerómetro pode ser usado para registar a aceleração do movimento mantendo a placa sempre orientada na vertical ou, alternativamente, para registar a orientação da placa, mantendo-a fixa numa posição e orientando-a livremente (tilt).
No primeiro caso, integrando a velocidade podemos interpolar a posição através do método de integração de Euler:
ACEL=FORÇA/MASSA
VEL=VEL+ACEL
POS=POS+VEL
Se pretendermos usar o sensor para conhecermos a orientação da placa nos 3 eixos (segundo caso) basta-nos ler directamente os valores X,Y e Z.
Quando os dados são lidos directamente a partir da instrução analogRead e com a placa em repouso, verificámos que os valores oscilam bastante. O código que apresentamos resolve esse problema implementando um filtro digital que suaviza os dados. O método usado é simples; guardam-se as últimas 7 amostras e calcula-se a média.
Se o objectivo for implementar um sistema de interacção com o PC, ligando a placa arduino ao Processing, Flash, Max MSP ou outro SDK, temos de ter em linha de conta que a aplicação terá de calibrar os dados. No nosso caso, com a placa em repouso, os valores obtidos nos 3 eixos situavam-se próximos do valor 340. Uma rotação de +-90º ao longo de cada um dos eixos provocava uma oscilação proporcional de +-60 unidades, o que resulta uma resolução ligeiramente inferior a 2º por unidade.

O fotodíodo quando polarizado de forma inversa faz variar a resistência e pode ser aproveitado para medir a luminosidade. Para tal, basta ligá-lo em paralelo com uma resistência (geralmente na ordem dos 10k a 20k) e obtemos um divisor de voltagem que facilmente é lido pelo comando AnalogicRead.
O fotodíodo pode ser substituído por um LDR subindo o valor da resistência para cerca de 100k.
O LDR, ao contrário do fotodído, é não-polarizado mas em contrapartida não é sensível a frequências superiores a 100hz.
O seguinte circuito funciona como sensor de luminosidade cuja a variação é lida e reenviada repetidamente pela porta de comunicações.


void setup()
{
Serial.begin(9600);
}
int valor;
void loop()
{
while(true) {
valor = analogRead(3);
Serial.println(valor,DEC);
}
}
O sonar Maxbotix LV-EZ1 é especialmente atractivo pela seu baixo preço, boa performance, dimensão reduzida e 3 tipos de output; serial, analógico e por impulsos (PWM). Pode detectar pessoas até 3 metros e objectos mais reflexivos em termos acústicos até 6 metros.
Está disponível online na loja sparkfun assim como a partir da loja do próprio fabricante Maxbotix. O datasheet contém informação técnica detalhada e possui uma FAQ muito bem documentada.
O modo mais rápido de o ligar ao arduino é por via da saída analógica do sonar. O circuito torna-se muito semelhante ao circuito do potenciómetro.
Cada amostra é lida pelo comando AnalogRead, podendo variar entre o valor 0 e 1023.
O programa reenvia a amostra através da porta série, podendo -se ler a distância no Terminal em tempo real.
.


void setup()
{
Serial.begin(9600);
}
int valor;
void loop()
{
while(true) {
valor = analogRead(3);
Serial.println(valor,DEC);
}
}
O circuito para ligar um potenciómetro ao arduino. O programa lê o valor e reenvia-o pela porta de comunicações.


void setup()
{
Serial.begin(9600);
}
int valor;
void loop()
{
while(true) {
valor = analogRead(3);
Serial.println(valor,DEC);
}
}
A primeira versão do circuito implementa uma resistência "pull-down" em paralelo por forma a evitar que o valor lógico flutue quando o interruptor não está a ser pressionado.
pressionado - valor lógico 1
não pressionado- valor lógico 0

A segunda versão do circuito implementa uma resistência "pull-up" em paralelo por forma a evitar que o valor lógico flutue quando o interruptor não está a ser pressionado.
pressionado - valor lógico 0
não pressionado- valor lógico 1


int valor;
void setup()
{
pinMode(12, INPUT);
Serial.begin(9600);
}
void loop()
{
valor = digitalRead(12);
Serial.println(valor,DEC);
}