terça-feira, 22 de novembro de 2011

Projeto 4 - Semáforo interativo

Neste projeto iremos trabalhar com um novo componente, um botão.
Essa é a primeira vez que iremos interagir com o hardware, ou seja, iremos enviar uma informação ao Arduino que irá receber essa informação e gerar um resultado.
Este projeto ainda é bem simples mas, mesmo assim, é bem interessante. Utilizaremos o botão para fazer o papel de "resitor pull-down". 
O autor explicou de forma bem simples o conceito: "Se o botão for pressionado, a eletricidade tomará o caminho de menor resistência, e fluirá entre os 5V e o pino de entrada (há um resistor de 100k Ω no pino de entrada e um resistor de 10k Ω no terra)". 
Abaixo um esquema de um circuito de resistor pull-down:

Note que não há nenhum resistor entre o o botão e o pino (5v), logo, ao pressionarmos o botão a corrente fluirá por este caminho.
Quando pressionamos o botão, desempenhamos o papel de um pedestre, solicitando que o sinal feche para poder atravessar a rua, como mostra o vídeo abaixo:


Abaixo temos o esquema do hardware e o código utilizado:


//Project 4 - Semaforo interativo
int carRed = 12; // definindo os leds dos carros
int carYellow = 11;
int carGreen = 10;
int pedRed = 9; // definindo os leds de pedestres
int pedGreen = 8;
int button = 2; // pino do botao
int crossTime = 10000; // tempo de travessia
unsigned long changeTime; // tempo desde a ultima vez que o botao foi pressionado

void setup() {
  pinMode(carRed, OUTPUT);
  pinMode(carYellow, OUTPUT);
  pinMode(carGreen, OUTPUT);
  pinMode(pedRed, OUTPUT);
  pinMode(pedGreen, OUTPUT);
  pinMode(button, INPUT);
  digitalWrite(carGreen, HIGH);
  digitalWrite(pedRed, HIGH);
}

void loop() {
  int state = digitalRead(button);
  /*verifica se o botao foi pressionado e se faz mais de 5 seg desde a ultima vez*/
  if (state == HIGH && (millis() - changeTime) > 5000) {
    //chama a funcao que altera as luzes
    delay(4000);
    changeLights();
  }
}

void changeLights(){
  digitalWrite(carGreen, LOW); //apaga carGreen
  digitalWrite(carYellow, HIGH); //acende carYellow
  delay(4000);
  digitalWrite(carYellow, LOW); //apaga carYellow
  digitalWrite(carRed, HIGH); //acende carRed
  digitalWrite(pedRed, LOW); //apaga pedRed
  digitalWrite(pedGreen, HIGH); //acende pedGreen
  delay(crossTime); //aguarda crossTime
  
  //pisca pedGreen
  for (int x=0; x<10; x++) {
    digitalWrite(pedGreen, HIGH);
    delay(250);
    digitalWrite(pedGreen, LOW);
    delay(250);
  }
  
  digitalWrite(pedRed, HIGH); //acende pedRed
  digitalWrite(carRed, LOW); //apaga carRed
  digitalWrite(carGreen, HIGH); //acende carGreen
  
  changeTime = millis();
}

domingo, 13 de novembro de 2011

O lixo de uns...

Nunca achei tanto sentido na frase "O lixo de uns é o tesouro de outros" quanto neste sábado.
Sabe como é, de plantão, sem poder sair de casa nem pra tomar uma água de côco na praia, a gente arruma o que fazer dentro de casa mesmo =).
Resolvi fuçar em uma unidade de CD antiga e uma máquina fotográfica condenada rs...
Comecei pela unidade de CD e fiquei surpreso quando terminei de desmontar todo o brinquedo e reuni as peças na mesa. Parecia que tinha ido dar uma volta da Santa Ifigênia. Descobri que há 3 motores dentro do drive! Fora a quantidade de engrenagens, parafusos e, é claro, o canhão laser.
Outra coisa muito interessante foi descobrir um CI Atmel na placa principal da unidade, o mesmo fabricante do CI da nossa plaquinha Arduino. Um Atmel AT49F1024. Pelo que entendi do datasheet (http://www.atmel.com/dyn/resources/prod_documents/doc0765.pdf) ele é responsável por gerenciar a informação e enviá-la para o canhão.  Abaixo algumas fotos do "desmanche"
Motores encontrados na unidade de CD 
Canhão laser
Engrenagens e cabos flat
Atmel AT49F1024 da unidade de CD
Também desmontei uma máquina fotográfica digital Kodak. Um dos primeiros modelos lançados, com incríveis, 3.1 MegaPíxel.
Achei muito interessante a arquitetura da máquina. Tudo muito bem planejado e encaixado. Notei também que as placa são encaixadas formando um "sanduiche" de placas, mais ou menos como o Arduino e seus shields.
Outras coisas também chamaram a minha atenção, o flash, que vem como um módulo totalmente independente, o motor da lente da câmera, muito pequeno e bem feito, as lentes da objetiva, que podem ser utilizadas em projetos que envolvam lasers e sensores de luz e por último, a unidade de pilhas, que pode ser reutilizada para alimentação externa da sua placa Arduino.
Abaixo algumas fotos do que um dia foi uma máquina fotográfica de "última geração" =)

Frente da máquina
Display e comandos
Máquina sem a carcaça
Lentes da objetiva e afins.
Módulo do flash
O pequeno motor da lente
Display LCD
Módulo da pilha (já adaptado para uso futuro com o Arduino)
Placas controladoras (como os shields para Arduino)
Achei muito interessante desmontar esses eletrônicos e observar a sua estrutura. Quem tiver a oportunidade de desmotar aquelas quinquilharias que a tia, a avó ou a vizinha não quer mais, vá em frente!

"Na natureza nada se cria, nada se perde, tudo se transforma."
Antoine Lavoisier

quinta-feira, 10 de novembro de 2011

Projeto 3

Como havia prometido, iria postar alguns projetos do livro que estou lendo (Arduino Básico).
Desta vez, temos um projeto bem simples, de código básico, onde montamos um semáforo.
Este é o projeto 3 do livro, acredito que os próximos serão mais interessantes do que esse. Um ponto importante que gostaria de comentar sobre o livro, é que nos dois primeiros projetos (piscar LEDs) o autor explica alguns conceitos básicos de programação e eletrônica, só para realizar os testes. Achei estes conceitos legais, como por exemplo, calcular a capacidade do resistor. Farei um post sobre isso.
Abaixo temos o vídeo com o projeto funcionando.


Aqui o código utilizado. Coisa bem simples não?

int ledDelay = 10000;
int redPin = 10;
int yellowPin = 9;
int greenPin = 8;

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
}
void loop() {
  digitalWrite(redPin, HIGH);
  delay(ledDelay);

  digitalWrite(redPin, LOW);    
  digitalWrite(greenPin, HIGH);
  delay(ledDelay);

  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, HIGH);
  delay(2000);
  
  digitalWrite(yellowPin, LOW);
}


Pelo que estava lendo no livro, os próximos projetos são bem legais, envolvendo motores e outros CIs.

terça-feira, 8 de novembro de 2011

Beginning Arduino...

Como primeiro post, gostaria de deixar claro que nunca escrevi nada em nenhum blog, portanto, tenham paciência.
Depois de pesquisar um pouco na net, percebi que não temos muitas coisas feitas na "Terra Brasilis" relacionado ao Arduino. Temos bons projetos em andamento, muita gente que conhece demais e outros, como eu, que não entende nada e está procurando entender.
Como não sou um expert em Arduino, vou precisar da ajuda de todos e já peço desculpas pelos erros que posso cometer. O intuito deste blog é aprender com as experiências, transmitir um pouco desse conhecimento para quem tiver interesse e trocar experiências com quem já conhece mais do assunto.
Bom, acredito que se você está lendo este post, ao menos já ouviu falar em Arduino. Caso contrário, acho legal dar uma olhada na página oficial (www.arduino.cc). Lá vc irá encontrar muitas informações e um forum cheio de coisas bacanas. Mas, basicamente, o Arduino é uma plataforma (hardware e software) open-source para desenvolvimento de protótipos de eletrônica. Segundo o autor do livro "Beginning Arduino",  Mivhel McRoberts "Arduino é um pequeno computador que você pode programar para processar entradas e saídas entre dispositivos e os componentes externos conectados à ele.".
Como não entendia nada do assunto, decidi começar pelo começo, comprei um livro básico para entender o tema. A única literatura descente que encontrei traduzida (temos muito material bom em inglês) foi o livro "Arduino Básico" (Michael MacRoberts - Novatec 2011). O que achei interessante deste livro é que ele está em uma linguagem simples, mesmo para quem nunca programou nada ou montou um circuito.
O livro está dividido em 50 projetos. Desde o mais básico (piscar um LED), até o mais avançado (controlar sensores, displays LCD, telas touch, etc). A idéia é compartilhar cada projeto e trocar uma figurinha sobre as dificuldades e as coisas interessantes.
Como sabemos, comprar componentes eletrônicos no Brasil não é lá das coisas mais fáceis. Para conseguir o meu Arduino, tive que esperar mais de um mês para que a placa chegasse da China (www.dealextreme.com). Quem não tiver tanta paciência, pode comprar algumas coisas por aqui também, abaixo algumas lojas interessantes:
multilogica-shop.com/
loja.labdegaragem.com.br/
Quem quiser e puder comprar no exterior, aqui vai a dica:
s.dealextreme.com/search/arduino
www.sparkfun.com/
Nessa última, vc encontra praticamente tudo quanto é componente, o problema é que é nos EUA...
Estava pensando em escrever só uma ou duas linhas, mas acabei escrevendo um monte de coisa. Acho que por enquanto é isso. Nos próximos posts, vou publicando o andamento dos projetos, vamos ver no que vai dar...