quarta-feira, 11 de junho de 2014

Casa Nova

Como estou me mudando de Volta Redonda/RJ (UFF) para Blumenau/SC (UFSC), eu vou criar um novo blog:  TeachDuino . Estou começando um novo projeto, baseado em Arduino, e vou documentar tudo que estou fazendo nesse novo blog. 
O que começou como uma brincadeira agora ficou sério. Nesse novo site eu estou desenvolvendo um framework para experiências de física, química, biologia, matemática e robótica. Para sentir um gostinho do que está por vir, deixo aqui para vocês o screenshot do primeiro programa que eu desenvolvi para a coleta de dados e gráficos. 
O próximo será uma adaptação do Ardublock para experiências de Física.

quarta-feira, 31 de julho de 2013

Fazendo gráficos com os dados do Arduino

É comum ver pessoas querendo fazer gráficos com as informações obtidas pelo Arduino. Quando fizemos o pHmetro, algumas pessoas gostaram do gráfico do pH que era mostrado no computador durante a experiência. Vejo muitos artigos explicando como fazer isso através do Processing e do Python, mas todos eles tem suas especificidades e exigem algumas modificações que nem sempre são simples.
Seus problemas acabaram! Com o super programa...
Para facilitar a vida de todos, criamos um programa/script em Python que, de forma simples, permite qualquer pessoa fazer gráficos sem precisar saber programar nada. A única coisa que você precisa é ter instalado o Python (>2.6), a biblioteca Matplotlib e fazer o download do nosso programa CLICANDO AQUI.

Como usar o programa:
Para quem usa Linux é simples, basta abrir um terminal e dar o comando "python grafico.py". O programa vai perguntar em qual porta o Arduino está conectado, tipicamente é a porta 0 (zero). Depois de informar a porta o programa fica esperando os dados chegarem do Arduino. O programa pode mostrar o gráfico deixo o eixo X "fixo" ou movendo o eixo X junto com os dados. No modo "fixo" o eixo X começa em X=0 e vai aumentando o X final conforme os dados vão chegando. No outro modo ele modifica o X inicial e final de forma que a diferença (DX) seja constante. Para alternar entre os modos, você precisa abrir o programa em um editor de texto e modificar a primeira linha do programa. Se você usar DX=0 o programa roda em modo fixo e se DX for diferente de 0 ele vai ajustar o X inicial e final conforme os dados forem sendo recebidos.  O programa aceita até 6 gráficos simultâneos.

Como enviar os dados do Arduino para o programa:
A comunicação entre o programa e o Arduino é feita por comunicação serial. Você deve usar o comando Serial.print() e Serial.println() para enviar seus dados do Arduino. Os dados devem estar formatados da seguinte forma:gráfico; valor em x; valor em y , onde "gráfico" é o número do gráfico que você enviar os dados (o programa aceita fazer até 6 gráficos simultaneamente). Note que os dados são separados por ponto e vírgula. Abaixo temos um código que envia os valores das portas analógicas 0 e 1 como o dado em Y e o tempo como o dado em X.
void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print('1');
  Serial.print(";");
  Serial.print(millis());
  Serial.print(";");
  Serial.print(analogRead(0));
  Serial.println("");
  delay(50);
  Serial.print('2');
  Serial.print(";");
  Serial.print(millis());
  Serial.print(";");
  Serial.print(analogRead(1));
  Serial.println("");
  delay(50);
}
 Usando o Ardublock:

quarta-feira, 24 de julho de 2013

ICExduino contribuindo na comunidade Open Source

O Daniel Girardi está ajudando a desenvolver o projeto Ardublock. Este projeto consiste da criação de uma interface de programação (IDE) para o Arduino, voltada para não programadores (crianças e adultos). A IDE usa uma estrutura de blocos, onde você simplesmente arrasta blocos de instruções que vão se conectando para formar o código do Arduino. Abaixo há dois exemplos clássicos, o primeiro é o código para piscar um LED e o segundo é um código para controlar o brilho do LED através do potenciômetro.
Pisca o Led a cada 1 segundo.

Controla a intensidade do brilho do LED através de um potenciômetro.
Veja como a programação é muito mais simples e intuitiva. O projeto está sob a licença GNU-GPL que permite que qualquer pessoa pode copiar, distribuir e modificar livremente. O código fonte do projeto pode ser baixado em https://github.com/danielfsc/ardublock e o código fonte original pode ser baixado em https://github.com/taweili/ardublock .

Para quem quiser apenas utilizar o Ardublock, pode baixar o programa AQUI - ardublock-all.jar. O processo de instalação é o mesmo para qualquer sistema operacional:
  1. Abra o Arduino e vá em File > Preferences;
  2. Na janela que abrir, localize a informação "Sketchbook location:";
  3. Abra o navegador de arquivos e dentro da pasta que está indicada em "Sketchbook location:" crie as seguintes pastas: tools>ArduBlockTool>tool;
  4. Dentro da pasta "tool" (a última pasta da árvore) salve o arquivo ardublock-all.jar;
  5. Agora é só fechar e abrir novamente o arduino. Para acessar o Ardublock, há um link na aba Tools.
Onde fica o atalho para abrir o Ardublock.
 O Ardublock é completamente integrado a interface do Arduino. Ao clicar em "Enviar" ele converte a estrutura de blocos para a linguagem Wire (a linguagem de programação do Arduino), coloca o código no programa do Arduino e faz o Upload para a placa Arduino. A única coisa que o Ardublock faz é traduzir a estrutura de blocos para Wire, portanto, as configurações de "Board" e "Serial Port" precisam ser feitas no próprio Arduino.

A vantagem do Ardublock frente as outras IDEs no formato de bloco, é que ela é de código aberto e gratuita. Além disso, ela permite que você veja o código em Wire, nenhum outro software permite isso. Para finalizar, deixo mais um código feito no Ardublock, esse é para o brilho do LED ir aumentando gradativamente.
Um programa para aumentar o brilho do LED gradativamente.


quarta-feira, 7 de setembro de 2011

pHmetro

Para quem não conhece, pHmetro é o aparelho utilizado para medir pH de líquidos. Ele é composto de um dispositivo de leitura e uma ponta de prova. Para montar um pHmetro baseado em arduino compramos o kit pH-stamp, da Atlas Scientific. O kit é composto pelo pH-stamp, a ponta de prova e uma solução de calibração. O pH-stamp é um circuito que faz a interface entre uma ponta de prova de pH e o arduino:
Ele possui 6 conexões:
  • Vcc - alimentação da placa (tensão: 3,3 - 5,5v);
  • GND - o bom e o velho terra do arduino;
  • PRB - Sinal da ponta de prova;
  • GND - Terra da ponta de prova;
  • Tx e Rx - Estas duas conexões são responsáveis pela comunicação com o arduino.
As 2 primeiras conexões são conhecidas e não há nenhum mistério nelas. As outras duas, PRB e GND, são conectadas a um conector BNC (conector de cabo coaxial, o mesmo da figura abaixo), sendo que o conector central corresponde ao PRB e o externo ao GND.
As outras duas conexões, Tx e Rx, serão conectadas em portas digitais do arduino. É importante lembrar que a porta Tx do pH-stamp deve ser conectada a porta Rx do arduino e vice-versa. Até aqui, tudo o que eu falei está no manual que veio junto com o kit. No manual tem um código arduino para Duemilanove. Este código não funciona com o arduino MEGA. Fiquei duas horas tentando achar algum erro e estava prestes a desistir quando achei um fórum onde um usuário teve o mesmo problema.
O problema está na biblioteca utilizada no manual (NewSoftSerial) que não funciona com o arduino Mega. A solução é simples, basta fazer as conexões Tx/Rx nas outras portas de comunicação serial do Mega (o arduino mega tem 4 portas seriais). No meu caso, fiz a conexão utilizando a Serial1 do Mega (portas 18 e 19). O código está no final deste post.
Para ler os dados da porta serial eu estou usando um script em Python (estou abandonando o Processing) que lê os valores da porta e faz o gráfico do pH x tempo. O gráfico é atualizado constantemente e enquanto atualiza o gráfico o python salva os dados em um arquivo no computador (dados.dat). Abaixo tem uma imagem da janela do programa.

Para fazer esse script em python precisei aprender sobre dois módulos do python que eu não conhecia. O primeiro foi o pyserial, que faz a comunicação entre o python e o arduino, e o segundo é o pygame, responsável pela parte gráfica. O python tem diversas ferramentas para fazer gráficos e com certeza a pior delas é o pygame. Contudo o pygame tem outras funcionalidades que no futuro serão interessantes. Eu vou melhorar este script e adicionar botões para controle do pHmetro como, iniciar, pausar, salvar etc.

Segue um vídeo do resultado final:


Os dois códigos (arduino e python) você pode baixar clicando aqui!

Últimas considerações sobre este projeto:
Um pHmetro de bancada custa em média R$560,00. Nós precisamos importar o pH-stamp, já que não tem nacional. O custo total do projeto foi:
  • Arduino Mega - US$25,00
  • pH-stamp + ponta de prova + solução de calibração - US$80,00
  • TOTAL: US$105,00 (aproximadamente 180,00 reais)
Final da história, um equipamento equivalente e com as mesmas funcionalidades, por menos de 1/3 do preço.

sábado, 3 de setembro de 2011

Projeto: Harpa Laser

O Matheus Graciano está trabalhando numa harpa laser. O funcionamento é muito simples, um laser é apontado diretamente para um LDR (resistor dependente de luz) e fica-se monitorando o sinal vindo do LDR na porta analógica. Quando o laser é interrompido, o valor lido na porta analógica muda e então sabemos que nota deve ser tocada. Abaixo segue o vídeo da primeira versão da harpa, em breve faremos uma versão melhorada.




Nesta primeira versão da harpa usamos:

  • 7 Lasers vermelho;
  • 7 LDRs;
  • 8 Resistores de 100 Ohms;
  • 1 Botão push;
  • Fios, muitos fios;
  • Algumas peças da Atto.

Esta harpa é composta por 7 "cordas" que devem ser ligadas a 7 portas analógicas. Portanto, tivemos que usar o arduino Mega que tem 16 portas analógicas. Na figura abaixo eu mostro o esquema de como ligar o LDR, o botão e o Buzzer.

Neste projeto, as portas utilizadas são diferentes da imagem acima. Portanto, se for fazer a sua harpa, verifique quais portas você utilizou. No vídeo acima, não utilizamos um buzzer e sim os auto-falantes do micro. Se quiser fazer o mesmo, basta trocar o buzzer do diagrama acima por um plug fêmea de fone de ouvido. Abaixo segue o código Arduino que foi utilizado:



////////////////////////////////////////////
// Harpa Laser
// Por Matheus Graciano
////////////////////////////////////////////

// Vetores com notas musicais
// A primeira posição é a nota normal
// A segunda é a nota sustenida
float notaA[] = {440.000, 466.164};
float notaB[] = {493.883, 523.251};
float notaC[] = {523.251, 554.365};
float notaD[] = {587.329, 622.254};
float notaE[] = {659.255, 698.456};
float notaF[] = {698.456, 739.989};
float notaG[] = {783.991, 830.609};

// Algumas variáveis
float notaAnterior = 0, notaNova = 0;
int dt = 0, t0, acidente = 0;

void setup(){
pinMode(21, INPUT); //Porta onde está ligado o botao sustenido
pinMode(7, OUTPUT); //Porta do Buzzer
}

void loop(){

//Verifica se o botao está apertado
acidente = digitalRead(21);
// Varre as portas analógicas de 0 a 7 e verifica a nova nota
if(analogRead(0)< 120) {
notaAnterior = notaC[acidente]/4;
}
if(analogRead(1)< 120) {
notaAnterior = notaD[acidente]/4;
}
if(analogRead(2)< 70) {
notaAnterior = notaE[acidente]/4;
}
if(analogRead(3)< 70) {
notaAnterior = notaF[acidente]/4;
}
if(analogRead(4)< 70) {
notaAnterior = notaG[acidente]/4;
}
if(analogRead(5)< 120) {
notaAnterior = notaA[acidente]/2;
}
if(analogRead(7)< 120) {
notaAnterior = notaB[acidente]/2;
}
//Se a nota mudar, ele para e envia a nova nota
if(notaAnterior != notaNova){
noTone(7); notaNova = notaAnterior; t0 = millis(); }
// A nota final dura 1 segundo
if(dt>1000)
{
noTone(7);
}
else{
tone(7, notaNova, 1000);
}
dt = millis()-t0;
}

Em breve postaremos a nova versão da harpa. Antes de finalizar este post, agradecemos a Atto Brinquedos (www.attobrinquedos.com.br) por nos ter doado um conjunto de peças. As peças combinam muito bem com arduino, tem auxiliado bastante nos projetos que estamos realizando.

terça-feira, 30 de agosto de 2011

Apostila do Curso de Introdução ao Arduino.

Como anunciado no post anterior sábado dia 27/08 eu dei um curso de introdução ao arduino. Ao preparar o curso eu escrevi algumas notas. No link abaixo tem o pdf dessas notas de aula.

http://dl.dropbox.com/u/16556959/curso.pdf

domingo, 21 de agosto de 2011

III Maratona de software livre de Volta Redonda

Pessoal, dia 26 e 27 de agosto o ICEx vai receber a III Maratona de Software Livre de Volta Redonda. Entre as atraçōes estão a palestra de abertura do Thadeu Penna, a minha palestra e o meu curso de Introdução ao arduino. Há muitas outras palestras e cursos. Para ver a programação e se inscrever basta acessar:
http://www.iaesmevr.org/maratona2011/