sábado, 14 de dezembro de 2013

CODIGO ARDUINO 2WD

#include <LiquidCrystal.h>


const byte PIN_BUTTON_RIGHT = 8;
const byte PIN_BUTTON_UP = 9;
const byte PIN_BUTTON_DOWN = 10;
const byte PIN_BUTTON_LEFT = 11;
const byte PIN_BUTTON_TEMP = 12;

float tempc;
int temppin=0;
LiquidCrystal lcd(A4,A5,12,11,10,9);

int sirene,Buzzer=6,LED=7;

int RECV_PIN=2, motor1_1=3, motor1_2=4, motor2_1=5, motor2_2=6,ledfarol=7;


void setup() {
  Serial.begin(9600);
  Serial.println("Simple Adafruit Motor Shield sketch");

  pinMode(PIN_BUTTON_RIGHT, INPUT);
  digitalWrite(PIN_BUTTON_RIGHT, HIGH);

  pinMode(PIN_BUTTON_LEFT, INPUT);
  digitalWrite(PIN_BUTTON_LEFT, HIGH);

  pinMode(PIN_BUTTON_UP, INPUT);
  digitalWrite(PIN_BUTTON_UP, HIGH);

  pinMode(PIN_BUTTON_DOWN, INPUT);
  digitalWrite(PIN_BUTTON_DOWN, HIGH);
 
   pinMode(PIN_BUTTON_TEMP, INPUT);
  digitalWrite(PIN_BUTTON_TEMP, HIGH);

 lcd.begin(16, 2);
 pinMode(motor1_1,OUTPUT);
 pinMode(motor1_2,OUTPUT);
 pinMode(motor2_1,OUTPUT);
 pinMode(motor2_2,OUTPUT);
 pinMode(LED,OUTPUT);
 pinMode(A1,OUTPUT);
 pinMode(A2,OUTPUT);
 pinMode(A3,OUTPUT);
 pinMode(A4,OUTPUT);
 pinMode(A5,OUTPUT);
 pinMode(ledfarol,OUTPUT);
 pinMode(Buzzer,OUTPUT);
 }

void loop() {
 

  if (digitalRead(PIN_BUTTON_UP) == LOW) { //frente
  lcd.setCursor(0,0);
  lcd.print("Botao 1");
  lcd.setCursor(0,1);
  lcd.print("Frente");
  digitalWrite(motor2_2,LOW);
  digitalWrite(motor1_2,LOW);
  digitalWrite(motor1_1,HIGH);
  digitalWrite(motor2_1,HIGH);
  }
  else
  {
    //button is not pressed
  }

 if (digitalRead(PIN_BUTTON_DOWN) == LOW) { //tras
lcd.setCursor(0,0);
lcd.print("Botao 2");
lcd.setCursor(0,1);
lcd.print("Ré");
digitalWrite(motor2_1,LOW);
digitalWrite(motor1_1,LOW);
digitalWrite(motor1_2,HIGH);
digitalWrite(motor2_2,HIGH);
 }
else
{
//button is not pressed
}

 /*if (digitalRead(PIN_BUTTON_UP) == LOW) { //parar
lcd.setCursor(0,0);
lcd.print("Botao 3");
lcd.setCursor(0,1);
lcd.print("Parar");
digitalWrite(motor2_2,LOW);
digitalWrite(motor1_2,LOW);
digitalWrite(motor2_1,LOW);
digitalWrite(motor1_1,LOW);
else
//button is not pressed
}*/

if (digitalRead(PIN_BUTTON_LEFT) == LOW) {  //ESQUERDA
lcd.setCursor(0,0);
lcd.print("Botao 4");
lcd.setCursor(0,1);
lcd.print("Esquerda");
digitalWrite(motor2_1,LOW);
digitalWrite(motor1_2,LOW);
digitalWrite(motor1_1,HIGH);
digitalWrite(motor2_2,HIGH);
}
else
{
//button is not pressed
}

if (digitalRead(PIN_BUTTON_RIGHT) == LOW) {  //DIREITA
lcd.setCursor(0,0);
lcd.print("Botao 5");
lcd.setCursor(0,1);
lcd.print("Direita");
digitalWrite(motor2_2,LOW);
digitalWrite(motor1_1,LOW);
digitalWrite(motor1_2,HIGH);
digitalWrite(motor2_1,HIGH);
}
else
{
//button is not pressed
}
if (digitalRead(PIN_BUTTON_TEMP) == LOW) {  //temp
tempc=analogRead(temppin);
tempc=((5.0*tempc*100)/1024);
Serial.println(tempc);
lcd.setCursor(0,0);
lcd.print("Temperatura");
lcd.setCursor(0,1);
lcd.print(tempc);
}
else
{
//button is not pressed
}
}

CODIGO ARDUINO 4WD

   #include <Servo.h>

//  pinos do Arduino para o registrador de deslocamento

#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8


// Estes são usados ​​para definir a direção do motorista ponte.
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR3_A 5
#define MOTOR3_B 7
#define MOTOR4_A 0
#define MOTOR4_B 6

// pinos do Arduino para os sinais PWM.
#define MOTOR1_PWM 11
#define MOTOR2_PWM 3
#define MOTOR3_PWM 6
#define MOTOR4_PWM 5

// Códigos para a função de motor.
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4


const byte PIN_BUTTON_RIGHT = 10;
const byte PIN_BUTTON_UP = 9;
const byte PIN_BUTTON_DOWN = 2;
const byte PIN_BUTTON_LEFT = 13;

void setup()
{
  Serial.begin(9600);
  Serial.println("Simple Adafruit Motor Shield sketch");

  pinMode(PIN_BUTTON_RIGHT, INPUT);
  digitalWrite(PIN_BUTTON_RIGHT, HIGH);

  pinMode(PIN_BUTTON_LEFT, INPUT);
  digitalWrite(PIN_BUTTON_LEFT, HIGH);

  pinMode(PIN_BUTTON_UP, INPUT);
  digitalWrite(PIN_BUTTON_UP, HIGH);

  pinMode(PIN_BUTTON_DOWN, INPUT);
  digitalWrite(PIN_BUTTON_DOWN, HIGH);

}



void loop()
{


if (digitalRead(PIN_BUTTON_LEFT) == LOW) {  //ESQUERDA
    // Button is pressed
   
  motor(1, BACKWARD, 250);
  delay(1);
  motor(2, FORWARD, 250);
  delay(1);
  motor(3, BACKWARD, 250);
  delay(1);
  motor(4, FORWARD, 250);
  delay(1);
 //else
   // Button is not pressed
}
if (digitalRead(PIN_BUTTON_RIGHT) == LOW) {  //DIREITA
    // Button is pressed
   
  motor(1, FORWARD, 250);
  delay(1);
  motor(2, BACKWARD, 250);
  delay(1);
  motor(3, FORWARD, 250);
  delay(1);
  motor(4, BACKWARD, 250);
  delay(1);
 
} else {
   // Button is not pressed
}
if (digitalRead(PIN_BUTTON_UP) == LOW) {
  // Button is pressed
  motor(1, FORWARD, 250);
  delay(1);
  motor(2, FORWARD, 250);
  delay(1);
  motor(3, FORWARD, 250);
  delay(1);
  motor(4, FORWARD, 250);
  delay(1);
} else {
   // Button is not pressed
}
if (digitalRead(PIN_BUTTON_DOWN) == LOW) {
  // Button is pressed
  motor(1, BACKWARD, 250);
  delay(1);
  motor(2, BACKWARD, 250);
  delay(1);
  motor(3, BACKWARD, 250);
  delay(1);
  motor(4, BACKWARD, 250);
  delay(1);
//else {
   // Button is not pressed
//}
}
  Serial.println();
/*
  motor(1, BACKWARD, 250);
  delay(1);
  motor(2, BACKWARD, 250);
  delay(1);
  motor(3, BACKWARD, 250);
  delay(1);
  motor(4, BACKWARD, 250);
  delay(1); */
}

void motor(int nMotor, int command, int speed)
{
  int motorA, motorB;

  if (nMotor >= 1 && nMotor <= 4)
  {
    switch (nMotor)
    {
    case 1:
      motorA   = MOTOR1_A;
      motorB   = MOTOR1_B;
      break;
    case 2:
      motorA   = MOTOR2_A;
      motorB   = MOTOR2_B;
      break;
    case 3:
      motorA   = MOTOR3_A;
      motorB   = MOTOR3_B;
      break;
    case 4:
      motorA   = MOTOR4_A;
      motorB   = MOTOR4_B;
      break;
    default:
      break;
    }

    switch (command)
    {
    case FORWARD://(frente)
      motor_output (motorA, HIGH, speed);
      motor_output (motorB, LOW, -1);     // -1: no PWM set
      break;
    case BACKWARD:
      motor_output (motorA, LOW, speed);
      motor_output (motorB, HIGH, -1);    // -1: no PWM set
      break;
    case BRAKE:
      motor_output (motorA, LOW, 255); //255: totalmente em
      motor_output (motorB, LOW, -1);  // -1: no PWM set
      break;
    case RELEASE:
      motor_output (motorA, LOW, 0);  // 0: output floating(flutuante saida).
      motor_output (motorB, LOW, -1); // -1: no PWM set
      break;
    default:
      break;
    }
  }
}
void motor_output (int output, int high_low, int speed)
{
  int motorPWM;

  switch (output)
  {
  case MOTOR1_A:
  case MOTOR1_B:
    motorPWM = MOTOR1_PWM;
    break;
  case MOTOR2_A:
  case MOTOR2_B:
    motorPWM = MOTOR2_PWM;
    break;
  case MOTOR3_A:
  case MOTOR3_B:
    motorPWM = MOTOR3_PWM;
    break;
  case MOTOR4_A:
  case MOTOR4_B:
    motorPWM = MOTOR4_PWM;
    break;
  default:
    //Usar a velocidade como sinalizador de erro, -3333 = saída inválido.
    speed = -3333;
    break;
  }
 if (speed != -3333)
  {
    shiftWrite(output, high_low);
    // definir PWM somente se ela é válida se
    if (speed >= 0 && speed <= 255)  
    {
      analogWrite(motorPWM, speed);
    }
  }
}

void shiftWrite(int output, int high_low)
{
  static int latch_copy;
  static int shift_register_initialized = false;

 // Faz a inicialização em tempo real,
 // Na primeira vez que é utilizado.
  if (!shift_register_initialized)
  {
   // Definir pinos para registro de deslocamento para a saída
    pinMode(MOTORLATCH, OUTPUT);
    pinMode(MOTORENABLE, OUTPUT);
    pinMode(MOTORDATA, OUTPUT);
    pinMode(MOTORCLK, OUTPUT);

    // Definir pinos para registro de deslocamento para o valor padrão (baixo);
    digitalWrite(MOTORDATA, LOW);
    digitalWrite(MOTORLATCH, LOW);
    digitalWrite(MOTORCLK, LOW);
   // Ativar o registo de deslocamento, defina Ativar pin Baixo
    digitalWrite(MOTORENABLE, LOW);

    // Inicia com todas as saídas (da mudança de registo) baixa
    latch_copy = 0;

    shift_register_initialized = true;
  }

 // A define alta e baixa são 1 e 0.
 // Então, isso é válido.
  bitWrite(latch_copy, output, high_low);

  // Use o default 'shiftOut ()' Arduino função
  // Mudar os bits com o MOTORCLK como relógio de pulso.
  // O 74HC595 shiftregister quer o MSB primeiro.
  // Depois disso, gerar um pulso trava com MOTORLATCH.
  shiftOut(MOTORDATA, MOTORCLK, MSBFIRST, latch_copy);
  delayMicroseconds(5);   // Para sua segurança, não é realmente necessário.
  digitalWrite(MOTORLATCH, HIGH);
  delayMicroseconds(5);    // Para sua segurança, não é realmente necessário.
  digitalWrite(MOTORLATCH, LOW);
}

PÓS E CONTRAS

PÓS

  • Nós aprofundamos no universo da eletrônica digital e dos microcontroladores(Arduino)
  • Podemos ver na prática a junção da programação com a eletrônica digital 
  • A importância da atenção quanto a interligação de componentes eletrônicos 
  • A gama de conhecimento eletrônico que conseguimos absorver
  • Enxergar que a plataforma Arduíno é vasta podendo ser realizado diversos projetos;



CONTRA

  • Dificuldade quanto a compra de componentes eletrônicos na região
  • Ter que refazer o código do Arduino por conta da queima da ponte h
  • Ter que dormir de madrugada para sanar os problemas acima;
  • Ter comprado pouco Jumper

MONTAGEM - IMAGENS E VIDEO













COMPONENTES ELETRONICOS UTILIZADOS NO ROBO4WD

COMPONENTES ELETRONICOS UTILIZADOS  NO ROBO4WD
Segue sugestões para montagem com links dos modelos apresentados


Sensor De Umidade E Temperatura Dht11



Modulo Rf 433mhz + Ht12d + Ht12e + Diagrama Ligação Id925

  

Módulo Joystick Shield V2.4, Crie Seu Video-game No Arduino



Módulo Motor De Passo Shield Para Arduino, Ponte H, H-bridge




Kit Chassis De Carro Robô Vermelho C/ 4 Motores - Arduino






Starter Kit Avançado (com Arduino Uno REV3 Original)

PRINCIPAIS TIPOS DE ARDUINOS



 Arduino UNO
(
Existem várias versões de Arduino UNO como UNO SMD, UNO R2 e o último UNO R3)

Microcontrolador
ATmega328
Tensão de operação
5V
Tensão de entrada (recomendada) 
7-12V
Tensão de entrada (limites)
6-20V
Pinos de I/O Digitais
14 (6 deles com saída PWM)
Pinos Analógicos
6
Corrente CC  por I/O Pino
40 mA
Corrente do Pino 3.3V
50 mA
Memória Flash
32 KB (ATmega328) 0.5 KB usado pelobootloader
SRAM
2 KB (ATmega328)
EEPROM
1 KB (ATmega328)
Velocidade do Clock
16 MHz

     Ele é ideal para quem está começando com essa placa, muita gente que começa as vezes querem já fazendo projetos grandes ou pequenos para ver sua capacidade. Com certeza, caso o projeto não for muito elaborado e que precise usar todas as portas, acho um pouco difícil, esse é ótimos para os iniciantes e para quem já usa normalmente.
"Uno" significa um em italiano e é nomeado para marcar o lançamento do Arduino1.0

Arduino MEGA
(
Existem outras versões também como MEGA UNO, MEGA R3)


Microcontrolador
ATmega2560
Tensão de operação
5V
Tensão de entrada (recomendada) 
7-12V
Tensão de entrada (limites)
6-20V
Pinos de I/O Digitais
54 (14 deles com saída PWM)
Pinos Analógicos
16
Corrente CC  por I/O Pino
40 mA
Corrente do Pino 3.3V
50 mA
Memória Flash
256 KB (ATmega2560) 8 KB usado pelobootloader
SRAM
8 KB (ATmega2560)
EEPROM
4 KB (ATmega2560)
Velocidade do Clock
16 MHz


    O arduino mega possui bem mais portas, ótimo para projetos grandes que utilizariam muitas portas e também usar até os shields sem que atrapalhe no mesmo. Exemplo de projeto com isso é automatizar uma casa com ele, casa porta controlar um Relé para acionar as tomas, lâmpadas, etc.

Arduino ADK


Microcontrolador
ATmega2560
Tensão de operação
5V
Tensão de entrada (recomendada) 
7-12V
Tensão de entrada (limites)
6-20V
Pinos de I/O Digitais
54 (14 deles com saída PWM)
Pinos Analógicos
16
Corrente CC  por I/O Pino
40 mA
Corrente do Pino 3.3V
50 mA
Memória Flash
256 KB (ATmega2560) 8 KB usado pelobootloader
SRAM
8 KB (ATmega2560)
EEPROM
4 KB (ATmega2560)
Velocidade do Clock
16 MHz

     
A diferença do ADK para o Arduino MEGA em si é que o ADK possui uma porta USB que serve para ligar em aparelhos que possua Android. Essa placa serve para projeto que tenha interação com o Android.

Arduino Leonardo
(Essa placa é a mais recente, foi criada a pouco tempo)

Microcontrolador
ATmega32U4
Tensão de operação
5V
Tensão de entrada (recomendada) 
7-12V
Tensão de entrada (limites)
6-20V
Pinos de I/O Digitais
20 (7 deles com saída PWM)
Pinos Analógicos
12
Corrente CC  por I/O Pino
40 mA
Corrente do Pino 3.3V
50 mA
Memória Flash
32 KB (ATmega32U4) 4 KB usado pelobootloader
SRAM
2,5 KB (ATmega32U4)
EEPROM
1 KB (ATmega2560)
Velocidade do Clock
16 MHz
   
  Essa placa é recente, serve para quem já está acostumado com o Arduino pois na programação criaram mais funções com ele, como usar a placa como teclado ou mouse. Outra coisa que difere das outras placas é que o processamento dele é mais rápido 32U4 sendo que os outros são 8U2.

O QUE O ARDUINO PODE FAZER?

Arduino pode perceber o ambiente ao receber a entrada de uma variedade de sensores, módulos ou Shields e pode afetar seus arredores por luzes de controle, motores e outros atuadores. O microcontrolador na placa é programado usando a linguagem de programação Arduino em Wiring e o ambiente de desenvolvimentoArduino. Projetos Arduino podem ser stand-alone ou podem comunicar com software rodando em um computador como: Flash, ProcessingMaxMSP.

As placas podem ser construídas à mão ou comprados pré-montado, o software pode ser baixado gratuitamente no site oficial (www.arduino.cc). Os designs de referência do hardware são disponíveis sob uma licença de código aberto, sendo livre para adequá-los aos usuários.

arduino de forma tão rápida conquistou mercado seleto que mais de 50 mil placas open source foram vendidas e rendeu um documentário de 2010 sobre a trajetória de desenvolvimento da plaquinha. As unidades são constituídas por controladora AtmelAVR de 8 bits, pinos digitais e analógicos de entrada e saída, entrada USB – o que permite conexão com computadores – ou serial e possui código aberto, que quando modificado, dá origem a outros derivados “ino” – que por questões comerciais – levam nomes como NetduinoProduino e Garagino. A placa Arduino não possui recursos de rede, mas pode ser combinada com outros Arduinos criando extensões chamadas deshields.

A tensão de entrada usada é entre 7 volts e máximo de 35 volts com corrente mínima de 300mA. A placa e demais circuitos funcionam com tensões entre 5 e 3,3 volts. Embutido no Arduino há ainda um firmware – que combina memória ROM para leitura e um programa gravado neste tipo de memória – carregado na memória da placa controladora, que aceita Windows, Linux e Mac OS X.
Em termos de software, o Arduino pode ter funcionalidades desenvolvidas por meio da linguagem C/C++, que utiliza uma interface gráfica escrita em Java. As funções IDE doArduino permitem o desenvolvimento de software que possa ser executado pelo dispositivo. A versão mais atualizada até o momento é a 1.0.5.

Com ele pode-se produzir automação de casas, acender luzes por meio da controladora ou projetos mais ousados como robo4wd (projeto universitário), BiometricSecurity Toy Box, que une a biometria, mais especificamente a ideia do novo sensor de identidade digital da Apple, o Touch ID do iPhone 5S, ao Arduino.