Posts Tagged ‘ Arduino ’

Python + Arduino (Parte 2)

Além de plotar gráficos, com o Python é possível criar interfaces para modificar parâmetros do microcontrolador, enviando dados pela porta serial.

Como já visto na Parte 1 deste assunto, é preciso instalar o PySerial além do Python.

Desta vez eu fiz em uns 30 minutos um programa para enviar ao Arduino um número de 0 a 255 (8-bit) que serve para mudar o valor da resistência de um potenciômetro digital que deveria estar ligado à um amplificador de som.

Estou sem o amplificador no momento, então, para visualizar as mudanças coloquei um led para acender com PWM dentro do programa do arduino.

/*
 * Exemplo de leitura serial com o Arduino
 * Colocar isso dentro de um loop do programa
 */

char palavra[10];
unsigned char valor;

if (Serial.available()) {
    delay(100);
    unsigned char n = 0;
    while (Serial.available() > 0) {
        palavra[n++] = (Serial.read());
        //Cuidado com escrita fora do array
    }
    palavra[n] = '\0';

    valor = atoi(palavra);

    /*Usar o 'valor' para fazer alguma coisa, 
      como acender um Led com PWM*/
}

Outro dia coloco vídeo do sistema funcionando.

Caracteres personalizados

Estava vendo um post do Hack a day que mostrava um relógio num display de texto com os caracteres personalizados.

Cada letra do display de texto, ao menos esses com controlador HD44780 ou similar, é uma pequena matriz de 8 linhas por 5 colunas, sendo que você apenas escolhe o carácter e o controlador preenche a matriz.

Para estilizar os caracteres, você precisa gravar novos na memória volátil do controlador do LCD, sendo que ela tem espaço apenas para 8 (0 a 7 da tabela ASCII, não podem ser impressos). Os outros não podem ser modificados.

A ideia aqui é juntar 3 colunas para formar um número grande. Para isso, é preciso criar os caracteres que vão ser usados para desenhar as partes do número, sendo que precisam ser bem genéricos para que caibam nos 8 espaços da memória.

No caso eu usei 5 caracteres. Os três acima e as versões invertidas dos dois últimos. E criei os números como abaixo:

Para criar cada um dos 5 caracteres estilizados, é preciso enviar ao LCD o formato de cada uma das 8 linhas com números de 0 a 31, onde cada bit acende um ponto da linha. Você pode usar notação binária (por exemplo 0b10101) ou colocar o número decimal correspondente, se achar mais fácil.

Com as bibliotecas do Arduino, pode ser feito algo como:

LiquidCrystal lcd(2, 3, 4, 8, 9, 10, 11);
byte meus_chars[][8] = {{31,31,31,31,31,31,31,31}, 
                        {31,31,0,0,0,0,0,0},   
                        {0,0,0,0,0,0,31,31},
                        {31,31,0,0,0,0,0,31},
                        {31,0,0,0,0,0,31,31}};

for (byte i=0; i<5; i++){
    lcd.createChar(i, meus_chars[i]);
}

//Exemplo de exibição do número 0
lcd.clear();
lcd << '\0' << '\1' << '\0';
lcd.setCursor(0,1);
lcd << '\0' << '\2' << '\0';

Falando nisso, baixe a biblioteca Streaming que faz overload do << para imprimir coisas no LCD ou na Serial.

Abaixo um vídeo dos números no display:
Meu display 16×2 ainda não chegou. Enquanto isso, continuo com esse 8×2.

Projeto com display LCD

Com o advento do Arduino, fazer sistemas caseiros de controle ficou bem mais fácil, pois a IDE desse microcontrolador traz diversas bibliotecas que precisam de pouca configuração para acessar outros hardwares.

No final de semana eu fiz um pequeno projeto onde a hora e temperatura eram apresentadas num display LCD de texto com espaço para 8 caracteres em cada uma das suas duas linhas.

Para medir a temperatura eu usei um termômetro digital da Dallas Semiconductor, o DS18B20, que tem precisão de 0.0625 grau e já vem calibrado de fábrica.

Esse termômetro é um hardware bastante interessante, pois usa um protocolo chamado 1-Wire que permite diversos aparelhos conectados num fio e pode ser alimentado de forma parasita (pelo próprio fio de comunicação). Inclusive eu testei com dois termômetros conectados no mesmo fio e ambos apresentavam sempre a mesma temperatura (com uma diferença de no máximo 0.1 grau).

Basicamente, eles funcionam com um endereçamento de 64 bits, fazendo com que não exista confusão na comunicação. Essa forma de utilização é conhecida como microlan.

Para ajustar o horário, a solução mais simples foi mandar um comando serial para o microcontrolador, já que ele está conectado à USB e não tinha botões para colocar.

Abaixo deixo um vídeo onde eu seguro o termômetro e a temperatura (que já estava alta pelo calor do verão) aumenta um pouco mais.

Esse relógio-termômetro é parte de um projeto bem maior que estou fazendo para uma matéria da faculdade. Em breve mais coisas vão aparecer aqui.

Arduino – parte 2

Lembram que falei que iria montar um Arduino?

Bem, tomei vergonha na cara e comecei:

Abaixo a foto feita antes de transferir do papel para a placa de Fenolite. Cortada com serra, acho que não está muito reta:

Imag089

Na primeira vez que passei na laminadora, umas trilhas soltaram então tive que refazer. Foto da placa pronta para ser corroida:

Imag093_d

Por fim, a placa foi tomar seu banho de percloreto de ferro.

Coloco mais fotos (da próxima vez com qualidade melhor) quando estiver pronto, com os componentes soldados. Aguardem os próximos capítulos.

Arduino

Como no Brasil os eletrônicos chegam com preços abusivos, então temos que nos virar com o que tem por aqui.

Nessa filosofia DIY, estou montando meu primeiro (talvez de muitos) Arduino, na versão com porta serial e trilhas de um lado apenas da placa, para facilitar a montagem.

O Arduino Severino pode ser equipado com um ATmega8 ou um ATmega168, sendo que irei usar o primeiro, por ser mais fácil de encontrar.

image-0

Esse microcontrolador de 8bits tem 8KB de memória Flash, 1KB de RAM, 14 pinos para entrada e saída digital (sendo que 3 podem ser usados para PWM e 2 podem ser usados para transmissão e recebimento serial), 6 pinos de entrada analógica e roda à 16MHz.

No mundo de hoje, 8KB de armazenamento pode parecer pouco, mas dá para fazer bastante coisa com isso. Se realmente for preciso mais que isso, o microcontrolador desse Arduino pode ser trocado sem problemas pelo ATmega168, que, basicamente, possui 16KB de memória Flash. Fora isso, ele tem mais 3 portas que podem ser usadas com PWM.

Até agora, já pensei em alguns projetos para usar no Arduino, mas acho que vou precisar de mais placas!

Agora só preciso encontrar alguém que vá aos EUA para trazer a versão mais nova do Arduino, o Duemilanove.

Para programar qualquer modelo do Arduino, somente é necessário baixar o programa homônimo e sair escrevendo em uma linguagem chamada de Wiring, mas que é extremamente parecida com C/C++. Além disso, ela tem várias bibliotecas para controle de LCDs, motores de passo, servos, EEPROM e etc.

Vale a pena conferir e, se gostar, montar o seu próprio Arduino.