Social Icons

Jeremy Blum Projects - Arduino Parte [6]

Esse é da Semana 6, usando Comunicação paralela para fazer controle de LED's pelo teclado do PC
Para quem não viu os outros:
Semana [1]
Semana [2]
Semana [3]
Semana [4]
Semana [5]

Usado nos tutoriais:
 - Download Códigos
 - Download Lista de Hardware Usado

Jeremy Blum Projects - Arduino Parte [5]

Essa é a semana 5...


Para quem não viu os outros ai vai o link:
Semana [1]
Semana [2]
Semana [3]
Semana [4]











Cada Imagem com Seus respectivos códigos abaixo. Click para dar Zoom.



//Program by Jeremy Blum                                                                                 
//www.jeremyblum.com                                                                                     
//Test Motor Speed Using a                                                                               Transistor                                                                                                         
//Define Pins                                                                     
int motorPin = 9;                                                                     
void setup()
{
  //Set the PWM Motor pin as an output
  pinMode(motorPin, OUTPUT);
}
void loop()
{
  //Increase Motor Speed from 0 -> 255
  for (int i=0; i<=255; i++)
  {
    analogWrite(motorPin, i);
    delay(10);
  }
  delay(500); //Hold it
  //Decrease Motor Speed from 255 -> 0
  for(int i=255; i>=0; i--)
  {
    analogWrite(motorPin, i);
    delay(10);
  }
  delay(500); //Hold it!
}


//Program by Jeremy Blum
//www.jeremyblum.com
//Controls a Servo Motor
//Include Servo Library
#include <Servo.h>
//Define Pins
int servoPin = 9;
//Create Servo Object
Servo jeremysServo;
void setup()
{
  //Attaches the Servo to our object
  jeremysServo.attach(servoPin);
}
void loop()
{
  //We can Turn a Servo to 180 degrees
  for (int i = 0; i <=180; i=i+20)
  {
    jeremysServo.write(i);
    delay(1000);
  }
 
}

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

//Program by Jeremy Blum
//www.jeremyblum.com
//Controls a Servo Motor using the info from an IR Distance Sensor
//Include Servo Library
#include <Servo.h>
//Define Pins
int servoPin = 9;
int distPin = 0;
//Create Servo Object
Servo jeremysServo;
void setup()
{
  //Attaches the Servo to our object
  jeremysServo.attach(servoPin);
}
void loop()
{
  //Read the Distance Sensor and adjust values
  int dist = analogRead(distPin);
  int pos = map(dist, 0, 1023, 0, 180);

  //Turn the servo
  jeremysServo.write(pos);
 
}

Arduino + Xbee

Este post visa exemplificar os primeiros passos com Arduino e Xbee.
Xbee são módulos de rádio para efetuar comunicação serial entre dois pontos (ponto a ponto, ponto a multiponto e etc), conta com protocolo Zigbee e assim garante fidelidade na conexão. Estes são produzidos pela DIGI (antiga MaxStream) e possui duas versões a série 1 e 2. Série 1 e 2 não se comunicam entre si e ambas possuem modelos bem semelhantes:
Xbee 1mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 40m em ambientes fechados e 100m em ambientes abertos.
XbeePRO 50mW, antena tipo fio, RSPMA ,UFL e chip. A distância de comunicação chega até 300m em ambientes fechados e 1600m em ambientes abertos.
image Módulo Xbee 1mW – MaxStream
image
  Xbee Shield para Arduino

O Xbee utiliza o protocolo ZigBee que este por sua vez utiliza como base o protocolo IEEE 802.15.4.


Utilizações:
Automação Residencial: Controle de Iluminação, Alarmes, Controle de Temperatura;
Automação Predial: Controle de Temperatura, Telemetria Elevadorista, Controle Elétrico;
Automação industrial: Telecontrole de Sensores, Terminais Inteligentes, Comunicação com Centrais.
Automação Comercial: Geradores de Senhas, Terminais Inteligentes, Software simultâneo;
Em nosso caso vamos criar uma conexão entre dois Xbee utilizando o Arduino e o PC.


Materiais Necessários: 2 Shield Xbee para Arduino;
2 Arduino (um deles sem o microcontrolador, cuidado ao retirar para não entortar os seus pinos);
2 Módulos Xbee;
1 Bateria 9V para alimentar o Arduino extra;
1 Caso USB (A-B) para conectar o Arduino ao PC;


Configuração Inicial
De fábrica cada módulo Xbee vem configurado com uma PANID (número que identifica a rede) de número 3332 e configurados com uma taxa de transmissão de 9600 baud, com dados de 8 bits sem paridade e 1 bit de parada.
Cada Xbee Shield tem um par de jumpers para definir se a comunicação serial se realiza pela porta USB ou pelao próprio Xbee. Como primeira tentativa vamos configura-lo para interagir com a porta USB, isso significa colocar os jumpers na posição externa dos pinos, na figura abaixo pode-se ver como ficaria.
imageConfiguração dos pinos do shield Xbee

Podemos utilizar o programa HyperTerminal do Windows para começar a configurar o módulo Xbee. Outra alternativa seria usar o Serial Monitor que vem integrado com a IDE do Arduino ou o programa Bray++ Terminal.
O comando necessário para começar a programar o módulo é “+++”, ou seja três simbolos de soma consecutivos. Teclando-os devemos receber como resposta um “OK” 

imageEstabelecendo conexão com o Xbee 

Uma vez estabelecida a conexão só temos 5 segundos para interagir com o módulo. Depois deste tempo, o módulo regressa a seu estado nativo e para voltar a conexão deve redigitar “+++”.
Cada comando que mandamos ao Xbee deve ser precedido pelas letras AT (de AT Command = Comando AT)
A tabela de comandos mais usuais pode ser encontrado na página dedicada no site do Arduino

Usaremos para conexão ao PC a placa Arduino sem o microcontrolador ATMEGA. A razão para isto é que desta maneira podemos diretamente interagir pelo USB com o módulo Xbee.
Para este exemplo proponho a seguinte configuração: uma PANID de 3332, um módulo com endereço ‘0’ e o outro com ‘1’. O módulo com endereço ‘0’ será o que  vai estar conectado ao PC e o módulo com endereço ‘1’ será o módulo remoto.
Para configurar o primeiro com a endereço ‘0’, 9600 baud, 8 bits, sem paridade, com 1 bit de parada e comunicação com o módulo de ID1 usamos os seguintes comandos:
ATID3332
DH0
DL1
MY0
BD3
WR
CN
As letras AT indicam ao Xbee que vamos lhe enviar comandos.
ID3332: Define PANID de 3332;
DH0: Define direção ‘1’, com quem o Xbee estará se comunicando;     DL1: Define direção ‘1’, com quem o Xbee estará se comunicando;  MY0: Define endereço ‘0’, próprio endereço; BD3: Define velocidade em 9600 baud; WR: Faz a gravação do módulo; CN: Encerra conexão com o módulo;

Passo seguinte é conectar o segundo Xbee Shield ao Arduino sem microcontrolador. Configuramos da mesma maneira:

ID3332: Define PANID de 3332;
DH0: Define endereço ‘1’, com quem o Xbee estará se comunicando;     DL1: Define endereço ‘1’, com quem o Xbee estará se comunicando;  MY0: Define endereço ‘1’, próprio endereço; BD3: Define velocidade em 9600 baud; WR: Faz a gravação do módulo; CN: Encerra conexão com o módulo;

Depois de terminada a configuração dos módulos estamos aptos de estabelecer uma conexão cpm os módulos.


Programando o Arduino remoto

Vamos colocar o módulo Xbee com endereço ‘1’ no Arduino que tem o microcontrolador e vamos programar nele um código que envia via Serial um número. Também vamos incluir uma leitura da porta serial para saber se foi recebido um caracter em particular e se caso for afirmativos iremos trocar o estado de um LED conectado ao pino digital 13.
É importante remover o módulo Xbee dete Arduino enquanto programamos, para que possamos estabelecer a comunicação serial.
int numero = 0;
char recepcao;
int estado = 1;

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

void loop() {
Serial.print(numero);
Serial.println();
delay(1000);
numero++;
// ler da serial
recepcao = Serial.read();
if (recepcao == 'x')
{
estado = !estado;
digitalWrite(13,estado);
}
}
Depois de carregar este código podemos testa-lo abrindo uma conexão serial entre o Arduino. Devemos observar o numero ascendente e quando enviamos o caracter ‘x’ devemos observar uma troca do estado do LED conectado ao pino 13

Provando a comunicação sem fio 

Uma vez programado o Arduino vamos desconectar o jumper USB e colocar no outro, aonde possamos alimenta-lo com uma bateira 9V. Também vamos conectar o Xbee para que possa começar a comunicação serial sem fio. Devemos nos assegurar que os jumpers do interior do Arduino estejam em ‘Xbee"’. No PC vamos conectar o Arduino sem microcontrolador com o Xbee shield de endereço ‘0’ e vamos abrir o Hyper Terminal, depois de alguns segundos devemos começar a observar o numero recebido do endereço ‘1’ em ascendencia e quando teclamos a tecla ‘x’ conferimos se o LED mudou de estado.
imageRecebendo os dados pelo Hyper Terminal do Windows 

Espero que gostem do exemplo e o desenvolvam com sabedoria. Xbee é uma ferramenta implantada no Brasil em meados de 2007 e está em plena expansão.


Podemos precisar a qualquer momento nos comunicar com outros dispositivos, no caso outros Arduinos.

Este post traz uma simples solução para este problema, "Como se comunicar serialmente com outro ARDUINO!?"

comunicação serial via modulo XBEE



Comunicação serial por fio

Configurando os pinos RX/TX do Arduino por fio

No Arduino emissor teremos um potenciometro, do qual é lido o valor e mandado via serial.
No receptor teremos um LED que irá mudar o seu brilho conforme o valor do potencimetro.

Faça agora as seguintes conexões:

TX_ARDUINO#1 - - - - RX_ARDUINO#2
RX_ARDUINO#2 - - - - TX_ARDUINO#1

NOTA: QUANDO FOR PASSAR O CÓDIGO PARA O ARDUINO, DESCONECTAR OS FIOS DE TX E RX DE AMBOS OS LADOS!

Código Emissor:
int analogValue5, val5;
void setup() {
// Habilita porta Serial
Serial.begin(19200);
}
void loop() {
// Le pino analogico 5
analogValue5 = analogRead(5);
// Mapeia os valores para 0 - 255
val5 = map(analogValue5, 0, 1023, 0, 255);
// envia o valor via serial em modo binário
Serial.println(val5, BYTE);
}

Código Receptor:
byte incomingByte;
void setup() {
// Habilita comunicação serial
Serial.begin(19200);
// declara pin 11 como output, este é o LED
pinMode (11, OUTPUT);
}
void loop() {
// Se há bytes livres vindo da porta serial
if (Serial.available()) {
// Seta o valor para a variavel 'incomingByte'
incomingByte = Serial.read();
// Escreve o valor no pino 11
analogWrite(11, int(incomingByte));
}
}