Nesse último final de semana esteve rolando o AZLabs hackmeeting, com os labs LCD, xDA e AltLab, um momento para intensificar o desenvolvimento dos projetos da malta dos laboratórios e criar um ambiente de troca de conhecimentos.

Sentia já a algum tempo falta desse tipo de momento. Lá em Joinville a rapaziada do MuSA juntaa-se as vezes no que costumamos chamar de projetos de final de semana para montar suas coisas e trocar idéias.

Curti testar alguns sensores flexíveis com Pedro Rito e hackear o robosito do VitorLS adicionando a interface de comunicação usando Xbee. Durante o período da tarde rolou uma oficina de Stencil onde cada um cortou seu molde e aplicou em camisetas e na parede do espaço. Domingo, rolaram umas flash talks, e falei um pouquinho do MuSA para o pessoal daqui.

Divertido, é isso. Conhecer pessoas, trocar idéias, criar coisas.

Fotos no flickr.

Tshirt colaborativa, resultado da oficina

Camiseta coletiva

Usando essa lib estou conseguindo controlar o Arduinome com baudrate em 57600 no firmware. Trabalhar com a biblioteca é bem tranquilo:

from arduinome import Arduinome
from time import sleep
 
a = Arduinome("/dev/ttyUSB0")
 
while 1: a.read()
for x in range(8):
        for y in range(8):
                a.led(x, y, 1)
                sleep(0.5)

E o resto está lá, não vou copiar tudo aqui.

, , ,

Durante o X Fórum Internacional de Software Livre estará sendo realizado o I Festival Internacional de Robótica Livre, um momento dentro do fórum para discutir o Hardware Livre, Robótica Livre e práticas de Metareciclagem.

Uma das atividades do Festival é a oficina de hardware/robótica livre, que tem por objetivo ser um ambiente de colaboração e desenvolvimento criativo para a criação de artefatos eletrônicos fazendo-se uso de sucatas. Na oficina, estaremos utilizando o Arduino para controlar os projetos desenvolvidos.

Se você for ao FISL, não deixe de passar por lá.

, ,

Para enviar mensagens através da comunicação serial estabelecida entre o Arduino e o computador e mostrar essas mensagens no display LCD escrevi o código abaixo baseado no artigo escrito por Benjamin Eckel:

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(11, 13, 12, 7, 8, 9, 10);
char message[16];
 
void setup() {
     Serial.begin(9600);
     lcd.clear();
}
 
void loop () {
     write_lcd();
}
 
int write_lcd () {
     int i = 0;
     char incoming_char = 0;
 
     while (incoming_char != '~') {
          incoming_char = get_incoming_char();
          message[i] = incoming_char;
          i += 1;
     }
     for (int j=i-1; j < 16; j++) {
          message[j] = ' ';
     }
     lcd.clear();
     lcd.print(message);
     Serial.println(message);
     delay(500);
}
 
char get_incoming_char() {
     char incoming_char;
 
     while (1) {
          if (Serial.available() > 0) {
               incoming_char = Serial.read();
               return incoming_char;
          }
     }
}

Para enviar as mensagens pode-se utilizar a própria IDE do Arduino ou escrever programas em outras linguagens para esse fim.

Usando Python fica fácil:

import serial
 
/*ttyUSB0 é a porta onde o Arduino está conectado e
9600 a velocidade de comunicação */
ser = serial.Serial('/dev/ttyUSB0', 9600) 
 
ser.write("string")
, ,

Finalmente consegui um tempo para escrever! Os 5 dias que passei fora, participando da Latinoware 2008 e viajando foram muito interessantes. Fiquei quase que por tempo integral participando da Olimpíada de Robótica Livre, onde eu e o restante da equipe brincamos com o Arduíno e construímos o que foi chamado de TDPSM (Theremin Digital com Percussão Sintetizada Mecanicamente), uma mistura de Theremin com percussão feita com um HD velho.

Robótica Livre

Robótica Livre

O Theremin foi um dos primeiros instrumentos musicais eletrônicos e produz som sem ser tocado. Ele possui duas antenas que funcionam como sensores, fazendo com que o som gerado seja modificado de acordo com a posição em que as mãos do músico se encontram. Uma das antenas controla o volume e a  outra o oscilador de rádio freqüência.

O Theremin digital baseia-se nessa idéia, porém, em vez de antenas ele utiliza um Resistor Variável Conforme Incidência De Luz (LDR), um tipo de resistor cuja resistência varia conforme a intensidade de radiação eletromagnética do espectro visível que incide sobre ele. Variando-se a resistência, ocorre a variação da tensão elétrica que é enviada para uma das portas analógicas do Arduíno. No Arduíno, após programado, realiza-se a conversão do valor obtido em um delay que será utilizado para a geração do sinal digital de saída para a geração do som. Este som se assemelha ao do Theremin, mas é digital. Em vez de um auto-falante analógico, utilizamos um piezo elétrico colado no fundo de copinhos de plástico.

Arduíno

Arduíno

A percussão sintetizada mecanicamente foi criada com um HD estragado, aproveitando o disco e a cabeça de leitura/gravação. A primeira idéia que nos ocorreu foi de aproveitar o movimento da cabeça para gerar batidas como qualquer outro instrumento de percussão. Porém, variando-se a freqüência de mudança da polaridade da cabeça, criou-se ressonância no disco gerando um som muito peculiar semelhante ao produzido por alguns sintetizadores, mas de forma mecânica. Para fazer a mudança de polaridade da cabeça do HD, usamos o Shield Motor Control, que consiste em um circuito de ponte H para o Arduíno para controlar dois motores. Também utilizamos um potenciômetro para controlar a freqüência da mudança de polaridade do braço do HD.

Arduíno e Motor Control Shield

Arduíno e Motor Control Shield

Nós não montamos um esquema elétrico do que fizemos, mas boa parte dos conhecimentos que utilizamos para construir o TDPSM foi extraído do livro Getting Started with Arduino, que possui uma versão online com 30 páginas livre para downloads. Nesse documento é possível encontrar os esquemas de ligação dos sensores LDR e do potenciômetro e programas de exemplo.

Código do Theremin:

int sensorPin = 0; // pino do sensor LDR
int somPin = 7; // pino do piezo
int val = 0;
 
void setup() {
    pinMode(sensorPin, INPUT);
    pinMode(somPin, OUTPUT);
}
 
void loop() {
    digitalWrite(somPin, HIGH);
    val = analogRead(sensorPin); //recebe sinal do sensor
    for( int i=0; i<200; i++ ) {
        digitalWrite(somPin, HIGH); //envia 1 para o piezo
        delayMicroseconds(val); //o valor pego do LDR e utilizado para alterar a frequencia do sinal
        digitalWrite(somPin, LOW); //envia 0 para o piezo
        delayMicroseconds(val); //o valor pego do LDR e utilizado para alterar a frequencia do sinal
    }
}

Código da Percussão:

int dirPin = 12; //pino de controle de direcao
int enablePin = 8; //pino de enable
int veloPin = 9; // pino de controle de velocidade
int potenciometroPin = 0; //pino do potenciometro
int var = 0;
 
void setup() {
    pinMode (potenciometroPin, INPUT);
    pinMode(dirPin, OUTPUT);
    pinMode(veloPin, OUTPUT);
    pinMode(enablePin, OUTPUT);
 
    digitalWrite(dirPin, LOW);
    analogWrite(veloPin , 100);
    digitalWrite(enablePin, HIGH);
}
 
void loop() {
    int vardelay;
    var = analogRead(potenciometroPin);
    vardelay = var;
 
    digitalWrite(dirPin, LOW); //move para um lado
    delay(vardelay);
    digitalWrite(dirPin, HIGH); //move para outro
    delay(vardelay);
}

Fácil, não? O Arduíno é uma plataforma de desenvolvimento Open-Source que inclui uma placa com entradas e saídas, Software de desenvolvimento e uma enorme comunidade crescente ao seu redor. O microcontrolador usado normalmente na plataforma é o ATMEGA8, para algumas de suas versões e ATMEGA128, para outras. O mais interessante de tudo, como pode-se ver, é que não é necessário o uso de instruções em Assembly ou em C para se programar o microcontrolador, sendo que as instruções são todas muito simples e com pouco estudo qualquer pessoa pode utilizar a plataforma.

Vídeo da Percussão Sintetizada Mecanicamente.

, , ,