Tag Archives: Arduino

Arduino – vela eletrônica

No final do ano passado, meu filho apareceu em casa com uma “vela eletrônica” utilizada pela escola para fazer uma caminhada de Natal sem perigo de queimar os dedos das crianças.

Pois o projetinho da vez é a vela eletrônica! Analisando a bixinha, vemos um LED amarelo, encoberto por uma capinha plástica em formato de “chama”, que pisca de forma aleatória.

Então a lista de materiais é simples:

  • LED amarelo
  • resistor 330 ohms x 1/4w

Você pode utiliza os diagramas do Fritzing das montagens anteriores que utilizam LED´s.

Mostre-me o código:

const int ledAmarelo = 3; // define o pino do led (PWM)

void setup(){
  pinMode(ledAmarelo, OUTPUT); // seta o pino como saída
}

void loop(){
  randomSeed(millis());
  analogWrite(ledAmarelo, random(0,255));
  delay(random(0,100));
}

O que há de novo?
O funcionamento é ligar o LED com uma intensidade aleatória e fazê-lo permanecer nesse estado por um tempo aleatório.

Temos duas funções: randomseed(), responsável por gerar uma raiz randômica e random(), responsável por gerar um valor aleatório, dentro da classe de valores mínimo e máximo fornecida.

Então,

Veja o exemplo:

Arduino candle from Rafael Donelli on Vimeo.

Arduino – pinos 0 e 1 – serial data RX / TX

No exemplo anterior haviam duas linhas comentadas que poderiam ser utilizadas para monitorar a taxa de leitura da porta analógica, enviando a leitura por comunicação serial.

Antes de iniciar seus projetos é importante conhecer a arquitetura e funcionamento do Arduino. Uma análise básica do funcionamento pode ser feita na descrição do hardware do Arduino Uno.

É importante mencionar que alguns pinos são utilizados por mais de uma função. É o caso dos pinos 0 e 1 do Arduino, que além de entrada/saída digital, são destinados para a comunicação serial de dados. Assim, quando você estiver utilizando comunicação serial esses pinos não poderão ser utilizados para outras funções.

No exemplo abaixo há um LED ligado no pino 1 (TX), que está associada ao led TX. O exemplo envia comuniação serial em um tempo determinado pela saída serial. Perceba o comportamento do LED ligado no pino 1 quando há comunicação: o led “TX” da placa pisca e no mesmo momento o LED do pino 1 sofre uma diminuição no brilho. Por isso não devemos utilizar os pinos destinados a comunicação, sob pena de que não tenhamos o resultado desejado.

Perceberam que meu exemplo na protoboard está mais limpo e organizado? Graças ao pessoal da loja do Lab de Garagem, que me enviou meu kit de jumpers de forma rápida e segura! Obrigado gurizada!

Arduino and serial data from Rafael Donelli on Vimeo.

IMPORTANTE: o Arduino faz um remapeamento dos pinos do microcontrolador ATMEGA, então todas as referências a pinos que você lê aqui são do Arduino! Se você quiser saber a correspondência de pinos relacionada ao controlador, consulte o Pin Mapping.

Links:
1. Lab de Garagem
2. Direto pra Loja do Lab de Garagem

Arduino – Mais exemplos…

DSC00541Small

Led´s são bacanas, mas apenas fazê-los piscar é chato!

Então, vamos utilizar um sensor para ler dados do ambiente, nesse caso um Light Dependent Resistor (LDR), ou resistor dependente de luz.

Um LDR é um sensor que aumenta ou diminui a resistência da corrente, de acordo com a luminosidade que inside sobre a superfície do compomente.

A idéia é que possamos controlar a intensidade de um LED de acordo com a leitura de luz que inside dobre o LDR, a exemplo do sensor de luminosidade dos teclados retroiluminados dos Mac´s ou de algumas telas de smartphones que vemos por aí.

Não se deixe enganar pela minha bagunça de fios nas imagens, pois a montagem é mais simples do que parece. Eu não tinha os fios adequados e fiz alguns jumpers (fios de ligação) com restos dos pares de fios de um cabo de rede e as experiências foram se sucedendo sem muito controle! :D

Você pode reproduzir esse experimento utilizando os seguintes componentes:

  • LED – 5mm
  • resistor 330Ω x 1/4 watt
  • resistor 10kΩx 1/4 watt
  • LDR 5mm

Monte o experimento de acordo com o seguinte esquema:

E utilize o código a seguir para controlar o LED de acordo com a intensidade de luz que inside sobre o LDR:

int lightSensor = 0; // sensor de luz LDR
int luz = 11; // saída digital
int rate = 0; // taxa de leitura analógica

void setup(){
  pinMode(luz, OUTPUT);
//  Serial.begin(9600);
}

void loop(){
  rate = analogRead(lightSensor);
  analogWrite(luz, map(rate,25,400,255,0));
//  Serial.println(rate);
}

O exemplo pode ser visto abaixo:

Arduino LDR Fade from Rafael Donelli on Vimeo.

Você deverá fazer alguns ajustes no seu programa dependendo da intensidade de luz existente no ambiente. Para isso explore a função map, realizando os ajustes necessários, ou substitua o valor do resistor ligado ao LDR.

Nesse exemplo há duas linhas comentadas que você pode descomentar e utilizar juntamente com o monitoramento serial. A linha Serial.begin(9600); dentro da função setup() é responsável por estabelecer a comuniação serial do Arduino e a função Serial.println(rate); da função loop() envia o valor da variável “rate” para a saída serial. Faça o upload do programa com as linhas descomentadas e habilite na IDE de programação o monitor serial utilizando CTRL+SHIFT+M ou através do menu Tools -> Serial monitor.

Assim você pode verificar a faixa de valores lida pelo LDR a fim de calibrar a função “map”.

Comentários das linhas de código:

1. “rate = analogRead(lightSensor);”
Essa linha é responsável por ler o valor do LDR, definido aqui pela variável “lightSensor”, que aponta a porta utilizada. A leitura analógica acontece em incrementos discretos, de 0 (0 volts) a 1023 (5 volts), ou seja, quando o valor retornado for 511 teremos aproximadamente 2,5 volts.
Mais sobre analogRead.

2. “analogWrite(luz, map(rate,25,400,255,0));”
Aqui temos um par de funções. A primeira é “analogWrite”, responsável por escrever um valor “analógico”, utilizando PWM em uma saída digital específica e a função “map”, responsável por remapear um valor de entrada para uma nova classe de valores.
Assim, o que a função map faz é pegar o valor de leitura do LDR, registrado na variável “rate”, que pode ser entre 0 e 1023 e remapear essa classe de valores para um valor adequado para ser utilizado na função analogWrite, cuja classe de valores deve ser entre 0 e 255, sendo 0 (0 volt) e 255 (5 volts).

Mais sobre analogWrite e map

Um abraço!

Arduino e mais LED´s

Tem mais coisas que podemos fazer… dessa vez, me mostre o código!

Em primeiro lugar, vamos utilizar alguns componentes eletrônicos simples para fazer um LED externo piscar pela saída digital 3.

Saídas: o Arduino Uno possui 14 portas digitais, numeradas de 0 a 13 e 6 portas analógicas, das quais somente as portas digitais podem ser configuradas para saída. A saída digital pode ser entendida como a presença de energia (1, true, HIGH, ligado) ou a ausência de energia (0, false, LOW, desligado).
Das portas digitais, seis delas podem ser utilizadas com Pulse-Width Modulation, ou modulação por largura de pulso, simulando uma saída analógica discreta.

Assim, para um LED piscar precisamos dizer que a saída número 3 deve alternar entre um estado HIGH e LOW.

Vamos precisar de um LED e um resistor de uns 330 ohms, responsável por limitar a corrente que passa pelo LED. Caso contrário seu LED pode queimar.

Se você tiver um ferro de soldar e for minimamente capaz, solde a perninha maior do LED ao resistor. A “perninha” maior é o “+” do LED e encaixe o resistor na saída 3 do Arduino. A “perninha” menor do LED pode ser encaixada em qualquer das saídas GND (terra) do Arduino.

No exemplo abaixo você pode ver os LED´s RX/TX piscando enquanto o upload do programa para piscar o LED é realizado. Tão logo o upload termine, o programa entra em execução, sobrepondo o programa anterior.

blink_pin3 from Rafael Donelli on Vimeo.

Mostre-me o código:

int ledVerde = 3;

void setup(){
  pinMode(ledVerde, OUTPUT);
}

void loop(){
    digitalWrite(ledVerde, HIGH);
    delay(1000);
    digitalWrite(ledVerde, LOW);
    delay(1000);
}

Você pode aproveitar a mesma montagem e criar um programa que faça um efeito de aumentar e diminuir o brilho do LED, chamado de fade.

int ledVerde = 3;

void setup(){
  pinMode(ledVerde, OUTPUT);
}

void loop(){
  for (int i=0; i <= 255; i++){
    analogWrite(ledVerde, i);
    delay(10);
  }
  for (int i=255; i >=0 ; i--){
    analogWrite(ledVerde, i);
    delay(10);
  }
}

Carregue o programa e veja o resultado, utilizando a capacidade de Pulse-Width Modulation (PWM) da saída digital 3.

fadein_fadeout from Rafael Donelli on Vimeo.

Para os próximos exemplos vou utilizar uma protoboard (também conhecida como breadboard – mais informações aqui) e o fabuloso software Fritzing para desenhar os projetos.

Por exemplo, utilizando o Fritzing, os exemplos acima poderiam ser projetados da seguinte maneira, utilizando uma protoboard:

Até a próxima!

Arduino Uno Rev 3 – A primeira vez

Pois é… o bacana é ver coisas piscando! Então meus primeiros testes são com LED’s piscando!! Básico, mas eficaz.

Com o passar do tempo é possível que eu poste coisas mais legais, mas para início de conversa vamos aos LED’s!

1. O que é um LED?
Se você não ouviu falar em LED ainda, você não vive nesse planeta. Os LED’s ou diodos emissores de luz – do inglês (L)ight (E)mmiting (D)iode – são semicondutores que emitem luz. Você pode ter um em seu celular, na TV do quarto, no 3-em-1 da sala… no painel do carro ou na sua lanterna! Tem mais sobre LED´s aqui: LED na Wikipedia.

2. Ligando o Arduino pela primeira vez
Se você comprou seu Arduino Uno é provável que ele venha com um programa básico carregado, cuja função é simplesmente fazer um LED da placa piscar. Além disso, o LED de power deve ligar também, indicando a presença de energia.

O Arduino Uno original vem com um LED ligado ao pino 13 da placa, utilizando para mostrar algum comportamento. Ele é util, pois não precisamos montar um circuito separado para isso.

Quando você pluga o Arduino na USB ele é alimentado e o bootloader inicia o programa. Seu LED deve piscar!

blink_pin13 from Rafael Donelli on Vimeo.

Certo, não é muito emocionante… mas é um início!

Arduino Uno Rev 3

Há muito tempo eu estava procurando por alguma coisa diferente para fazer, principalmente motivado pelo interesse do meu filho em componentes eletrônicos e afins. Decidi então que, durante minhas férias, iria fazer coisas diferentes e comecei a ler sobre o ambiente de prototipação Arduino.

Meu objetivo inicial era utilizar algum microcontrolador para fazer pequenas montagens e resgatar a minha “criança interior”. Contudo, o mais conhecido eram os PIC (Microchip), mas o fato de ter que utilizar um equipamento para gravar os programas no chip não me agradava e não me parecia prático.

Hoje, passados quase 5 anos desde o início, resolvi olhar de perto o ambiente do Arduino. Na primeira vez achei ainda muito incipiente e experimental e percebi que tanto o hardware quanto o software estavam evoluindo de forma bastante rápida e não achei um bom investimento.

No entanto, o ambiente agora me parece maduro o suficiente e resolvi investir algum tempo para aprender esse novo “hobby”.

Após pesquisar um pouco sobre as placas nacionais (há vários clones de qualidade bastante razoável) optei por comprar uma placa original, de um distribuidor oficial.

Depois de muita espera (e minhas férias se foram apenas na leitura da documentação do site) finalmente um distribuidor possuia a placa que eu queria e recentemente adquiri minha Arduino Uno Rev 3, que chegou rápido.

Contudo tive tempo apenas de fazer algumas fotos para os amigos e plugar para ver se estava ligando. Nada de aventuras por enquanto.

Comprei minha placa com o pessoal da Robocore, que não é a mais barata, mas me entregou rapidinho. Em dois dias tava na mão! Obrigado pessoal!

UPDATE (17.02.2012): Arduino Uno Rev 3 na loja do Lab de Garagem a preços módicos.

Mas o que é ARDUINO?

Arduino

Arduino é um ambiente de prototipagem composto por um hardware (placas arduino Uno, Mega, duemilanove…) e uma IDE de desenvolvimento que permite que você desenvolva seus sketches (programas) e faça o upload para o microcontrolador, de tal modo a poder ler sensores analógicos e digiais, bem como responder aos sensores com saídas visuais (LED´s, por exemplo) ou atuando sobre outros sistemas como motores ou outros dispositivos.

Além disso é uma plataforma aberta, de modo que você pode fazer seu próprio Arduino a partir da documentação no site do projeto, alterá-lo, e distribuí-lo (desde que respeitadas as características descritas na documentação) ou pode adquirir sua placa de um dos fornecedores oficiais ou a partir dos diversos “clones” no mercado.

Em breve pretendo postar mais detalhes das minhas experiências com o Arduino.

Mais informações sobre o Arduino em Arduino.