sexta-feira, 5 de dezembro de 2014

Sistema de Controle pelo Lábio - Mouse

O Sistema de Controle pelo Lábio é um mouse controlado pelo lábio, permitindo que pessoas com tetraplegia consigam acessar computadores, tablets e smartphones.

No meu doutorado avaliei a capacidade do lábio inferior controlar dispositivos de entrada que atuam como mouse ou controlam cadeiras e rodas motorizadas.

O artigo científico que trata o assunto está em acesso aberto (open science) em:
Human-Computer Interface Controlled by the Lip

Os dispositivos criados visam a ajudar pessoas com tetraplegia promovendo acesso ao computador, tablet, smartphone até controlando cadeiras de rodas motorizadas usando tecnologia de baixo custo e abertas.

Reportagem do Jornal Nacional com Marco Pellegrini usando o Sistema de Controle pelo Lábio apresentado no TOM-SP 2014, no vídeo é destacado a partir do 1 minuto  e 45 segundos:


 Jornal Nacional - Inventores criam tecnologias para inclusão de portadores de deficiência - Edição do dia 29/11/2014


Jornal Nacional - Inventores criam tecnologias para inclusão de portadores de deficiência - Edição do dia 29/11/2014





TOM "Tikkun Olam Makers" 2014 vídeo nacional




Vou apresentar duas configurações de hardware:

  • Controle do mouse por Bluetooth;
  • Controle do mouse com cabo.

Ambas versões utilizam a Pro Micro 5v 16Mhz (compatível com a Arduino Leonardo) que tem o microcontrolador ATmega32u4:

Versão Bluetooth


Esta versão é alimentada pela bateria, o PowerBoost 500 tem um conector micro USB onde é possível conectar o carregador de celulares (ou mesmo um cabo USB do computador) para carregar a bateria, ele gerencia a carga e descarga da bateria e ainda fornece os 5v para alimentar a Pro Micro. 

Detalhes da configuração do módulo Bluetooh Roving RN 42-HID no post:
http://marchanjo.blogspot.com.br/2012/11/mouse-bluetooth-usando-arduino-uno-e.html






Lista de Materiais


1- Pro Micro - 5V/16MHz - SparkfunAliExpress US$ 6,44, Lab de Garagem
1- Thumb Joystick - Sparkfun US$ 4,95, AliExpressLab de Garagem
1- Roving RN42-HID Bluetooth Module - BlueSMiRF HID  - Sparkfun US$ 24,95
1- PowerBoost 500 Charger - Rechargeable 5V Lipo USB Boost @ 500mA+ - Adafruit US$ 14,95
1- Lithium Ion Polymer Battery - 3.7v 500mAh -  Adafruit US$ 7,95
1- Switch

Hardware e Software

Ambas versões (Bluetooth e de baixo custo) compartilham o mesmo firmware, basta configurar a variável:

boolean bluetooth=true;

Arquivo em:



Versão de baixo custo (com fio)

Esta versão utiliza um benefício da placas que utilizam microcontrolador ATmega32u4: o código Arduino tem tratamento para mouse muito simples.



Lista de Materiais


1- Pro Micro - 5V/16MHz - SparkfunAliExpress US$ 6,44, Lab de Garagem
1- Thumb Joystick - Sparkfun US$ 4,95, AliExpressLab de Garagem
1- Cabo USB microB - Sparkfun, AliExpress US$ 0,85, Lab de Garagem
1- Cabo OTG (opcional para conectar em Smartphones/Tablets - Sparkfun US$ 2,95 



Hardware e Software

Ambas versões (Bluetooth e de baixo custo) compartilham o mesmo firmware, basta configurar a variável:

boolean bluetooth=false;

Arquivo em:






Creative Commons License
The hardware and the software are released under Creative Commons Attribution-ShareAlike 4.0 International License.

terça-feira, 18 de novembro de 2014

Mouse para os Pés - Foot Mouse

O Mouse para os pés (Foot Mouse) é um dispositivo para controlar o cursor do mouse através dos pés. Foi desenvolvido usando componentes de baixo custo visando a reprodução dos mesmos.

A base do seu funcionamento é a placa Pro Micro (compatível com a Arduino Leonardo - ATmega32u4) que facilita em muito o desenvolvimento de dispositivos que atuam como mouse.

Basta conectar o cabo USB microB (mesmo usado para carregar a maioria dos smartphones) num computador que o Foot Mouse é reconhecido como um mouse padrão. Com um cabo OTG (On-The-Go) é possível conectar em smartphones ou tablets compatíveis com este padrão.

Reportagem da TV Tribuna sobre o Mouse para os Pés:


 Projeto da USP inclui deficientes intelectuais no uso de computadores

http://g1.globo.com/sp/santos-regiao/jornal-tribuna-2edicao/videos/t/edicoes/v/projeto-da-usp-inclui-deficientes-intelectuais-no-uso-de-computadores/3839035/

Lista de Materiais


1- Pro Micro - 5V/16MHz - Sparkfun, AliExpress US$ 6,44, Lab de Garagem
2- Thumb Joystick - Sparkfun, AliExpress US$ 4,68, Lab de Garagem
2- Caixas Patola PB 114-2 - Mult Comercial
1- Cabo USB microB - Sparkfun, AliExpress US$ 0,85, Lab de Garagem
1- Cabo OTG (opcional para conectar em Smartphones/Tablets - Sparkfun US$ 2,95 
2- Botões de pressão
8- Extensores




Circuito





Software e Hardware



GitHub: https://github.com/Marchanjo/FootMouse



Montagem



Posição do centro dos furos nos dois gabinetes, o diâmetro dos furos devem ser compatíveis com os botões de pressão em um gabinete no outro com o thumb joystick.

Enquanto trabalhava furando os gabinetes eu encapei com fita adesiva para evitar arranhões acidentais.


























Creative Commons License
The hardware and the software are released under Creative Commons Attribution-ShareAlike 4.0 International License.

quarta-feira, 18 de junho de 2014

Dicas básicas no uso da Arduino Galileo



Se você está acostumado a usar outras Arduinos (como a UNO) aqui vão algumas dicas importantes:

1-Ligue a Galileo na fonte e somente depois o conector micro USB (USB Client)
Cuidado: Não se deve alimentar a Galileo pela USB, sempre que quiser reiniciar (tirando a energia) lembre-se de desconectar a USB primeiro, depois a fonte, volta a fonte e volta a USB.
Detalhe a USB não é reconhecida pelo seu computador imediatamente vai demorar alguns segundos.

2-A IDE 1.5.3 não abre com formato Português (Brasil),  a Splash Screen chega a aparecer (já vi acontecer no Windows 7 e Windows 8.1)
Soluções de contorno:

A - Criar um atalho (baseado na solução de guigonyts de 24 de junho de 2014):



Destino:
C:\arduino-1.5.3\java\bin\javaw.exe -Duser.language=en -Duser.region=US -Xms128m -Xmx128m -classpath "lib;lib\pde.jar;lib\core.jar;lib\jna.jar;lib\ecj.jar;lib\RXTXcomm.jar;lib\commons-exec-1.1.jar" processing.app.Base

Iniciar em:
C:\arduino-1.5.3\

Onde "C:\arduino-1.5.3" é a localização da IDE do Arduino. 

B - Mude no Painel de Controle / Control Panel -> Região e Idioma / Locale -> Formato/Format
use: Inglês (Estados Unidos)

mais informações:
https://communities.intel.com/thread/45615

C -  Criar um arquivo bat (como comentado por guigonyts em 24 de junho de 2014) com as seguintes linhas:

cd C:\arduino-1.5.3
java\bin\java -Duser.language=en -Duser.region=US -Xms128m -Xmx128m -classpath "lib;lib\pde.jar;lib\core.jar;lib\jna.jar;lib\ecj.jar;lib\RXTXcomm.jar;lib\commons-exec-1.1.jar" processing.app.Base

Onde "C:\arduino-1.5.3" é a localização da IDE do Arduino. 

mais informações:
http://forum.arduino.cc/index.php?topic=234307.0




3- Atualize o Firmware: Na IDE: Help->Firmware Update

4- É necessário ter um SDcard (menor que 32GB) para salvar os Sketches
https://communities.intel.com/thread/45442

Format o SD card com FAT ou FAT32
Baixe (ou vesão mais nova):
LINUX_IMAGE_FOR_SD_Intel_Galileo_v1.0.0.7z
https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=23171

Descompacte o arquivo e copie no raíz do SDcard (é um diretório e alguns arquivos)

Coloque na Galileo (sem energia) depois ligue-a e aguarde (pode ser que demore mais que o normal)

Transfira um sketch (pode ser o blink), se você desconectar da USB e em seguida desconectar da energia, quando você conectar na energia vai demorar algo em torno de 1 minuto para carregar.


5- Se for usar a comunicação serial use Serial1 (TX digital 1/RX digital 0) e não Serial, pois a Galileo tem mais de uma UART, exemplo:
Serial1.begin(115200);
e não
Serial.begin(115200);

mais informações:
https://communities.intel.com/thread/46746

segunda-feira, 20 de janeiro de 2014

Tutorial: Utilizando código .CPP na programação da Arduino

Este post visa demonstrar uma forma de programar a Arduíno sem utilizar sua IDE. Eu me inspirei no post deste link:

Tutorial: Using Atmel Studio 6 with Arduino projects

Se você tiver alguma sugestão, por favor, adicione nos comentários.

Se você estiver usando Linux, veja este post:
Programar o Arduino em linguagem C++ via comando de linha (em Linux) e sem uso da IDE ou qualquer interface gráfica de usuário

A IDE da Arduíno funciona muito bem, para que, então ter todo este trabalho?

Organização, quando seu projeto começa a ficar grande é importante você organizar o seu código em arquivos diferente com classes, etc. Essa não é a forma que os arquivos .PDE ou .INO funcionam, logo o ideal é trabalhar com os arquivos .h .c .cpp padrões do código C ou C++.

Não carregar o Arduíno bootloader, a Arduíno inclui junto com o seu código o bootloader (mais informações aqui), isto pode ser um problema se você está com o processador embarcado (sem uma Arduíno), pois podem ser produzidos sinais nas diversas portas I/O que podem provocar comportamentos não esperados do seu circuíto.

Se você está procurando esta alternativa para ter acesso ao arquivo .HEX, não é necessário! Quando você compila seu código na IDE da Arduíno o arquivo .HEX é gerado no diretório:

C:\Users\nome do usuário\AppData\Local\Temp\build.tmp

Com o arquivo .HEX basta utilizar a USBtinyISP para transferir os binários para o processador usado na sua placa. IMPORTANTE - Sempre que você transfere o .HEX através do USBtiny, você perde o bootloader se este é o seu objetivo tudo bem. Se você perdeu o bootloader e quer restaurá-lo basta usar a própria USBtiny e a IDE da Arduíno (recomendo fazer isso com uma conta de administrador do Windows, se você estiver usando Windows):

Tools->Board
Tools->Programmer->USBtinyISP
Tools->Burn Bootloader


Se você quer trabalhar os seu código da Arduíno arquivos .INO no Atmel Studio, basta instalar a Extensão Arduino Ide for Atmel Studio no Extention Manager no AtmelStudio, e não precisa seguir este tutorial.



Passo a Passo


Estou trabalhando com Windows 7 

Material necessário:


Arduíno UNO





USBtinyISP



Você pode fazer uma com as instruções contida neste link. Caso você faça uma USBtinyISP lembre-se de garantir que o cabo (que você fizer) conecte o pino 1 dela com o pino 1 da outra placa.






Atmel Studio 6

Baixe instale e execute o update. (você precisa fazer isso com uma conta com direitos de administrador no Windows)

Eu usei o Atmel Studio 6.1 update 2.0 (build 2730)
E o update recomendado foi o Atmel Kits




IDE Arduíno

Baixe e instale a versão compatível com o processador que você vai usar, eu recomendo que você use a última versão estável.

Eu usei a versão 1.05






Copiando a biblioteca Arduíno Core


Abra a IDE da Arduíno.
Selecione a placa Arduíno que possui o mesmo processador que você usa, no meu caso escolhi a Arduíno Uno, pois eu uso o processador ATmega328P.

IMPORTANTE: A IDE da Arduíno vai gerar uma biblioteca Arduíno Core considerando o processador da Arduíno que você escolheu.

Abra um exemplo (eu usei o Blink), clique em Verify (para compilar).





Vá ao diretório:

C:\Users\nome do usuário\AppData\Local\Temp\build.tmp

Se existirem vários parecidos, escolha aquele que foi criado na data e hora que você compilou o código.

Copie o arquivo core.a que está neste diretório e renomeie para libcore.a e guarde para passos futuros.

Criando o Projeto

Abra o Atmel Studio.

Crie um novo projeto:



Escolha GCC c++ Executable Project.

Coloque o nome que desejar.




Escolha o seu processador, eu trabalho com o ATmega328P (lembre-se que tem que ser o mesmo que foi escolhido para gerar a core.a na IDE da Arduíno).






Configurando o Projeto


Entre nas propriedades do projeto



Neste ponto, o ideal seria fazer as modificações em  All Configurations, mas (na minha instalação) ocorreu o erro abaixo, então eu fiz as configurações em Debug e Release.





Telas das Configurações (as duas Release e Debug):

Para 16MHz use:             
F_CPU=16000000L  

Para 8MHz use:               
F_CPU=8000000L

Versão da IDE da Arduino, no meu caso 1.05, logo:
ARDUINO=105


AVR/GNU C++ Compiler - Symbols




AVR/GNU C++ Compiler - Directories

Estes dois são obrigatórios, pois apontam para a Arduino.h e pins_arduino.h

Direcione para os diretórios da instalação da sua IDE da Arduíno, no meu caso são estes.

C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino
C:\Program Files (x86)\Arduino\hardware\arduino\variants\standard

Vou incluir mais um apontando para uma biblioteca, a EEPROM se você não for usá-la não precisa incluir, mas neste post eu vou fornecer um código que utiliza esta biblioteca

C:\Program Files (x86)\Arduino\libraries\EEPROM





Preste bem a atenção se você está configurando em C++ e não em C por engano, caso você erre irá receber este erro quando for gerar o .HEX, o erro:

Error 1 Arduino.h: No such file or directory

Especificamente se refere ao diretório:
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino



AVR/GNU C++ Compiler - Optimization

-fdata-sections

Selecione “prepare functions for garbage collection”
no meu caso já estava selecionado




AVR/GNU C++ Compiler - Miscellaneous
-fno-exceptions




AVR/GNU Linker - Optimization
Selecione “Garbage Collect unused sections (-Wl, –gc-sections)”no meu caso já estava selecionado



Resumo das configurações para você copiar-e-colar:



Atenção é no AVR/GNU C++

AVR/GNU C++ Compiler - Symbols
F_CPU=16000000L
ARDUINO=105

AVR/GNU C++ Compiler - Directories
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino
C:\Program Files (x86)\Arduino\hardware\arduino\variants\standard
C:\Program Files (x86)\Arduino\libraries\EEPROM

AVR/GNU C++ Compiler - Optimization
-fdata-sections

Selecione “prepare functions for garbage collection”
no meu caso já estava selecionado

AVR/GNU C++ Compiler - Miscellaneous
-fno-exceptions


AVR/GNU Linker - Optimization
Selecione “Garbage Collect unused sections (-Wl, –gc-sections)” no meu caso já estava selecionado

Clique em Save All

Adicionando a biblioteca libcore.a

Copie a libcore.a (que você separou no começo do tutorial) e cole no diretório do seu projeto, junto como o arquivo .cpp.

C:\Users\nome do usuário\Documents\Atmel Studio\6.1\nome do projeto\nome do projeto\


Abra o Solution Explorer



Clique com o botão direito do mouse em Libraries e Selecione Add Library



Clique em Browse Libraries e procure a libcore.a no diretório:
C:\Users\nome do usuário\Documents\Atmel Studio\6.1\nome do projeto\nome do projeto\







IMPORTANTE: Esta libcore.a deve ser gerada para o mesmo processador

que você escolheu na criação do projeto no AtmelStudio, caso o processador seja diferente (quando for compilar) você receberá o erro:

Error 12 skipping incompatible 

Caso isto ocorra, basta gerar a core.a novamente (selecionando a Arduíno que possui o mesmo processador), renomeie ela para libcore.a, remova a errada e adicione a nova.


Vamos compilar algum código....não, hahahaha, ainda não.


Vamos configurar as ferramentas para transferir o .HEX para o processador



Adicionando a biblioteca EEPROM


Se você não for usá-la não precisa incluir, mas neste post eu vou fornecer um código que utiliza esta biblioteca

Clicando como botão direito do mouse no projeto, crie uma pasta para organizar as bibliotecas:



Coloque o nome EEPROM





 Clicando como botão direito do mouse na pasta, adicione um item existente.




Direcione para o arquivo cpp da biblioteca, no meu caso a biblioteca EEPROM fica no diretório:

C:\Program Files (x86)\Arduino\libraries\EEPROM\EEPROM.cpp





AVRDUDE

Clique em Tool -> External Tools ...






Baixe e instale a última versão do AVRdude

Tem no diretório da Arduíno IDE (no meu caso 1.05)
 C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe  
mas ele não aceitava a opção -c (interpretava como -C), por este motivo estou instruindo a usar a versão no link acima. Se a versão que veio junto com a sua IDE da Arduíno funcionar, pode usá-la.


Vamos adicionar quatro ferramentas usando o Avrdude.exe:

Duas ferramentas usam o Serial-USB para você transferir o .HEX para uma Arduino, você precisa saber em que COM está sua Arduíno, no meu caso é COM17. Nestas duas eu uso o AVRdude que vem junto com a IDE da Arduíno.

Duas ferramentas usam a placa USBtiny  para você transferir o .HEX através da conexão ICSP, para isso você precisa ter (comprar ou montar) uma USBtiny e instalar os driversNestas duas eu uso o AVRdude que foi baixado à parte.

Para todas você vai precisar colocar o código correspondente ao processador que você usa (o mesmo que você selecionou no projeto (no meu caso é o Atmega328P) o código é m328p você pode encontrar os códigos aqui, ou procure na internet as palavras "avrdude options").



External Tools

Troque o processador em todos argumentos e a Com no dois primeiros.



Release:
Title: Release - USB-Serial Programmer: COM17
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -v -v -v -v -pm328p -carduino -P\\.\COM17 -b115200 -D -Uflash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”






Debug
Title: Debug - USB-Serial Programmer: COM17
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C"C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -v -v -v -v -pm328p -carduino -P\\.\COM17 -b115200 -D -Uflash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”







Title: Release - USBtiny Programmer
Command: C:\WinAVR-20100110\bin\avrdude.exe
Arguments: -c usbtiny -p m328p -U flash:w:"$(ProjectDir)Release\$(ItemFileName).hex":i

Selecione “Use Output window”





Title: Debug - USBtiny Programmer
Command: C:\WinAVR-20100110\bin\avrdude.exe
Arguments:-c usbtiny -p m328p -U flash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i

Selecione “Use Output window”






Compilando Código


Quando você criou o projeto foi criado automaticamente um código:

#include <avr/io.h>

int main(void)
{
    while(1)
    {
        //TODO:: Please write your application code 
    }

}
Como a ideia é mostrar o funcionamento do AtmelStudio com pelo menos um biblioteca eu escolhi, a EEPROM.

O código abaixo é muito simples ele grava 0 na EEPROM, depois lê e apresenta na serial (o led pin13 fica apagado), grava 1 (led aceso), lê e apresenta na serial (led apagado), grava 1 (led aceso) e assim por diante.

Desta forma você pode abrir o serial monitor (9600) e ver a leitura.

Sobrescreva o código acima com este código abaixo:
#include <Arduino.h> /* IMPORTANTE */
#include <EEPROM.h>

void setup();
void loop();
#line 10
int led = 13;
int address = 0;
int count = 0;
byte value;


int main(void)
{
 init();

  #if defined(USBCON)
 USBDevice.attach();
 #endif
 
 setup();
 
 for (;;) {
  loop();
  if (serialEventRun) serialEventRun();
 }
 
 return 0;
}


void setup()
{
 Serial.begin(9600);
 while (!Serial) {
  ; // wait for serial port to connect. Needed for Leonardo only
 }
 // write a 0 to all 512 bytes of the EEPROM
 for (int i = 0; i < 512; i++)
  EEPROM.write(i, count);
 
 pinMode(led, OUTPUT);
}

void loop()
{
 
 // read a byte from the current address of the EEPROM
 value = EEPROM.read(address);
 
 Serial.print(address);
 Serial.print("\t");
 Serial.print(value, DEC);
 Serial.println();
 
 // advance to the next address of the EEPROM
 address = address + 1;
 
 // there are only 512 bytes of EEPROM, from 0 to 511, so if we're
 // on address 512, wrap around to address 0
 if (address == 512)
  {
  digitalWrite(led, HIGH);
  address = 0; 
  count++; 
  if(count == 256) count=0;
  
  for (int i = 0; i < 512; i++)
   EEPROM.write(i,count);
   
  
  }
 
 
 delay(3);
 digitalWrite(led, LOW);
}




Você pode compilar pressionando o F7 e transferir o código usando a External Tool, se você estiver trabalhando na versão Release e com uma Arduíno conectada na USB:


Tools-> Release - USB-Serial Programmer: COM17

Para a versão Debug use:
Tools-> Debug - USB-Serial Programmer: COM17


Mas o objetivo é transferir o código através da USBtinyISP, então conecte ela no micro e conecte no seu circuito (ou uma Arduíno pela pora ICSP nela), se for porta ICSP da Arduíno, lembre-se que você irá perder o bootloader.


Tools-> Release - USBtiny Programmer

Para a versão Debug use:

Tools-> Debug - USBtiny Programmer

Pronto !!!

Se você perdeu o bootloader e quer restaurá-lo basta usar a própria USBtiny e a IDE da Arduíno (recomendo fazer isso com uma conta de administrador do Windows, se você estiver usando Windows):

Tools->Board
Tools->Programmer->USBtinyISP
Tools->Burn Bootloader