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]
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()
//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);
}
}
//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);
}
//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.
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;
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;
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.
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.
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”
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:
ATID3332As letras AT indicam ao Xbee que vamos lhe enviar comandos.
DH0
DL1
MY0
BD3
WR
CN
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.
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);
}
// Habilita porta Serial
Serial.begin(19200);
}
void loop() {
// Le pino analogico 5
analogValue5 = analogRead(5);
// Le pino analogico 5
analogValue5 = analogRead(5);
// Mapeia os valores para 0 - 255
val5 = map(analogValue5, 0, 1023, 0, 255);
val5 = map(analogValue5, 0, 1023, 0, 255);
// envia o valor via serial em modo binário
Serial.println(val5, BYTE);
Serial.println(val5, BYTE);
}
Código Receptor:
byte incomingByte;
void setup() {
// Habilita comunicação serial
Serial.begin(19200);
// Habilita comunicação serial
Serial.begin(19200);
// declara pin 11 como output, este é o LED
pinMode (11, OUTPUT);
}
pinMode (11, OUTPUT);
}
void loop() {
// Se há bytes livres vindo da porta serial
if (Serial.available()) {
if (Serial.available()) {
// Seta o valor para a variavel 'incomingByte'
incomingByte = Serial.read();
incomingByte = Serial.read();
// Escreve o valor no pino 11
analogWrite(11, int(incomingByte));
analogWrite(11, int(incomingByte));
}
}
}
Assinar:
Postagens (Atom)