Alguns modos de destruir um Arduino

Encontrei um artigo muito interessante de uma  empresa desenvolvedora de placas Arduino compatíveis, onde são destacados 10 modos de destruir um Arduino. Aqui destaco alguns,  porém vale uma visita para conferir os dez modos:

http://www.rugged-circuits.com/10-ways-to-destroy-an-arduino

Considerando uma placa Arduino UNO:

Colocar os pinos I/O em curto

Pino conectado diretamente ao GND , configurado como OUTPUT e para finalizar o desastre 🙁 , enviar um sinal HIGH para este pino. Nesta condição, os 5V presentes neste pino estará ligado diretamente ao terra (GND).

Tipicamente cada pino suporta um máximo de 40mA e a sua resistência interna é de 25Ω. Sendo assim,  aplicando a lei de ohm (I é a corrente):

I = 200mA, muito superior ao que o pino suporta!

Inverter a polaridade da tensão no pino Vin

Não há proteção para tensão reversa neste pino.

Conectar Vin  diretamente ao GND

A tensão proveniente do jack de entrada indo diretamente para GND.

Aplicar mais que 5V no pino 5V e mais que 3,3V no pino 3,3V

Também não há proteção nestes pinos.

E por último (não menos importante)…

Exceder a corrente máxima do microcontrolador

A soma das correntes fornecidas pelos pinos de I/O não devem exceder 200mA, ou seja, mesmo um pino suportando até 40mA, cinco pinos consumindo esta corrente já estariam no limite do microcontrolador. Portanto, muito cuidado!!!

Sensor de Presença

HC-SR501

Sensores de presença ou movimento, conhecidos como sensores IR (infravermelho) ou PIR (Passive Infrared Sensor ou Pyroelectric Infrared Sensor), são sensores que detectam radiação emitida pelo corpo humano, por exemplo.

PIR01

Onde encontrar (apenas sugestões):

O elemento sensor é vedado e oferece grande imunidade a umidade e temperatura e sua área exposta deixa passar somente radiação infravermelha. O circuito ao redor dá suporte a leitura do sensor e posterior conversão em um sinal digital. Portanto, na saída deste sensor teremos um nível alto, quando da detecção do movimento e um nível baixo em estado de repouso.

PIR - ElecFreaks
sensor piroelétrico – fonte http://www.elecfreaks.com

A lente (que cobre o elemento sensor) é do tipo Fresnel, feita de plástico, cuja função é ampliar o ângulo de detecção e concentração dos raios infravermelhos.

fonte http://www.fresnelfactory.com
fonte http://www.fresnelfactory.com

 

Pinos e Ajustes

Não é crítico mas requer um pouco de tempo para ajustar as suas necessidades.

Pinos:

  • 5V = ligar no pino 5V da placa Arduino
  • sinal = ligar em qualquer pino digital da placa Arduino
  • GND = ligar no pino GND da placa Arduino

Ajustes:

  • tempo (trimpot) = no sentido horário, aumenta o delay (tempo que o sinal ficará em nível alto) para aproximadamente 5 minutos e no sentido anti-horário para aproximadamente 5 segundos.
  • sensibilidade (trimpot) = no sentido horário, aumenta a distância de detecção para aproximadamente 7 metros e no sentido contrário para aproximadamente 3 metros.
  • trigger (jumper)
    • não repetitivo (low):  quando alguém é detectado, um nível alto ficará presente no pino digital até que o tempo se esgote, daí o nível muda para baixo por aproximadamente 3 segundos, não aceitando novas detecções neste período.
    • repetitivo (high): quando em nível alto, ficará neste estado enquanto o sensor detectar alguém no ambiente (dentro do tempo ajustado, porém o tempo será renovado a cada detecção) até que não haja movimento, daí alterando o nível para baixo por aproximadamente 3 segundos, não aceitando novas detecções neste período.

Ficou confuso, não? 🙂 A melhor forma de entender estes ajustes é fazer experiências com a montagem sugerida mais adiante.

PIR_pinagem

 

Montagem do circuito

Nos testes/experiências com este sensor, deixamos os trimpots posicionados no sentido máximo anti-horário e o jumper do modo trigger em high. A nossa sugestão é deixar inicialmente desta forma e ir ajustando conforme a sua necessidade.  O LED, neste período de ajuste, terá grande importância para nos orientar quando sensor estiver em nível alto.

O pino de sinal do PIR está conectado ao pino digital 2 do Arduino e o LED está conectado ao pino 13 digital do Arduino através de um resistor de 220Ω.

PIR_protoboard

PIR_esquematico

 

PIR_montagem

Exemplo

O sketch é muito simples e o propósito é ajudar a ajustar o sensor para a sua necessidade.

Obs. quando o circuito é energizado, o LED pisca algumas vezes. É normal 🙂 O sensor está estabilizando antes de iniciar a detecção.

 

Sensores de Temperatura e Umidade

DHT11/DHT22 (AM2302)

Estes sensores da Aosong Electronics Co, combinam um sensor de umidade e um sensor de temperatura no mesmo invólucro. De baixo custo e fácil implementação, o DHT11 é mais barato que o DHT22 que por sua vez é mais preciso, segundo dados do fabricante. Outra característica que os distingue é o comprimento máximo da fiação, quando alimentados em 5V:

DHT11 e DHT22
DHT11 e DHT22

A biblioteca que usamos foi desenvolvida (e é mantida) pela equipe da Adafruit. O download pode ser feito do repositório da Adafruit ou na nossa área de downloads (pronta para uso) .

Onde encontrar (apenas sugestões):

Instalando a biblioteca DHT

Com as versões mais recentes da IDE do Arduino (a partir da 1.6.2), a instalação de bibliotecas de terceiros pode ser feita pelo menu Sketch, Include Library, Manage Libraries…

Gerenciando bibliotecas
Gerenciando bibliotecas

Não vamos detalhar muito sobre bibliotecas para não desviar o assunto sobre estes sensores. Maiores informações em: http://www.arduino.cc/en/Guide/Libraries

Vamos mostrar como colocar uma biblioteca manualmente e este talvez seja o modo mais usual (este é o modo que preferimos 🙂 ).

Considerando o ambiente operacional Microsoft Windows e se você optou pela instalação padrão da IDE do Arduino, a pasta que contém as bibliotecas de terceiros está localizada no seu perfil de usuário.

gerenciando_libraries_perfil
caminho da pasta libraries no perfil de usuário

Ao fazer o download de uma biblioteca qualquer (geralmente está compactada), extraia os arquivos e copie para a pasta libraries do seu perfil de usuário e não para a pasta libraries da instalação com os arquivos e pastas da IDE do Arduino.

Importante: a raiz de libraries contém apenas as pastas com as bibliotecas de terceiros. Não copie arquivos individuais para a pasta raiz. Note a organização de pasta e arquivos.

gerenciando_libraries_DHT

Após a cópia, se você estiver com a IDE aberta, feche-a e abra novamente para que o Arduino carregue as bibliotecas instaladas.

Obs.: não confunda esta pasta libraries com a pasta libraries da pasta raiz do Arduino. Esta contém as bibliotecas padrão do sistema e, apesar de você poder copiar bibliotecas de terceiros nesta pasta, é altamente recomendável que você copie para a pasta libraries do seu perfil no Windows, por exemplo. Isto garante que uma nova instalação da IDE não apague as bibliotecas já instaladas além de ficar mais organizado 😉 .

gerenciando_libraries_sistema

 

Montagem do circuito

A montagem é muito simples, o circuito é o mesmo do DHT11 e DHT22. Você vai precisar de um sensor e um resistor de 10KΩ. Veja as imagens a seguir (oriente-se pelo pino 1 marcado na imagem):

montagem na protoboard
montagem na protoboard
esquemático
esquemático

DHTxx_protoboard

 

Recursos da biblioteca DHT

Infelizmente a documentação, de um modo geral, não é clara ou até mesmo não existe nas bibliotecas de terceiros. Colocamos aqui a funções da biblioteca DHT da Adafruit. Se vocês encontrarem alguma inconsistência, escreva/comente para que possamos corrigi-las.

begin()

configuração inicial do sensor.

readTemperature( true/false )

lê a temperatura e retorna um valor do tipo float em Celsius, se parâmetro false, ou Farenheit, se parâmetro true.

readHumidity()

retorna um valor (percentual) do tipo float que representa a umidade relativa do ar.

computeHeatIndex( temperatura_Farenheit , umidade )

retorna um valor em Farenheit do tipo float que representa a sensação térmica. Você deve passar os parâmetros de temperatura em Farenheit e umidade (ambos do tipo float).

convertCtoF( temperatura_Celsius )

convertFtoC( temperatura_Farenheit )

converte respectivamente Celsius em Farenheit e Farenheit em Celsius (ambos do tipo float).

 

Exemplos

Para melhor entendimento do código, veja este artigo LCD – parte I, item Exemplos. Os sketches são quase idênticos, apenas troque o valor de DHTTYPE para o sensor que irá utilizar.

Exemplo 1 (DHT11)