Segue um video mostrando como vai funcionar, ainda estou melhorando o programa.
ArduMais - Descobrindo um novo mundo!
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.
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!
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-----------------------------------------
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!
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.
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!
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)
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
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
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.
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.
Assinar:
Postagens (Atom)