Como gravar o bootloader usando o próprio Arduino como gravador.

As várias opções estão listadas aqui.

A melhor situação, que vai exigir menos componentes e terá maior chance de dar certo na primeira tentativa é ter duas placas arduino. Uma para funcionar como programador e a outra para colocar o chip a ser programado. É essa que vou usar como exemplo aqui.

O arduino programador precisa estar carregado com o sketch ArduinoISP, que é o que vai tranformá-lo efetivamente em um gravador. Eu não encontrei a opção no Arduino 0022, por isso usei o 1.01. Usar o 1.01 para isso tem a vantagem adicional de garantir a gravação da versão mais recente do bootloader.

A tarefa do programador é receber pela porta serial o bootlader a ser gravado e gravá-lo no chip virgem (não necessariamente), usando a técnica ISP, que só requer três fios + reset.

Após o Arduino “programador” estar pronto, basta fazer as conexões como indicado na figura abaixo. A placa de baixo é o Arduino programador:

Em tools -> programmer, selecione Arduino as ISP.

O tipo de bootloader (duemilanove ou Uno) que você vai gravar é selecionado no mesmo menu onde vai selecionar a placa que você está gravando. Assim, mesmo que o programador seja um Arduino UNO, se você quer gravar um bootloader de Duemilanove, seleciona o Arduino Duemilanove no menu Tools -> Board. Em seguida, selecione Tools -> Burn Bootlader.

Se você ver a mensagem avrdude: usbdev_open(): did not find any USB device “usb”, você esqueceu de selecionar “Arduino as ISP”.

A gravação do bootloader leva de 25 a 30s por chip.

Teclado membrana com 16 teclas

Os pinos foram identificados por mim na foto apenas. O teclado não tem as marcações.

Você precisa da biblioteca Keypad. Com ela,  o teclado pode ser ligado diretamente a oito pinos do Arduino, sem necessidade de qualquer outro componente. Atenção: a versão mais recente da biblioteca funciona com Arduino 0.2x ou 1.x, mas para que os exemplos apareçam na lista do Arduino 0.2x você precisa ir em cada diretório dentro de Examples e renomear os arquivos .ino para .pde.

Conecte o teclado aos pinos 2 a 9 do Arduino. Abra o exemplo keypad -> CustomKeypad e faça a seguinte modificação:


char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad

Abra o Serial Monitor. Cada tecla pressionada deve aparecer corretamente na porta serial.

Esta versão da biblioteca também permite detectar mais de uma tecla pressionada. Use este sketch para testar essa capacidade:

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the kpd
byte colPins[COLS] = {6, 7, 8,9}; //connect to the column pinouts of the kpd

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
Serial.begin(9600);
}

void loop(){

if (kpd.getKeys())
{

for (int i=0; i<LIST_MAX; i++)   // Scan the entire list for any active keys.
{
if (kpd.key[i].kchar)    // Check for an active key.
{
switch (kpd.key[i].kstate) {
case HOLD:
Serial.print("Key ");
Serial.print(kpd.key[i].kchar);
Serial.print(" is being HELD and the state ");
if (!kpd.key[i].stateChanged)
Serial.println("has not changed.");
else
Serial.println("has changed.");
break;
case PRESSED:
Serial.print("Key ");
Serial.print(kpd.key[i].kchar);
Serial.print(" is PRESSED and the state ");
if (!kpd.key[i].stateChanged)
Serial.println("has not changed.");
else
Serial.println("has changed.");
break;
case RELEASED:
Serial.print("Key ");
Serial.print(kpd.key[i].kchar);
Serial.print(" has been RELEASED and the state ");
if (!kpd.key[i].stateChanged)
Serial.println("has not changed.");
else
Serial.println("has changed.");
break;
default:
Serial.print("Key ");
Serial.print(kpd.key[i].kchar);
Serial.print(" is IDLE and the state ");
if (!kpd.key[i].stateChanged)
Serial.println("has not changed.");
else
Serial.println("has changed.");
}
}
}
}
}

Módulo sensor de movimento PIR

  • Alimentação: 4.5 a 20V (Informado pelo fabricante – eu só testei com 5V);
  • Saída: 3.2V (movimento detectado) ou 0V (sem movimento);
  • Proteção contra inversão de polaridade por diodo em série;
  • Funciona normalmente com o Arduino;
  • Ajustes de sensibilidade e tempo de atuação;
  • Controle de redisparo.

Este módulo é quase autônomo. Não é necessário um microcontrolador para fazer uso dele.

Com ajuste de sensibilidade e tempo que a saída fica ligada (de 3 segundos a 3 minutos – o tempo exato varia de módulo para módulo).

Como todo sensor PIR, é preciso esperar de 20 a 60s após energizar para que o sensor estabilize (warm-up). Isso sob condições normais de temperatura, porque em lugares muito frios, como uma câmara frigorífica, esse tempo pode chegar a vários minutos. Antes da estabilização o sensor não é confiável. Nos meus testes, percebi que todo movimento é ignorado nesse período. Este FAQ da empresa de produtos de segurança CROW tem mais informações interessantes sobre o comportamento de um sensor PIR.

Por meio de um jumper é possível configurar dois modos de redisparo:

  • Redisparável – Enquanto houver movimento o sensor continua com a saída ativa. O sensor “redispara” a cada movimento detectado e começa a contar o tempo para desligar, mas começa a contagem de novo se outro movimento for detectado antes.
  • Não redisparável – O sensor ignora qualquer movimento enquanto está contando o tempo para desligar

Alguns módulos não tem indicação de propósito dos trimpots. Olhando o módulo com os componente para cima o da esquerda é o de sensibilidade e o da direita o de tempo.

Sensor de som

 

  • Alimentação 5V;
  • Saída analógica proporcional ao som;
  • Saída digital com limiar ajustado por trimpot multi-voltas.

Teste:

A placa tem dois LEDs:

  • L1 – Sempre ligado enquanto estiver energizado (power)
  • L2 – Sinaliza saída digital ligada.

O trimpot usado é do tipo multi-voltas infinito.

Vá girando o trimpot no sentido anti-horário até que L2 apague. Depois gire nos dois sentidos até que L2 fique em um limiar onde uma movimentação muito pequena no sentido horário acenda o L2. Bata com o dedo sobre o microfone ou com o módulo na mesa e L2 deve piscar acompanhando as batidas. O sensor estará funcionando.

Para ajustar à sua aplicação, vá fazendo testes movendo o trimpot mais no sentido anti-horário até que o sensor não dispare mais à toa mas ainda dispare com o som que você deseja. Por favor note que esse é um sensor muito simples, incapaz de diferenciar entre ruídos diferentes, por isso tem número limitado de aplicações.

Sensor de corrente ACS712

  • Mede corrente alternada ou contínua;
  • Opera por efeito hall – baixíssima resistência interna – Não interfere com o circuito a ser medido;
  • Eletricamente isolado até 2.1kV – Você pode medir corrente em um circuito vivo de 127, 220V ou 380V sem medo de levar choque na placa de medição;
  • Por medir CA, a saída é VCC/2 quando a corrente é zero. Para corrente negativa, a saída se aproxima de 0V. Para corrente positiva, a saída se aproxima de VCC;
  • É possível medir o valor RMS de uma corrente alternada desde que seja feita a amostragem de forma correta;
  • Disponível em modelos de 5A, 20A e 30A (mesmo preço);
  • Pode ser usado em qualquer projeto eletrônico (não é necessário haver um microcontrolador envolvido) e qualquer microcontrolador com entradas analógicas, mas só ofereço exemplos de uso e programas para o Arduino;

Datasheet do CI ACS712

Display LCD serial I2C 1602 com interface destacável

Precisando de pinos livres extras no seu projeto ou passar um cabo com uma dúzia de fios até o LCD está te incomodando?

  • Display serial completo. Só requer alimentação de 5V e dois fios para o bus I2C. Responde no endereço 0x27 (interface vermelha) e 0x20 (interface preta);
  • Como se trata de I2C, que é um bus (compartilhado por natureza), podemos até dizer que não ocupa pino nenhum;
  • Controle de contraste via trimpot integrado;
  • Backlight pode ser desligado/ligado com comandos de software;
  • Compatível com qualquer microcontrolador que possa se comunicar por I2C, mas somente dou suporte ao Arduino;
  • Compatível com a biblioteca LiquidCrystal_I2C do Arduino;
  • Interface destacável. Você pode usá-la em qualquer display que tenha o mesmo pinout (veja pinout na foto abaixo);
  • Posso fornecer o produto na forma de kit, sem headers soldados.

Instruções de uso

O display funcionará igualmente com o Arduino Uno/Duemilanove ou Mega sem modificações nos sketches, mas atente para o fato de que o bus i2c fica em pinos diferentes em cada modelo:

  • No Uno/Duemilanove: Pinos analógicos A4 e A5
  • No Mega: Pinos 20 e 21

O display é compatível com o modelo da DFROBOT. Baixe esta biblioteca (supostamente compatível com IDE 1.0 e 0.2x,mas só testei com 0.22), descompacte no diretório libraries (certifique-se de que os arquivos fiquem em libraries/LiquidCrystal_I2C) e rode o exemplo LiquidCrystal_I2C -> Custom Chars.

Todos os displays são testados por mim e saem com o contraste ajustado, mas se por acaso você mexer no trimpot e a imagem não estiver mais aparecendo, gire o trimpot nos dois sentidos até que apareça. Um ajuste incorreto não danificará o display, por isso pode mexer à vontade.

Cópia local da biblioteca:

LiquidCrystal_I2C
LiquidCrystal_I2C
LiquidCrystal_I2Cv1-1.rar
Version: 1.1
15.5 KiB
241 Downloads
Detalhes...

Módulo receptor RF de 315MHz

Este módulo pode ser usado em conjunto com um transmissor para comunicação entre arduinos. Porém meu “foco” é a sua capacidade de decodificar comandos emitidos por controles remotos comerciais operando na faixa dos 315MHz.

Atenção:  o receptor precisa de uma antena mas vem sem ela. Solde um pedaço de fio de aproximadamente 23.8cm (este é o comprimento “ótimo” para 315Mhz) no orifício que você vê no canto inferior esquerdo da foto. O fio pode ficar enrolado como uma espiral, para poupar espaço.

Instale a biblioteca RC-Switch.

Rode o sketch Examples->RCSwitch->ReceiveDemo_Simple

O pino DATA do receptor é conectado ao pino 2 do arduino.

Ao apertar os botões de um controle remoto compatível, algo assim deve aparecer na porta serial (eu apertei dois botões):

Received 1393741 / 24bit Protocol: 1
Received 1393777 / 24bit Protocol: 1

Testado com um controle remoto genérico baseado no bem conhecido chip codificador SC2262 (PT2262) e com vários outros baseados no mais sofisticado ev1527 (SC1527,RT1527, FP1527).

Programador Willem

Software necessário. Você não precisa instalar a versão mais antiga, mas se instalar, um dia irá descobrir que certos chips funcionam com a versão velha e não funcionam com a nova. O software do Willem tem muitos bugs e infelizmente não há outro que funcione com o gravador.

Usando a touchscreen de 4 fios

Este post se refere ao meu item que é uma touchscreen apenas (a placa transparente) e não ao LCD com touchscreen.

Muito cuidado é necessário ao manusear a tela. Ela pode ser inutilizada por qualquer queda, principalmente se bater “de quina”.

Você pode usar a biblioteca da Adafruit ou a do livro Practical Arduino. A da Adafruit funcionou melhor nos meus testes e é mais flexível, pois também mede pressão e permite que você use duas portas digitas e duas analógicas ou quatro analógicas. A do livro requer que você use quatro analógicas.

Material de referência:

AVR341 – Documento da Atmel que explica como touchscreens resistivas de quatro e cinco fios funcionam, com exemplos de código para AVR.

Practical Arduino – Páginas 121 a 137

Dúvidas comuns sobre o shield ethernet Wiznet W5100

O que é esse “HanRun” e esses códigos em cima do conector ethernet? 

Esse conector é especial. É fabricado pela HanRun e dentro dele existem dois LEDs e um componente essencial chamado de “magnetics”. O código HR911105A é o modelo do conjunto. Datasheet abaixo.

Por quê você chama de “Wiznet W5100”?

Porque Wiznet é o fabricante do componente principal do shield, cujo modelo é W5100. É para ele que você tem que procurar exemplos. Veja o que está escrito no quadrado preto no centro da placa.

Por que o arduino não aparece na lista de dispositivos conectados do meu roteador?

Aquela lista não é de dispositivos “conectados” nem “detectados”. É uma lista de dispositivos que pediram um endereço IP ao roteador, através de DHCP.  Se seu sketch não usa DHCP (a maioria usa IP fixo), o seu arduino não vai aparecer na lista de nenhum roteador.

Qual o endereço MAC do shield?

Nem o shield nem o chip tem endereço MAC. O MAC é definido no seu sketch, geralmente desta forma:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

Por um lado, isso te dá liberdade de usar o endereço que quiser. Por outro, pode dar uma baita dor de cabeça por causa da regra inviolável que diz que não podem existir dois MACs iguais em uma mesma rede. Enquanto você estiver brincando apenas com um shield não há problema, mas ao adicionar o segundo você vai ter que estar permanentemente alerta.  Por exemplo, se você já tem um Arduino em rede na sua casa e quiser debugar o programa usando um arduino na sua mesa, precisa se lembrar que o sketch de teste não pode ter o mesmo MAC do que está “em produção” (nem o mesmo IP) e também precisa lembrar que ao fazer o upload do código que  estava em teste para o arduino em produção, tem que alterar o MAC (e o IP).

O melhor modo de evitar dor de cabeça com isso é fazer seus sketches lerem o MAC de uma memória externa, que pode ser um cartão SD (perceba que o shield wiznet tem um slot) ou uma EEPROM. Você grava as memórias com MACs diferentes, bota uma etiqueta em cada uma dizendo qual é (só por organização), e esquece o problema.

Que LEDs precisam estar acesos?

Mesmo que o shield não esteja sendo usado (nenhum sketch que o use carregado), ao plugar o cabo de uma rede de 100Mbps devem acender-se quatro LEDs: PWR, LINK, 100M e FULLD. Se não acenderam esses quatro, o problema pode estar no shield ou no cabo.

Que pinos são usados pelo shield?

D4 (apenas para o SD), D10, D11,D12, D13, alimentação e o conector ICSP.

Por que o shield 1602 com keypad não funciona em conjunto com o Wiznet?

Porque o desenvolvedor do shield escolheu o pino 10 para desligar o backlight, colidindo com o requerido pelo shield Wiznet. Entorte o pino 10 do shield 1602 para que ele não entre e assim ambos vão funcionar.

Por que o sensor ultrassônico não funciona quando conecto o shield Wiznet?

Não sei. Não é defeito do sensor, nem do shield. Basta o shield estar plugado para que o sensor ultrassônico sempre retorne uma distância de 2-4cm. É como se a simples presença do shield interferisse com a temporização da função que mede o tempo de resposta do sensor. Ainda não tenho uma explicação e muito menos solução para isso.

Por que ao desligar a alimentação do arduino, quando a alimentação volta ele “sumiu” da rede?

Esse é um problema curioso que depende da sua placa base (seu arduino). Com algumas nunca acontece e com outras, você sempre precisa apertar o botão RESET   para que a rede volte a responder. É um problema que ocorre com todos os shields da mesma versão, incluindo os fabricados pela Sparkfun e pela Adafruit. Existem artifícios de hardware que podem ser usados para contornar isso, caso ocorra com você.

Ao energizar, os LEDs PWR e FULLD acendem. Plugar o cabo de rede não faz efeito.

Nem é preciso plugar o cabo para perceber que há algo errado, porque apenas PWR devia estar aceso sem um cabo de rede conectado. Apertando o botão RESET funciona? Se sim, o shield está com um problema de inicialização. Os shields com esse problema são rejeitados pelo meu controle de qualidade e reservados para meu uso apenas. Se acontecer com você no período de garantia, solicite a troca.