Arquivo da categoria ‘Arduino’

Comunicação serial entre dois Arduinos

Publicado: 14 de outubro de 2010 em Projetos, Projetos

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

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));

}
}

Arduino seguindo a luz

Publicado: 14 de outubro de 2010 em Projetos, Projetos

Esta é uma forma simples de você fazer um servo motor seguir a luz, usando alguns simples componentes!

Arduino seguindo a luz com servo motores

O vídeo original é feito com um ArduinoMEGA, o qual tem mais I/O (entradas e saídas). Todavia pode ser construído com qualquer base Arduino.

Componentes:
1 x Servo motor (de parabólica serve também)
2 x Fotoresistores
2 x Resistor 470ohms

[LightTracker[5].jpg]

Faça as ligações como descrito no esquema do FRITIZING acima.

Lembre-se que a gambiarra aqui é colocar de alguma forma uma pequena protoboard em cima do servo! Ou fica a vontade para usar a imaginação! (veja vídeo topo pagina)

#include <Servo.h>

Servo myservo;

int pos = 0;  // Variavel para guardar posicao servo.
int inputPhotoLeft = 1; // Facil de ler, instante 1 ou 0.
int inputPhotoRight = 0;

int Left = 0; // Guarda valor fotoresistor.
int Right = 0; // Guarda valor fotoresistor.

void setup()
{
myservo.attach(9); // Conecta servo ao pino digital 9.
}

void loop()
{
// Le os valores dos fotoresistores e guarda nas variaveis 
Left = analogRead(inputPhotoLeft);
Right = analogRead(inputPhotoRight);

// Checa se a esquerda é maior que direita, se sim move p/ direita.
if (Left > (Right +20))
// +20 é uma zona morta, sem isso causa interferencia.
{
if (pos < 179)
pos++;
myservo.write(pos);
}

// Checa se a esquerda é menor que a direita, se sim move esquerda.
if (Right > (Left +20))
// +20 é uma zona morta, sem isso causa interferencia.
{
if (pos > 1)
pos -= 1;
myservo.write(pos);
}

// Adicionando delay ou não o servo corre mais devagar
delay(10);
}

Qualquer dúvida por favor comente, seu feedback é muito importante!

Créditos, http://stigern.net/blog/?cat=35

C# e Arduino, programa básico

Publicado: 6 de outubro de 2010 em Arduino, Projetos, Projetos, Visual C#

Download aplicação C#: http://ozhan.org/_dosyalar/icerik/C_Arduino_LedFading.zip
Código Arduino:

int Led = 13;
int PwmLed = 11;
int Csharp;
void setup() {
  Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
  pinMode(Led, OUTPUT);
}
void loop() {
  if (Serial.available() > 0) {
    Csharp = Serial.read();
    Serial.println(Csharp, DEC);
    analogWrite(PwmLed, Csharp);
  }
}

O que o programa faz?

image

O Arduino toma a decisão de acender ou não um LED a partir do protocolo vindo pela serial. O mesmo pode ter controle de brilho do LED alterando-se o PWM.

Aqui está um vídeo demonstração:

Controle de um LED no Arduino feito em C#, PC

Disponivel em: http://www.ozhan.org/index.php?kat_id=19#Arduino
Qualquer dúvida me mandem um e-mail.

Att, denadai.

Conectando Xbee ao Arduino

Publicado: 15 de setembro de 2010 em Xbee, ZigBee - 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.
im1

Xbee 1mW

im2 
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.

im3 Configuração dos jumpers do shield

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”.

im4Bray++ Terminal estabelecendo conexão com 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.

im5Recebendo 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.

Estrutura

Publicado: 13 de setembro de 2010 em Estrutura
  • setup()
  • loop()

setup()
A função setup() é chamada quando um sketche é iniciado. Use-o para iniciar variáveis, modos de pinos, iniciar bibliotecas, etc.
A função setup irá somente rodar uma única vez, depois de cada ligação ou reset do Arduino.

Exemplo

int buttonPin = 3;
void setup()
{
Serial.begin(9600);
pinMode(buttonPin, INPUT);
}

void loop()
{
// …
}

loop()
Depois de formar a função setup(), que inicia as variáveis e setar os valores iniciais, a função loop() faz o que o nome sugere: um looping infinito, permitindo o programa mudar e responder. Usado para controlar o Arduino.

Exemplo

int buttonPin = 3;
// setup inicializa o pino do botao e a serial
void setup()
{
beginSerial(9600);
pinMode(buttonPin, INPUT);
// a função loop checa o pino do botao toda vez
// e vai enviar ‘H’ pela serial quando pressionado
}
void loop()
{
if (digitalRead(buttonPin) == HIGH)
serialWrite(‘H’);
else serialWrite(‘L’);
delay(1000);
}

Chegou IDE 0019

Publicado: 13 de setembro de 2010 em Novidades Arduino.cc

Link p/ Download: http://arduino.cc/en/Main/Software

Novidades:

ARDUINO 0019 – 2010.09.03

[core / bibliotecas]

* Biblioteca Ethernet revisada a qual qestá dependendo da nova biblioteca SPI, então para novos sketches irá precisar adicionar no cabeçalho: #include <SPI.h>.
*Adicionada a biblioteca SPI
*Nova classe: String.
*Adicionado função shiftIn() 
*Entre outros

[Software]

*Arduino FIO adicionado ao menu.
*Adicionado controle por scroll no monitor serial.
*Problema resolvido com tabs com mesmo nome, mas com extensões diferentes.

[Exemplos]

*Re-organizados e numerados para facilitar o acesso e ter um melhor progresso.