segunda-feira, 25 de março de 2013

Principais comandos da porta Serial.

    Bom, esse post é um pouco diferente dos outros, pois não há nenhum projeto a ser discutido, mas continuarei dando ênfase no estudo do servomotor.
    Para  maior conhecimento organizei uma tabela com os principais comandos do uso da porta serial e destaquei algumas explicações de tais comandos.



    Com estudo dessa tabela o uso da porta serial ficará bem mais facil.
    Depois irei postar um novo projeto bem simples usando apenas o arduino e um servomecanismo.


quinta-feira, 21 de março de 2013

3º Projeto: Controlar um servo pelo teclado

    Nesse novo projeto iremos controlar um servo utilizando o teclado do PC. É um program simples onde entenderemos mais a fundo sobre os comandos Serial.
 

    Material:

                    - Arduino 
                    - Servo

    Esquema:

    Código:


#include <Servo.h>  //incluir a biblioteca de servo

Servo myservo;  //Inclusao do servo

int n = 0;  //Entradas seriais
int pos = 0;  //Posição zero para o servop

void setup(){
  Serial.begin(9600);  //Ativando a porta serial
  myservo.attach(8);  //Pino do servo+arduino
  myservo.write(0);  //Servo setado com valor zero
  Serial.flush();  //Limpando a memoria do serial
  Serial.println("Digite: \n 2-90 \n 3-180 \n 4-02");  //criação de um cabeçalho no serial
}

void loop(){
  if(Serial.available()>0){  //Teste se porta serial esta recebendo dados
    n = Serial.read();  //leitura de dados
    Serial.print("Valor lido: ");  
    Serial.println(n);  //Printa o valor teclado

    if(n==50){  //girar 90
    myservo.write(90);
    delay(500);
    }

    if(n==51){  //girar 180
    myservo.write(180);
    delay(500);
    }

    if(n==52){  //volta pra 0
    myservo.write(-180);
    delay(500);
    }
  }
  
  Serial.flush();
}

    Vídeo:

    Comentário sobre o código:

    Podemos notar que ao fazer o upload do código e abrirmos o serial(Crtl+Shift+M) aparecerá um tipo de cabeçalho:
                    Digite:
                             - 2-90
                             - 3-180
                             - 4-0

    Isso ocorre porque o Serial.print está no void setup, se estivesse no void loop seria constantemente mostrado na tela. 
    Temos a leitura do valor "n" que é gerado pelo teclado. Como o objetivo é comparar valores lidos pelo teclado precisamos utilizar o valor real do "n" e compara-lo em uma condição: (n==50) "n é igual a 50?", como 50 representa do digito "2", caso você tenha pressionado o número "2" a condição torna-se verdade e uma tarefa é executada.  
É possível usar outros valores e também acionar outros dispositivos como motores/leds usando essa mesma lógica, basta adicionar mais condições.

Agradeço a atenção


terça-feira, 19 de março de 2013

2º Projeto: Servomecanismo com resistor LDR

    Bom, esse segundo projeto é uma maneira simples de interagir um servo usando um LDR. Tente fazer a parte de hardware mais simples possível e ao mesmo tempo mais explicativa possível.

    Material:

                       - Servomecanismo
                       - Resistor 10kohms
                       - LDR
                       - Arduino
                       - Protoboard
                       - Fios Jumpers 

    Esquema:



    Código:



#include <Servo.h>  //inclusão da biblioteca servo

Servo myservo;  //nomeando o servo

int pos = 0;  //determinando posição 0 para o servo
int pinLDR = A0;  //Pino analógico A0 para o LDR
int valor;  //variável valor
#define LDR 0  //definindo o valor de LDR como zero

void setup(){
 
 Serial.begin(9600); //Abrindo comunicação serial
  myservo.attach(9);  //Pino de conexão servo+arduino
  myservo.write(0);  //Servo com valor setado zero
}

void loop(){
  valor = analogRead(LDR);  //Variável valor recebendo o valor do LDR
  Serial.print("O valor do LDR e: ");  //Printar a frase O valor do LDR e:
  Serial.println(valor);  //Printar o valor serial do LDR

//Se variável valor for menor que 550 o servo deverá andar 180 graus com resposta de 500ms
  if(valor<550){
    myservo.write(180);
    delay(500);
    }

//Se não, o servo deverá voltar ao estado original
  else{
    myservo.write(-180);
    delay(500);  
  }
}

    Vídeo:


    Ao fazer o upload do programa o servo se comportará toda vez que um sombra atuá sobre o LDR, movimentando-o 180 graus.

Agradeço a atenção.




sexta-feira, 15 de março de 2013

1º projeto: Semáforo interativo com display de 7 segmentos.


     O primeiro projeto que apresento é o velho mas também importante semáforo interativo, onde temos as luzes para o tráfego dos automóveis e as luzes para a travessia dos pedestres. Mas, nesse projeto adicionei algo á mais: um display de 7 segmentos, cujo faz a contagem regressiva de 5 até 0, cronometrando o tempo de travessia do pedestre.

     DICA: Para realizar esse projeto baseie no exemplo nº 4 do livro Arduino Básico, ed. NOVATEC (recomendo).

    Materiais:

                  - Arduino
                  - Protoboard
                  - Fios Jumpers
                  - 2 LED's vermelhos, 2 LED's verdes e 1 LED amarelo
                  - 5 resistores 220 ohms
                  - Push Button
                  - Display de 7 segmentos (Anôdo comum)

    Esquema:




    Código:

int redCar = 12;  //pino luz vermelho
int yellowCar = 11;  //pino luz amarelo
int greenCar = 10;
int redPed = 7;  //pino luz vermelho pedestre
int greenPed = 8;  //pino luz verde pedestre

int button = 2;  //push button

int displayA = 3;  //seguencia de leds do display e seus respecitvos pinos
int displayB = 4;
int displayC = 5;
int displayD = 1;
int displayE = 6;
int displayF = 9;
int displayG = 13;

void setup(){ 
pinMode(redCar, OUTPUT);  //pino saída
pinMode(yellowCar, OUTPUT);  //pino saída
pinMode(greenCar, OUTPUT);  //pino saída
pinMode(redPed, OUTPUT);  //pino saída
pinMode(greenPed, OUTPUT);  //pino saída

pinMode(button, INPUT);  //botão do pino 2  entrada

digitalWrite(greenCar, HIGH); //acende verde  para carros
digitalWrite(redPed, HIGH);
   
pinMode(3, OUTPUT);  //pinos dos display como saída
pinMode(4, OUTPUT); 
pinMode(5, OUTPUT); 
pinMode(1, OUTPUT); 
pinMode(6, OUTPUT); 
pinMode(9, OUTPUT); 
pinMode(13, OUTPUT);
}

void loop(){ 
int state = digitalRead(button);  /* verifica se o botão foi pressionado e se transcorreram 5 segundos desde a última vez que isso ocorreu*/
 
if(state == HIGH){    //Chama a funçao para alterar as luzes
trocaLed(); 
    }
}

void trocaLed(){ 
digitalWrite(greenCar, LOW);  //Apaga o verde 
digitalWrite(yellowCar, HIGH);  //acende o amarelo 
delay(2000);  //espera dois segundos 
 
digitalWrite(yellowCar, LOW);  //Apaga o amarelo 
digitalWrite(redCar, HIGH);  //Acende o vermelho 
delay(2000);  //Espera 2 segundos 
 
digitalWrite(redPed, LOW);  //Apaga o vermelho dos pedestres 
digitalWrite(greenPed, HIGH);  //cende o verde dos pedestres 
 
//espera por um intervalo de tempo predefinido 
 
digitalWrite(displayA, LOW);  //Seqüência do numero 5 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, HIGH); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, LOW); 
delay(1000); 
 
digitalWrite(displayA, LOW);  //Seqüência do numero 4 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, HIGH); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, HIGH); 
digitalWrite(displayG, LOW); 
delay(1000);
 
digitalWrite(displayA, LOW);  //Seqüência do numero 3 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG,LOW); 
delay(1000);
   
digitalWrite(displayA, LOW);  //Seqüência do numero 2 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, LOW); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, HIGH); 
delay(1000);

digitalWrite(displayA, HIGH);  //Seqüência do numero 1 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, HIGH); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, HIGH); 
digitalWrite(displayG, LOW); 
delay(1000); 
 
digitalWrite(displayA, HIGH);  //Seqüência do numero 0 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, LOW); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, LOW); 
delay(1000);

//pisca o verde para os pedetres 
for(int x=0; x<3; x++){   
digitalWrite(greenPed, HIGH);   
delay(250);   
digitalWrite(greenPed, LOW);   
delay(250); 


//Acende o vermelho dos pedretres 
digitalWrite(redPed, HIGH); 
delay(500); 
digitalWrite(yellowCar, HIGH); 
digitalWrite(redCar, LOW); 
delay(1000); 
digitalWrite(greenCar, HIGH); 
digitalWrite(yellowCar, LOW);
  //Registra o tempo desde a ultima alteração no semaforo
  }
 
    Vídeo:



    Ao fazer o upload do arquivo os led's verde para carros e vermelhos para pedestres deverão está aceso, ao pressionar  o botão o led vermelho para carro apaga e o amarelo se acenderá logo depois o verde de pedestre também se acenderá e o led vermelho se apagará começando a contagem do tempo no display, em seguido ao término da contagem o led verde de pedestre piscará 3 vezes e voltará ao estado inicial do programa.

    Comentário: Esse projeto é muito interessante pois já requer um certo nível de conhecimento de programação somado com eletrônica básica.

    Aperfeiçoamento: - Reduzir código;

Agradeço a atenção de todos e fico aberto a sugestões 

quinta-feira, 14 de março de 2013

Criação de um blog, pra que?!

     Bom, vejamos, por que criar um blog? Para registro? Talvez!....No meu caso o blog foi uma sugestão de um dos meus "mentores" sobre programação de Arduino. Isso mesmo, esse blog tem como objetivo expor experiências e projetos que andei fazendo ou estudando.
    Logo abaixo temos um projeto que fiz recentemente.