sábado, 19 de outubro de 2013

sexta-feira, 18 de outubro de 2013

Sensor ultrassonico

Agora vamos usar um sensor ultrassonico, nesse caso, o DYP-ME007V1. porém qualquer outro que possua trigger e echo, pode ser utilizado sem problemas.

Minha montagem do sensor

Infelizmente ainda não consegui o arduino mega no fritzing, portanto vou escrever como ligar!
O sensor ultrassonico possui essenciamente 4 pinos ( as portas pode, ser alteradas para o arduino UNO):


      VCC - Deve ser ligado ao 5V do arduino
      TRIG - Deve ser ligado ao pino 30 do arduino
      ECHO - Deve ser ligado ao pino 31 do arduino
      GND - Deve ser ligado ao gnd do arduino

O LED RGB, Respectivamente, pinos 1, 2, 3 e 4



22 ---------------100R---------------------R    GND   G     B
GND ----------------------------------------------|       |      |
23 ---------------1K------------------------------------|      |
24 ---------------1K-----------------------------------------

Por que o led vermelho possui uma resistencia menor?, para compensar o brilho dele em relação aos outros!.


Agora vamos para o programa!
Para este programa precisamos da bibliotenca NEWPING, que pode ser baixada neste link: https://code.google.com/p/arduino-new-ping/

Explicacão do programa: A biblioteca newping, faz todo o trabalho de enviar o sinal ultrassonico, esperar e receber e converter o tempo levado para a distancia, restando apenas usar o comando de obter a distancia,


 para definir quais leds devem acender a cada momento, foi utilizado o IF, lembrando que o simbolo && significa a operação "E", ou seja, se tal afirmação for verdadeira E tal for falsa, executar algo, no nosso caso, se a distancia for maior que zero centimetros E menor que 5 centimetros, então piscar o led vermelho.


---------------------------------------------------------------------------------

#include <NewPing.h>
#define TRIGGER_PIN  30
#define ECHO_PIN     31
#define MAX_DISTANCE 200

int ledR = 22;
int ledG = 23;
int ledB = 24;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

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

  pinMode(ledR, OUTPUT);  
  pinMode(ledG, OUTPUT);
  pinMode(ledB, OUTPUT);
}
void loop()
{
  delay(50);                      // define um valor de delay! para o sensor, é necessario no minimo 29ms, para evitar que ele receba o som do ultimo envio, e confunda as distancias
  unsigned int uS = sonar.ping(); // Envia o sinal sonoro e recebe o tempo que levou
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); // Converte o tempo para CM
  Serial.println("cm");
  int dist = (uS / US_ROUNDTRIP_CM);  // cria uma variavel inteira para a distancia em cm

  if ((dist > 0) && (dist < 5))  //se a distancia estiver entre 0 e 5 centimetros, piscar a luz vermelha
  {
    digitalWrite(ledR, HIGH);
    digitalWrite(ledG, LOW);
    digitalWrite(ledB, LOW);
    delay (10);
    digitalWrite(ledR, LOW);
        digitalWrite(ledG, LOW);
    digitalWrite(ledB, LOW);
    delay (10);
  }
     if ((dist > 5) && (dist < 10))
  {
    digitalWrite(ledR, HIGH);
    digitalWrite(ledG, LOW);
    digitalWrite(ledB, LOW);
  }
   if ((dist > 10) && (dist < 20))
  {
    digitalWrite(ledR, HIGH);
    digitalWrite(ledG, LOW);
    digitalWrite(ledB, HIGH);
  }
  if ((dist > 20) && (dist < 50))
  {
    digitalWrite(ledR, LOW);
    digitalWrite(ledG, LOW);
    digitalWrite(ledB, HIGH);
  }
  if ((dist > 50) && (dist < 200))
  {
    digitalWrite(ledR, LOW);
    digitalWrite(ledG, HIGH);
    digitalWrite(ledB, LOW);
  }
  delay (5);    
}



Video do funcionamento do programa!



Até a proxima!, duvidas, por favor, perguntem!

Servo motor!

Servos, servos, servos. da pra fazer muitas coisas com eles!. desde abrir uma porta; fazer uma impressora com canetas (em breve vou melhorar a minha e postar aqui!) até direcionar helicopteros, mas agora vem a duvida, o que diabos tem dentro daquela caixinha preta?

Um circuito converte o sinal que vem do microcontrolador para um sinal elétrico mais potente, que liga o motor para o lado desejado, e através do potenciômetro, que esta ligado as engrenagens também, o CI para o motor no angulo que recebeu do microcontrolador.  um circuito relativamente simples, mas muito eficaz!

 Video demonstrando ele por dentro, e funcionamento!


Agora vamos faze-lo funcionar!

Se voce ainda não tem um, muitos helicopteros (aeromodelos) possuem, voce pode desmontar um, ou comprar pela internet, os valores varias de poucos reais, até milhares de dolares (servos realmente profissionais). o que eu vou usar, custa em média $7,00.

Servo Esky EK2 0508 (aeromodelos)


O programa dele pode ser encontrado facilmente na biblioteca do arduino, através dos exemplos, porém quero fazer algo a mais, ver o angulo em que ele esta na tela, para isso, vou usar um exemplo padrao, e mandar imprimir o valor pela porta serial.

Para isso, usaremos o seguinte programa (adaptado a partir do modelo de exemplo do própio arduino)

//-----------------------------------------------------------------------
// Exemplo criado por Italo C J Soares, http://ardumais.blogspot.com/

#include <Servo.h>  // ativa a biblioteca de controle do servo

Servo servoporta9;  // Cria um nome para o servo
int pos = 0;    // Cria uma variavel int para armazenar a posicao do servo
int del = 30; // Cria uma variavel para armazenar o tempo do delay
void setup()
{
  servoporta9.attach(9);  // define o pino em que o servo esta
  Serial.begin(9600); //Ativa a porta serial
}
void loop()
{
  for(pos = 0; pos < 180; pos += 1)  // o servo vai o angulo 0º até 180
  {                                
    servoporta9.write(pos);          
    delay(del);                    
    Serial.print("Valor do servo:"); //Imprime na tela a palavra "Valor do servo:"
    Serial.println(pos);  //Imprime na tela o valor do angulo, e pula a linha
  }
  for(pos = 180; pos>=1; pos-=1)     // o servo vai o angulo 180º até 0º
  {                              
    servoporta9.write(pos);        
    delay(del);
    Serial.print("Valor do servo:");
    Serial.println(pos);
  }
}
//--------------------------------------------------------------------
Vamos liga-lo!, para isso, usem o seguinte esquema!

Fonte: Thunderwiring.wordpress

Programa rodando:

quinta-feira, 17 de outubro de 2013

Piscando LEDS!


Agora a brincadeira vai começar!. relativamente facil! mas muito legal!, vamos brincar com um led RGB, RGB significa respectivamente, Vermelho, Verde e Azul, as tres cores primarias!, esse led contem tres leds dentro de um, por isso as 4 pernas, apesar disso, é extremamente facil trabalhar com ele!

Como ligar um led:

Leds "aguentam" uma tensão muito pequena, queimando facilmente se for utilizado uma tensão maior que a permitida, como no arduino temos 5V nas saidas, atraves da lei de ohm, calculamos o valor do resistor para cada led, que é algo em torno de 1K. através de uma tensão aplicada em cada um deles, podemos criar 16.777.216 cores diferentes, nessa tabela da pra vermos como criar cada cor: http://www.rapidtables.com/web/color/RGB_Color.htm





Como ligar os leds no protoboard

Seguindo este exemplo:


O "cabo" amarelo, representa a cor AZUL do led, passando atraves de um resistor
O "cabo" verde, representa a cor VERDE do led, passando atraves de um resistor
O "cabo" laranja, representa a cor VERMELHO do led, passando atraves de um resistor

Segue um video representando o funcionamento do mesmo




Código

float RGB1[3];
float RGB2[3];
float INC[3];

int red, green, blue;

int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;
int del = 1;
int del1 = 1;
void setup()
{
    randomSeed(analogRead(0));

    RGB1[0] = 0;
    RGB1[1] = 0;
    RGB1[2] = 0;

    RGB2[0] = random(256);
    RGB2[1] = random(256);
    RGB2[2] = random(256);
}

void loop()
{
    randomSeed(analogRead(0));

    for (int x=0; x<3; x++) {
       INC[x] = (RGB1[x] - RGB2[x]) / 256;
    }

    for (int x=0; x<256; x++) {
       red = int(RGB1[0]);
       green = int(RGB1[1]);
       blue = int(RGB1[2]);

       analogWrite (RedPin, red);
       analogWrite (GreenPin, green);
       analogWrite (BluePin, blue);
       delay(del);

       RGB1[0] -= INC[0];
       RGB1[1] -= INC[1];
       RGB1[2] -= INC[2];
    }

    for (int x=0; x<3; x++) {
       RGB2[x] = random(556)-300;
       RGB2[x] = constrain(RGB2[x], 0, 255);
       delay(del1);
    }
}

O que é um arduino? e qual comprar?

Arduino: Criado na itália, em 2005, é uma plataforma de prototipagem (nome complicado não?) basicamente ele te permite mandar um sinal, e através desse sinal de tensão, qualquer coisa é possivel (assim como os computadores, são feitos de numeros binarios, que nada mais são que um nivel alto e baixo de tensão).

Como escolher!:

Por CUSTO x BENEFICIO!

 Se voce for usar a arduino com um propósito definido, compre aquele com a quantidade de portas necessarias, caso seja apenas para aprender, ou com um objetivo ainda indefinido, escolha um modelo mais robusto!

eu particularmente, recomendo a todos o Arduíno MEGA 2560, por ter um numero grande de portas, três comunicações serial (são importantes para interligar arduinos e monitores) e uma facilidade imensa de recuperação (digo isso por experiencia, "queimei" ele varias vezes, e uma simples atualização forcada de firmware resolveu).

porém vamos a uma breve comparação entre os modelos mais utilizados:

ARDUINO MEGA 2560


Entrada externa 6 a 20V
Digital I/O Pins 54, dos quais 14 são pwm
Entradas analogicas 16
Corrente maxima por pino 40 mA
Memória 256 KB
Clock Speed 16 MHz


ARDUINO UNO

Entrada externa 6 a 20V
Digital I/O Pins 14, dos quais 6 são pwm
Entradas analógicas 6
Corrente maxima por pino 40 mA
Memória 32 KB
Clock Speed 16 MHz








Ok, mas as diferenças em termos de preço $$, 
      Arduino uno >    em média R$ 49,00
      Arduino mega  > em média R$ 79,00

Se voce for comprar, recomendo comprar kits! pergunte bastante ao vendedor antes, principalmente sobre os componentes que virão no kit e a procedencia da placa (muitas são falsificadas!)


Boa noite galera!, primeiramente gostaria de explicar o motivo de estar criando esse blog!, geralmente, nós encontramos muitas informações uteis sobre a programação e hardware do Arduíno, porém muitas vezes os códigos não são explicados, restando a nós "adivinhar" o que cada coisa faz. meu objetivo é detalhar ao máximo as funções de cada linha, começando com projetos básicos (piscar uma luz), até a automação de uma residencia, montagem de robôs e outros sistemas.

Bom, é isso!, espero que gostem!, e a propósito!, critiquem o máximo possível, mas de maneira construtiva! deem sugestões e desafios!, vou adorar tentar resolve-los.