25 março 2014

IDE Arduino no Debian 7


Decidi realizar experiências com o famoso microcontrolador Open Source Arduino. Adquiri um Arduino UNO. Decidi pela versão UNO primeiro pelo custo, que é a versão mais barata, e segundo pela quantidade de tutoriais e experiências publicadas na Internet.

Placa de Desenvolvimento - Arduino UNO

Para quem não conhece, o Arduino é um microcontrolador, não um mini-computador, o que o difere bastante do Raspberry Pi. O Pi, como micro-computador, possui processador, memória RAM, memória sólida (SD-Card), e interfaces de entrada e saída (ETHERNET, USB, RCA, HDMI, áudio e GPIO). O Arduino, como microcontrolador, possui memória interna, e suas interfaces para o mundo externo (Saídas e entradas digitais de 3.3V a 5V, entradas analógicas e pinos para RX e TX).

O Arduino tem sua utilidade maior para a comunicação com o mundo externo, é mais performático que o Raspberry Pi através da GPIO. Exemplos como: controlar servo-motores e leitura de sensores mais sensíveis, são ótimas funcionalidade para o Arduino.

O casamento do Raspberry Pi, como cabeça pensante e comunicação através TCP/IP com a Internet, e o Arduino como olhos, braços e pernas para a interação com o mundo externo, é uma ótima opção para construção de solução de IoT.

Como usuário do Debian 7, resolvi relatar o que é necessário para instalar e configurar o Arduino IDE,

Instalando os pacotes
Para a instalação dos pacotes basta utilizar o apt-get conforme as linhas abaixo:

$ sudo apt-get update
$ sudo apt-get install arduino arduino-core

Os pacotes foram instaladas junto com suas dependências, e o Arduino IDE ficou disponível entre os Aplicativos.

Executando o Arduino IDE
Para executar o Arduino IDE, basta digitar na linha de comando:

$ arduino 

Ou então, clicar no ícone do Arduino IDE entre os Aplicativos instalados.
  
Na primeira tentativa de executar o Arduino IDE, apareceu uma mensagem avisando que é necessário adicionar o meu usuário ao grupo 'dialout' para realizar a comunicação com a USB, e um botão com a opção de 'Adicionar'.

Cliquei no botão, e inseri a senha de root como foi solicitado. Apareceu outra janela avisando que as alterações só surtiriam efeito após reiniciar o sistema. Reiniciei o sistema e a mesma mensagem apareceu. Achei estranho, e fui procurar informações no site do Arduino, onde achei:

http://playground.arduino.cc/Linux/All#Permission

Verifiquei o grupo do device USB do Arduino com o comando:

$ ls -la /dev/tty*

O Arduino é idenficado como ttyAXXX, no meu caso a saída foi:

crw-rw---T   1 root dialout   166,   0 Mar 25 23:22 ttyACM0

Adicionei meu usuário ao grupo dialout com o comando:

$ sudo usermod -a -G dialout $user

Após isso, reinicie o Debian. Abri novamente o Arduino IDE e não apareceu mais a mensagem.

Testando
O Arduino IDE vem como série de exemplo que podem ser encontrados em /usr/share/arduino/examples. Escolhi o diretório 01.Basics/Blink e abri o arquivo Blink.ino, que é um código para fazer um led piscar no pino 13. Abaixo segue o código:

int led = 13;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   

  delay(1000);           
  digitalWrite(led, LOW);
  delay(1000);
}


O código é transferido através do botão "Upload", e após colocar o Led no pino 13, ele começa a piscar. O vídeo abaixo é do Youtube, que demonstra a execução do código Blink.ino, para demonstrar o resultado que consegui.


Apesar de ser uma aplicação boba, ascender o LED foi o teste que o ambiente está configurado e funcional, e agora irei tentar fazer a comunicação Raspberry Pi e Arduino. 

04 março 2014

Hack de Carnaval: PiFM



Descobri que é possível transmitir em FM com o RaspberryPi através de software, utilizando a GPIO4.

O Imperial Club Robotic Society, um clube de estudantes de robótica do Reino Unido, realizou uma competição, onde saiu o código chamado PiFm. O código em C, se utiliza da GPIO4 (saída para geração de clocks) uma vez que é possível programar essa saída para diferentes frequências (de 88 MHz a 108 MHz), é possível gerar um sinal em FM modulado através de software.


O único hardware adicional é um pedaço de fio, de cerca de 20 cm para funcionar como antena.

Basta baixar o software daqui, e agora através deste repositório do github em que copie, e fiz alguns testes.

Descompacte o arquivo, ou faça um clone do repositório do github, e já está pronto para utilizar.

Para realizar um teste, basta entrar no diretório do projeto executar o código binário "pifm", passando o arquivo .wav desejado e a frequência de transmissão.

# ./pifm sound.wav 100.3

ATENÇÃO: O arquivo wav deve ser de 16 bits e faixa de frequênciad e 22050 Hz. O código só trabalha nessas configurações de arquivo wave. Maiores informações neste fórum: http://www.element14.com/community/thread/25073/l/pifm--raspberry-pi-as-a-trasmitter--music-problem.



O projeto original já vem com um código em python chamado PiFm.py, que é uma função escrita em python de como invocar o arquivo binário escrito em C.

Fiz uma pequena alteração para fixar a frequência de 100.3 MHz, pois o rádio que estava utilizando para testes tinha dificuldades em sintonizar a frequência de 100 MHz que é a default do código escrito em C.

Depois criei um código exemplo, para demonstar que é possível chamar vários arquivos em sequência, e criei o myPiFm.py



Tudo bem simples, em questão de umas 2 horas foi possível realizar esse Hack. Mais uma façanha da plaquinha "bombril" Raspberry PI.

Fontes utilizadas:
http://www.icrobotics.co.uk/wiki/index.php/Turning_the_Raspberry_Pi_Into_an_FM_Transmitter

http://pplware.sapo.pt/linux/raspberry-pi/transforme-o-raspberry-pi-numa-emissora-fm-em-1-minuto/

http://www.hack4fun.com/raspberry-pi/turning-the-raspberry-pi-into-an-fm-transmitter-with-pifm/