Social Icons

Jeremy Blum Projects - Arduino Parte [8]

Este é da semana 8, trataremos sobre Interfaces SPI, LED's, 
Para quem não viu os outros:
Semana [1]
Semana [2]
Semana [3]
Semana [4]
Semana [5]
Semana [6]

Semana [7]


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

  • Download Códigos Usados


  • Download Circuito

  • ------------------------------------------------

    Jeremy Blum Projects - Arduino Parte [7]

    Este é da semana 7, trataremos sobre Temperatura, Sensores,
    Para quem não viu os outros:
    Semana [1]
    Semana [2]
    Semana [3]
    Semana [4]
    Semana [5]
    Semana [6]
    --------------------------------------------------------
    Download Códigos Usados
    Download Esquemas (Circuitos)
    --------------------------------------------------------



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