Social Icons

Jeremy Blum Projects - Arduino Parte [2]

Você que ainda não viu á parte 1 clique aqui!

Nesse Video trataremos sobre:

--> Saídas PWM e I/O
--> LED
--> Protoboard
--> Botões
--> ON/OFF Sem Ruídos







Código 1:

/*
Arduino Tutorials
Episode 2
Switch1 Program
Written by: Jeremy Blum
*/
int switchPin = 8;
int ledPin = 13;
void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}
void loop()
{
  if (digitalRead(switchPin) == HIGH)
  {
    digitalWrite(ledPin, HIGH);
  }
  else
  {
    digitalWrite(ledPin, LOW);
  }
}


----------------------------------------------------------------------
 Código 2

/*
Arduino Tutorials
Episode 2
Switch Program
Written by: Jeremy Blum
*/
int switchPin = 8;
int ledPin = 13;
boolean lastButton = LOW;
boolean ledOn = false;
void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}
void loop()
{
  if (digitalRead(switchPin) == HIGH && lastButton == LOW)
  {
    ledOn = !ledOn;
    lastButton = HIGH;
  }
  else
  {
    //lastButton = LOW;
    lastButton = digitalRead(switchPin);
  }
 
  digitalWrite(ledPin, ledOn);
}

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

Código 3;

/*
Arduino Tutorials
Episode 2
Switch3 Program (debounced)
Written by: Jeremy Blum
*/
int switchPin = 8;
int ledPin = 13;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}
boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(5);
    current = digitalRead(switchPin);
  }
  return current;
}
void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    ledOn = !ledOn;
  }
  lastButton = currentButton;
  digitalWrite(ledPin, ledOn);
}

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

Código 4;

/*
Arduino Tutorials
Episode 3
Switch4 Program (pwm)
Written by: Jeremy Blum
*/
int switchPin = 8;
int ledPin = 11;
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0;

void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}
boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(5);
    current = digitalRead(switchPin);
  }
  return current;
}
void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    ledLevel = ledLevel + 51;
  }
  lastButton = currentButton;
  if (ledLevel > 255) ledLevel = 0;
  analogWrite(ledPin, ledLevel);
}

Jeremy Blum Projects - Arduino Parte [1]



Achei esse cara pesquisando por ai ele cria VideoAulas toda semana sobre arduino e como criar coisas passo a passo muito simples e fácil.
Já esta na semana 11 mas eu colocarei aqui pouco à pouco por falta de tempo.
Para quem não entende inglês estarei explicando abaixo basicamente o que ele fez, mesmo sendo extremamente intuitivo o video não precisando necessariamente de tradução mas...

Episódio 1
Esse Episódio em específico trata sobre:

--> Arduino
--> LED
--> C/C++
--> Efeitos Pisca-Pisca (Blink no arduino.cc)

Após o video todos os código que precisara e circuitos:





/*
Jeremy's First Program
It's awesome!
*/

int ledPin = 13;

void setup()
{
  //initialize pins as outputs
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

6.2.1) Arduino + Mouse PS2 + Servo Simples [Parte 2 e 3]


Parte 2 e 3 do meu projeto com arduino e um mouse ps2.
Na primeira tentativa, testei com o mouse sem ter uma interface com o computador, direto com o arduino.
Então comecei a pesquisar no site oficial do Arduino, por uma interface entre o mouse, o computador e o arduino. Descobri uma maneira de interligar tudo isso, a partir de um tal de Processing.
Processing, não sei dizer ao certo sua denominação, porém ele pode fazer a comunicação do computador com uma placa arduino, pois ele consegue acessar e usar a porta paralela do pc para mandar informações e para receber, testei e logo posto aqui um potenciômetro que regula uma cor na tela do PC que seria o de mandar informações do arduino pro PC. Do mesmo jeito que o SerialMonitor do sketch do arduino faz, mas com uma sofisticação maior.
Inicialização muito parecida com a do arduino.
Para fazer esta comunicação (interface), você deve fazer o download da biblioteca processing em, biblioteca processing.
Ele roda tanto no Linux quanto no Windows e MacOS, usei ja no Windows e no Ubuntu funcionou perfeito.
Depois de ter feito o download, siga os seguintes passos:
  • Descompacte a biblioteca e copie a pasta “arduino” dentro da sub-pasta “bibliotecas” do seu sketchbook do seu processing. (Você pode achar o diretório de seu sketchbook abrindo as preferências do processing. Se você não tiver uma sub-pasta “biblioteca” em seu sketchbook, crie uma!)
  • Rode o arduino, abra Exemplos > StandardFirmata sketch, e faça o upload para a placa.
  • Configure o processing com o serial em: http://processing.org/reference/libraries/serial/
  • Dentro do processing, abra um dos exemplos que vem junto da biblioteca arduino.
  • Edite o exemplo para acertar a porta serial.
  • Rode o exemplo.
Pronto esta configurado!

Como já sabemos um pouco sobre cada módulo e o necessário para iniciarmos nossa experiência com estes componentes, vamos ao que interessa!

Primeiramente devemos escrever o código no Arduino (está comentado linha a linha):
 

#include<servo.h> //inicializa biblioteca servo

Servo servo1; Servo servo2; cria o objeto servo 1 e 2

void setup() {
pinMode(1,OUTPUT);
servo1.attach(14); //pino analógico 0
servo2.attach(15); //pino analógico 1
Serial.begin(19200); //inicia comunicação serial
Serial.println("Preparado"); //imprime na tela do computador
}
void loop() { // o void loop ainda está um pouco
// complicado para eu poder explicar.
static int v = 0;
if ( Serial.available()) {
char ch = Serial.read();
switch(ch) {
case '0'...'9':
v = v * 10 + ch - '0';
break;
case 's':
servo1.write(v);
v = 0;
break;
case 'w':
servo2.write(v);
v = 0;
break;
case 'd':
servo2.detach();
break;
case 'a':
servo2.attach(15);
break;
}
}
}

Assim sendo, grave o sketch no arduino e partiremos para a próxima etapa, o processing.

Depois de instalado o processing (post anterior) e já ter feito o upload do sketch para o arduino, compile este programa dentro do processing:

import processing.serial.*;
int gx = 15; //declaração das variáveis de processo
int gy = 35;
int spos=90; //esta é a variável que controla o servo 1 ou 2
//repare que ela já recebe o num. 90, o que indica
//que o servo irá inicializar em 90°!
float leftColor = 0.0;
float rightColor = 0.0;
Serial port;
void setup()
{
size(720, 720);
colorMode(RGB, 1.0);
noStroke();
rectMode(CENTER);
frameRate(100);
println(Serial.list()); // List COM-ports
port = new Serial(this, Serial.list()[2], 115200);
//esta linha é muito importante para a comunicação serial
//em Serail.list()[2] troque o 2 pelo número do indice da porta "COM"
//que esta se comunicando com o arduino. Em 115200 é a velocidade
//que ela se comunica, você também deve trocar este valor se diferir da
//velocidade da sua.
}
void draw()
{
background(0.0);
update(mouseX);
update(mouseY);
fill(mouseX/4);
fill(mouseY/4);
rect(150, 320, gx*2, gx*2);
fill(180 - (mouseX/4));
rect(450, 320, gy*2, gy*2);
fill(180 - (mouseY/4));
}
void update(int x)
{
//Calculata a posição do servo por mouseX e mouseY
spos= x/4; spos=y/4;
//Atualiza saída do servo 1 ( de 0 a 180)
port.write("s"+spos);
//Atualiza saída do servo 2 ( de 0 a 180)
port.write("w"+spos);
// Just some graphics
leftColor = -0.002 * x/2 + 0.06;
rightColor = 0.002 * x/2 + 0.06;
gx = x/2;
gy = 100-y/2;
}



6.2) Arduino + Mouse PS2 + Servo Simples [Parte 1]

A primeira parte do projeto para vocês entenderem, o que eu demorei muito tempo, é a comunicação que o mouse faz com (no caso) o computador.
  • O periférico mouse, utiliza do protocolo PS2 para comunicação. O que significa que é uma comunicação bidirecional, com uma frequência na casa de KHz. E é muito simples! Possui 4 fios para conexão: GND, VCC, DATA e CLOCK.
  • Possui 2 acumuladores absolutos, um para o eixo X e o outro para o eixo Y. O que eles tem que fazer? Conforme movimentamos o mouse, para direita e esquerda, cima e baixo, vai se acumulando valores nestes acumuladores (que na mais são que variáveis contadoras) e assim o computador processa o valor do acumulador, setando o mouse na tela (posição).

Sendo assim, esses acumuladores possuem um range de valores de -255 à 255, e será esta informação que usaremos para controlar o servo. Imaginem só, x: -255 que seria a menor posição do acumulador x na tela do PC! E aonde ele se encontra? No último pixel a direita ou a esquerda do vídeo (depende do processamento da informação). O mesmo vale para o acumulador Y, porém ele estará acumulado (setado) no alto ou abaixo do vídeo.

Pense agora em um servo! ele pode estar em 0° ou 180°, dependendo do sinal injetado. Agora relacionamos esses dados, com os do mouse: 0° = x = -255 , 90° = x = 0 , 180° = x = 255 e assim por diante. Conseguimos então, de acordo com a posição do mouse estabelecer o angulo em que o servo deve se encontrar!

Bacana não!? Tem mais!

O mouse convencional ainda possui 3 botões: direita, esquerda e scroll! Os quais podem também ser utilizados na programação!!

Pinagem PS2:


1 - Dados
2 - Não conectado

3 - GND

4 - Vcc (+5V)
5 - Clock
6 - Não Conectado

disponível em arduino.cc

Circuito:

  • Conecte o pino Dados (data) no pino digital 5.
  • Conecte o pino Ground em qualquer GND do arduino.
  • Conecte o pino Clock no pino digital 6.
  • Conecte o pino Vcc (5V) no pino +5V na placa do arduino.

A biblioteca PS2, que serve para "interfacear" mouse e teclado conforme protocolo ps2, esta disponivel em biblioteca.ps2, no site arduino.cc.

Bom, antes de usarmos o arduino como host do mouse, e assim controlar o servo, iremos fazer o processamento do sinal do mouse para o arduino via serial (USB) e pelo computador. Utilizaremos o processing, para isto!

Mas agora essa parte fica para outro dia, pois já é fim de ano, e os exames na faculdade estão chegando! Ficar de DP, jamais!

Deixo aqui um vídeo para vocês compreenderem o projeto: