quarta-feira, 14 de maio de 2014

Blogs Sobre Arduino

http://www.arduinoecia.com.br/
http://www.portalmcu.com.br/

http://www.portalmcu.com.br/search/label/Arduino

https://codebender.cc/how_it_works

http://www.miniinthebox.com/pt/arduino_c5028?currency=BRL&litb_from=paid_adwords_search&adword_mt=b&adword_ct=39420572272&adword_kw=%2Bprojetos+%2Bcom+%2Barduinos&adword_pos=1t3&adword_pl&adword_net=g&adword_tar&gclid=CLHRupHK-r0CFS9p7AodaA0AOA

http://arduinocuritiba.com/

http://www.eletrogate.com/cases-protecao-ct-6ef74
http://www.eletrogate.com/pd-df8b9-case-para-arduino-uno-em-mdf.html?ct=6ef74&p=1&s=1
http://www.eletrogate.com/pd-df8bb-case-para-arduino-uno-em-acrilico-transparente.html?ct=6ef74&p=1&s=1


http://www.dx.com/p/usb-host-shield-2-0-board-166217#.U2AYx1VdVng


ArduinoDroid - Arduino IDE
https://play.google.com/store/apps/details?id=name.antonsmirnov.android.arduinodroid2


http://www.seriallink.com.br/forum/#.U2QWEIFdVng
http://www.open-electronics.org/
http://www.oarduino.com/category/tutoriais/

http://n.mtng.org/ele/arduino/oscillo.html


Formatar Codigo-Fonte Blogger
http://codeformatter.blogspot.com.br/2009/06/about-code-formatter.html


http://mecatronicadegaragem.blogspot.com.br/2012/07/proteus-710-completo-com-licenca.html
http://mecatronicadegaragem.blogspot.com.br/2012/11/proteus-710-portatil-nao-precisa.html


http://www.electronicaestudio.com/arduino_productos.htm
http://www.stefanomega.com.br/tfg/regCron/?attachment_id=469
http://lab.guilhermemartins.net/2009/05/06/paperduino-prints/

Paperduino
Super Pixel Bros
http://www.bradsprojects.com/electronics/Bradsprojects-SuperPixelBros.html
http://www.youtube.com/watch?v=Mf6buDkbyAQ





http://www.snk-neofighters.info/forum/showthread.php?6235-Tutorial-Cartmod-Reproduzindo-jogos-em-cartuchos
http://www.slipperybrick.com/category/diy/page/3/


Gerado no http://hilite.me/
em Language: C Stile: Native

OctaSwitch com Arduino

Usando a EEPROM do Arduino para armazenar dados de forma permanente.


Neste tutorial vamos mostrar como usar a memória EEPROM interna do Arduino. A EEPROM está presente em todas as versões do Arduino, mas muitas vezes a falta de conhecimento de sua existência é contornada com a instalação de memórias EEPROM externas ou mesmo de um cartão de memória SD de vários gibabytes para armazenar algumas poucas variáveis ou dados.
Uma EEPROM (de Electrically-Erasable Programmable Read-Only Memory) é um tipo de memória que pode armazenar valores que serão retidos mesmo quando a energia é desligada e pode ser programada e apagada várias vezes, eletricamente. Pode ser lida um número ilimitado de vezes, mas só pode ser apagada e programada um número limitado de vezes, que varia normalmente entre 100.000 e 1 milhão.
 A quantidade de memória EEPROM presente em um Arduino varia conforme o microcontrolador instalado na placa: 1024 bytes para o ATmega328, 512 bytes no ATmega168 e ATmega8, e 4 KB (4096 bytes) sobre o ATmega1280 e ATmega2560.
 Vamos usar a biblioteca EEPROM para ler e escrever valores na memória EEPROM, esta biblioteca já vem instalada na IDE e existem três exemplos de uso na aba File/Examples/EEPROM.
Para usar esta função basta incluir a biblioteca no início do sketch desta forma:

            #include <EEPROM.h>

Uma vez que a biblioteca é incluída no programa, um objeto EEPROM está disponível para o acesso a memória. A biblioteca fornece comandos para ler e escrever dados na memória. A biblioteca EEPROM requer que você especifique o endereço de memória que você deseja ler ou escrever. Isto significa que você precisa se manter a par de onde cada valor é escrito de forma que quando você for ler o valor, acesse a partir do endereço correto.
Para escrever um valor na memória, use:

           EEPROM.write(address, value);

Onde:
address – posição da memória que será escrito, é um inteiro entre 0 e 1023  (UNO);
value -  valor a ser armazenado inteiro entre 0 e 255 (um único byte).

Agora vamos entender o exemplo que está disponível na IDE do arduino para a utilização deste comando, primeiro devemos montar um potenciômetro na entrada 0 do arduino conforme mostrado na figura abaixo, em seguida devemos fazer o upload do código do sketch mostrado mais abaixo para o arduino.


Este exemplo simplesmente salva periodicamente na EEPROM os valores lidos na entrada analógica para que possam ser acessados posteriormente.          
Código exemplo para o comando EEPROM.Write:


/*
 * Exemplo EEPROM Write
 * Armazena valores lidos na entrada analógica na EEPROM.
 * Estes valores permanecerão guardados mesmo que a placa
 *  seja desligada e podem ser recuperados posteriormente pelo próximo  sketch
 */

#include <EEPROM.h> // incluir a biblioteca
int addr = 0;    // endereço de escrita na memória

void setup()
{
}

void loop()
{
  // é preciso dividir val por 4 porque o range da entrada analógica
  // vai de 0 a 1023 e cada byte da EEPROM só pode guardar
  // valores compreendidos entre 0 e 255.
  int val = analogRead(0) / 4;

  // escreve o valor de val na EEPROM no endereço selecionado em addr.
  // este valor permanecerá guardado mesmo
  // que placa seja desligada da fonte de alimentação
  EEPROM.write(addr, val);

  // avança para o próximo endereço indo até o byte 512 da
  // EEPROM, quando então retorna para o byte 0.
  addr = addr + 1;
  if (addr == 512)
    addr = 0;

  delay(100);
}


Este sketch começa com a inclusão da biblioteca EEPROM e da declaração da variável  addr que define o endereço da EPROM a ser gravado. Em seguida é iniciado o loop principal com a realização da leitura do valor presente na entrada analógica 0 divido por 4 que é salvo em val. O valor de val é escrito no endereço da EEPROM indicado por addr. Em seguida o endereço é incrementado em uma unidade e se for igual a 512 é zerado. O programa aguarda por 100ms para então repetir indefinidamente o loop principal.
Para ler uma determinada posição de memória, use:

value = EEPROM.read(address);

Onde:
address – posição da memória que será lido, é um inteiro entre 0 e 1023  (UNO);
value -  valor do endereço da EEPROM é um inteiro entre 0 e 255 (um único byte).

Abaixo vemos o exemplo da IDE do arduino para a utilização deste comando, não é necessário alterar o circuito montado para o exemplo anterior visto que este sketch usa apenas o canal serial do arduino através do cabo USB. Faça o upload do sketch abaixo para o arduino e abra o monitor serial, voce verá que os valores salvos na EEPROM pelo sketch anterior serão mostrados na tela do computador.
Código exemplo para o comando EEPROM.Read:


/*
 * EEPROM Read
 * Le o valor de cada byte da EEPROM e imprime na tela do computador.
 * o código deste exemplo é de domíno público
 */

#include <EEPROM.h>    // incluir a biblioteca

// inicia lendo apartir do primeiro byte (endereço 0) da EEPROM
int address = 0;    // endereço de escrita na memória
byte value;    // valor lido da EEPROM

void setup()
{
  Serial.begin(9600);    // inicializa o canal de comunicação serial
}

void loop()
{
  // lê o byte no endereço atual da EEPROM
  value = EEPROM.read(address);

// envia o valor lido para o computador pela porta serial
  Serial.print(address);
  Serial.print("\t");
  Serial.print(value, DEC);
  Serial.println();

  // avança para o próximo endereço da EEPROM
  address = address + 1;

  // quando atingir o endereço 512 retorna
  // para o endereço 0
  if (address == 512)
    address = 0;

  delay(500);
}


Estes exemplos foram feitos para rodar em qualquer versão do arduino, por isso que só foram escritos ou lidos os endereços de 0 a 511 da EEPROM, se voce quiser pode ficar a vontade e tentar alterar o sketch para ler e escrever em todos endereços disponiveis na sua placa.
Agora voce pode estar se perguntando: 
“Existe alguma forma de armazenar um valor maior que 255 na EEPROM?”
A resposta é sim e é algo fácil de se fazer, usando os comandos para a conversão de valores de 16 ou de 32 bits em bytes.
loByte = highByte(val);
hiByte = lowByte(val);

Onde:
val - qualquer tipo de variavel
loByte - byte com a parte mais baixa de val
hiByte - byte com a parte mais alta de val
Vamos agora alterar o primeiro programa de forma a salvarmos os valores lidos da entrada analógica sem ter dividir o valor por 4 de forma a não perder a resolução da medida.


/*
 * Exemplo EEPROM Write
 * Armazena valores lidos na entrada analógica na EEPROM.
 * Estes valores permanecerão guardados mesmo que a placa
 *  seja desligada e podem ser recuperados posteriormente pelo próximo  sketch
 */

#include <EEPROM.h> // incluir a biblioteca
int addr = 0;    // endereço de escrita na memória

void setup()
{
}

void loop()
{
  // lê o valor na entrada analógica e guarda em val
  int val = analogRead(0);

  // divide val que é um inteiro de 16 bits em dois bytes
  byte hiByte = highByte(val);
  byte loByte = lowByte(val);

  // escreve o byte mais significativo de  val na EEPROM no endereço selecionado em addr
  EEPROM.write(addr, hiByte);

 // escreve o byte menos significativo de  val na EEPROM no endereço selecionado em addr+1.
  EEPROM.write(addr+1, loByte);

  // avança para o próximo endereço pulando de 2 em 2, pois estamos armazenando
  // valores com dois bytes cada até alcançar o byte 512 da
  // EEPROM, quando então retorna para o byte 0.
  addr = addr + 2;
  if (addr == 512)
    addr = 0;

  delay(100);
}


O código anterior divide o valor lido na entrada analógica em dois bytes que são armazenados em dois endereços consecutivos da EEPROM.
Agora devemos alterar o segundo sketch para poder recuperar os valores salvos na EEPROM, para isso usaremos a função word que converte dois bytes em um inteiro de 16bits. A sintaxe deste comando é mostrada abaixo.

value  = word(x)
value  = word(h, l)

Onde:
value - uma word
x -  uma variável de qualquer tipo
h -  a parte alta de uma word
l -  a parte baixa de uma word


/*
 * EEPROM Read
 * Le o valor de cada byte da EEPROM e imprime na tela do computador.
 * o código deste exemplo é de domíno público
 */

#include <EEPROM.h>    // incluir a biblioteca

// inicia lendo apartir do primeiro byte (endereço 0) da EEPROM
int address = 0;    // endereço de escrita na memória
byte value;    // valor lido da EEPROM

void setup()
{
  Serial.begin(9600);    // inicializa o canal de comunicação serial
}

void loop()
{
  // lê o byte no endereço atual da EEPROM
  byte hiByte = EEPROM.read(address);
  byte lowByte = EEPROM.read(address +1);
  value  = word(hiByte, lowByte);

  // envia o valor lido para o computador pela porta serial
  Serial.print(address);
  Serial.print("\t");
  Serial.print(value, DEC);
  Serial.println();

  // avança para o próximo endereço da EEPROM
  address = address + 2;

  // quando atingir o endereço 512 retorna
  // para o endereço 0
  if (address == 512)
    address = 0;

  delay(500);
}

Para a utilização da EEPROM, é aconselhável sempre fazer um mapa das variáveis que estão sendo guardadas e os seus respectivos endereços, para assegurar que nenhum endereço seja usado por mais de uma variavel, e que os valores de bytes múltiplos não sobresecrevam outras informações.
É isso, a EEPROM é um recurso muito útil e fácil de usar no Arduino, porém relativamente pouco utilizado.


Para limpar a memoria da EEPROM basta utilizar o seguinte código:


/*
 * 
 * Limpa a memória da EEPROM.
 * 
 */

#include <EEPROM.h>
void setup()
{
// Escreve " 0 " em todos os bytes da EEPROM 
// (neste caso como e um arduino mega sao 512 bytes)
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);

// O LED acende quando a memoria estiver limpa
digitalWrite(13, HIGH);
}
void loop()
{
}

Lembrando que a quantidade de memória EEPROM presente em um Arduino varia conforme o microcontrolador instalado na placa: 1024 bytes para o ATmega328, 512 bytes no ATmega168 e ATmega8, e 4 KB (4096 bytes) sobre o ATmega1280 e ATmega2560.


Referências:


Margolis, Michael. Arduino Cookbook. Editora O’REILLY, 2011. Capítulo 18.

domingo, 11 de maio de 2014

LCD KeyPad Shield







//Sample using LiquidCrystal library  
#include <LiquidCrystal.h>  
/*******************************************************  
 * This program will test the LCD panel and the buttons  
 * Mark Bramwell, July 2010  
 ********************************************************/

// select the pins used on the LCD panel  
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons  
int lcd_key    = 0;  
int adc_key_in = 0;  
#define btnRIGHT  0  
#define btnUP     1  
#define btnDOWN   2  
#define btnLEFT   3  
#define btnSELECT 4  
#define btnNONE   5  

// read the buttons  
int read_LCD_buttons()  
{  
  adc_key_in = analogRead(0);   // read the value from the sensor   
  // my buttons when read are centered at these valies: 0, 144, 329, 504, 741  
  // we add approx 50 to those values and check to see if we are close  
  if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result  
  // For V1.1 us this threshold  
  if (adc_key_in < 50)  return btnRIGHT;   
  if (adc_key_in < 250) return btnUP;   
  if (adc_key_in < 450) return btnDOWN;   
  if (adc_key_in < 650) return btnLEFT;   
  if (adc_key_in < 850) return btnSELECT;   
  // For V1.0 comment the other threshold and use the one below:  
  /*  
   if (adc_key_in < 50)  return btnRIGHT;   
   if (adc_key_in < 195) return btnUP;   
   if (adc_key_in < 380) return btnDOWN;   
   if (adc_key_in < 555) return btnLEFT;   
   if (adc_key_in < 790) return btnSELECT;    
   */
  return btnNONE; // when all others fail, return this...  
}

void setup()  
{  
  lcd.begin(16, 2);       // start the library  
  lcd.setCursor(0,0);  
  lcd.print("Push the buttons"); // print a simple message  
}

void loop()  
{  
  lcd.setCursor(9,1);      // move cursor to second line "1" and 9 spaces over  
  lcd.print(millis()/1000);   // display seconds elapsed since power-up  
  lcd.setCursor(0,1);      // move to the begining of the second line  
  lcd_key = read_LCD_buttons(); // read the buttons  
  switch (lcd_key)        // depending on which button was pushed, we perform an action  
  {  
  case btnRIGHT:  
    {  
      lcd.print("RIGHT ");  
      break;  
    }  
  case btnLEFT:  
    {  
      lcd.print("LEFT  ");  
      break;  
    }  
  case btnUP:  
    {  
      lcd.print("UP  ");  
      break;  
    }  
  case btnDOWN:  
    {  
      lcd.print("DOWN ");  
      break;  
    }  
  case btnSELECT:  
    {  
      lcd.print("SELECT");  
      break;  
    }  
  case btnNONE:  
    {  
      lcd.print("NONE ");  
      break;  
    }  
  }  
}  



SD Card Shield









No Arduino IDE, compilar e enviar o seguinte código (que está disponível em File-> Examples-> SD-> ReadWrite), e aguardar os resultados:



/*  
 SD card read/write  
 This example shows how to read and write data to and from an SD card file        
 The circuit:  
 * SD card attached to SPI bus as follows:  
 ** MOSI - pin 11  
 ** MISO - pin 12  
 ** CLK - pin 13  
 ** CS - pin 4  
 created  Nov 2010  
 by David A. Mellis  
 updated 2 Dec 2010  
 by Tom Igoe  
 This example code is in the public domain.  
 */
#include <SD.h>  
File myFile;  
void setup()  
{  
  Serial.begin(9600);  
  Serial.print("Initializing SD card...");  
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.  
  // Note that even if it's not used as the CS pin, the hardware SS pin   
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output   
  // or the SD library functions will not work.   
  pinMode(10, OUTPUT);  
  if (!SD.begin(4)) {  
    Serial.println("initialization failed!");  
    return;  
  }  
  Serial.println("initialization done.");  
  // open the file. note that only one file can be open at a time,  
  // so you have to close this one before opening another.  
  myFile = SD.open("test.txt", FILE_WRITE);  
  // if the file opened okay, write to it:  
  if (myFile) {  
    Serial.print("Writing to test.txt...");  
    myFile.println("testing 1, 2, 3.");  
    // close the file:  
    myFile.close();  
    Serial.println("done.");  
  } 
  else {  
    // if the file didn't open, print an error:  
    Serial.println("error opening test.txt");  
  }  
  // re-open the file for reading:  
  myFile = SD.open("test.txt");  
  if (myFile) {  
    Serial.println("test.txt:");  
    // read from the file until there's nothing else in it:  
    while (myFile.available()) {  
      Serial.write(myFile.read());  
    }  
    // close the file:  
    myFile.close();  
  } 
  else {  
    // if the file didn't open, print an error:  
    Serial.println("error opening test.txt");  
  }  
}  
void loop()  
{  
  // nothing happens after setup  
}  



http://shieldlist.org/

segunda-feira, 28 de abril de 2014

Arduino


Arduino é uma placa de prototipagem eletrônica de hardware livre. O objetivo do projeto é criar ferramentas que são acessíveis, com baixo custo, flexíveis e fáceis de se usar por artistas e amadores. Principalmente para aqueles que não teriam alcance aos controladores mais sofisticados e de ferramentas mais complicadas.

História
O projeto iniciou-se na cidade de Ivrea, Itália, em 2005, com o intuito de interagir em projetos escolares de forma a ter um orçamento menor que outros sistemas de prototipagem disponíveis naquela época. Seu sucesso foi sinalizado com o recebimento de uma menção honrosa na categoria Comunidades Digitais em 2006, pela Prix Ars Electronica, além da marca de mais de 50.000 placas vendidas até outubro de 2008.

Atualmente, seu hardware é feito através de um microcontrolador Atmel AVR, sendo que este não é um requisito formal e pode ser estendido se tanto ele quanto a ferramenta alternativa suportarem a linguagem Arduino e forem aceitas por seu projeto. Considerando esta característica, muitos projetos paralelos se inspiram em cópias modificadas com placas de expansões, e acabam recebendo seus próprios nomes.

Apesar do sistema poder ser montado pelo próprio usuário, os mantenedores possuem um serviço de venda do produto pré-montado, através deles próprios e também por distribuidores oficiais com pontos de venda mundiais.


Referências
http://www.arduino.cc/
http://pt.wikipedia.org/wiki/Arduino