Amigos, considero esse projeto um pouco mais complexo que os últimos postados aqui não por se tratar de um código difícil, mas por envolver duas  linguagens JAVA e C(arduino) tive muitas duvidas antes de dominar a API RxTx será ela que usaremos em Java para  comunicação SERIAL com arduino, já o código para arduino é bastante simples usaremos a biblioteca  <Servo.h> que se não me engano já vem na IDE arduino versão 1.0, então vamos lá vou apresentar o material em seguida a montagem e o código de ambos.

Material necessário:

Uma observação nos outros post’s eu usei o arduino duemilanove, mas nesse usarei um arduino nano, não tem problemas pode-se usar qualquer um basta está atendo aos pinos para esse caso já que usamos pinos com PWM.

Foto do Projeto:

Esquema Elétrico:

Considerações Importante:

Na montagem do ESC  temos os pinos lógicos que são três, vermelho, preto e branco onde o preto é GND o brando é input de dados ligado ao Arduino e o vermelho não ligado fornece 5V que pode ser usado pra alimentar o arduino, mas não usaremos nesse projeto já os outros fios são eles dois de potência ligado a bateria vermelho (+) e preto (-) GND e por fim os três fios de cor preto que são ligados ao motor eles não tem uma posição definida porem são eles que determina o sentido da rotação do motor caso a rotação esteja no sentido contrario ao desejado basta inverter dois dos fios, vc verá. Agora no arduino são apenas dois fios o Preto (Lógico) no pino GND e o Branco no pino 9 digital (PWM) com isso feito não precisamos mais fazer nada na parte física, agora é só programação vamos começar pela codificação do arduino.

Código do Arduino:

#include <Servo.h>

Servo myservo;

int pos = 24;

void setup(){
Serial.begin(9600);
myservo.attach(9);
}

void loop(){

while (true){ // Bloco start motor até 40 de velocidade —-
myservo.write(pos);
delay(1000);
if (pos < 40){
pos += 2;
Serial.println(pos);
}
// Bloc de controle velocidade ————-
if(Serial.available( )> 0){
char c = Serial.read();
Serial.println(c);
pos = c;

} // Bloc de controle velocidade FIM ————- /
} // Bloco start motor FIM ———

}

O que esse código faz, vamos lá ele tem basicamente duas funções à primeira é dar partida no motor deixando ele em baixa velocidade (40) e a segunda é ficar ouvindo a porta serial, será pela serial que o programa em Java enviará os dados para o controle. Uma coisa o valor 40 não tem uma definição como se fosse Graus ou outro é apenas Velocidade mesmo que vai de 0 a 100.

Código JAVA:

Usaremos duas classes segue a primeira:

SerialCom

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ControleMotorBrushless;

import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
*
* @author Rudrigo
*/
public class SerialCom {

static InputStream input;
static OutputStream output;

public void serial(String rate, String porta) throws Exception{

int debug_rate = Integer.parseInt(rate);
String serial_port = (porta);

CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(serial_port);
SerialPort port = (SerialPort)portId.open(“serial talk”, 4000);

input = port.getInputStream();
output = port.getOutputStream();
port.setSerialPortParams(debug_rate,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

}

public void close() throws IOException{
input.close();
output.close();
input = null;
output = null;
}
}

Segue a Segunda:

JFrameControleMotor

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ControleMotorBrushless;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Rudrigo
*/
public class JFrameControleMotor extends javax.swing.JFrame {

/**
* Creates new form JFrameControleMotor
*/
public JFrameControleMotor() {
initComponents();
}

SerialCom sc = new SerialCom();

class valor extends Thread {
public void run() {
try {
while(true){
sc.output.write(jSlider1.getValue());
//System.out.println(jSlider1.getValue());
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(JFrameControleMotor.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (IOException ex) {
Logger.getLogger(JFrameControleMotor.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jTextFieldPorta = new javax.swing.JTextField();
jTextFieldRate = new javax.swing.JTextField();
jButtonStart = new javax.swing.JButton();
jButtonStop = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jSlider1 = new javax.swing.JSlider();
jLabel3 = new javax.swing.JLabel();
jTextFieldVelocidade = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(“Definição de Porta”));

jLabel1.setText(“Porta: “);

jLabel2.setText(“Rate: “);

jTextFieldPorta.setText(“COM10”);

jTextFieldRate.setText(“9600”);

jButtonStart.setText(“Start”);
jButtonStart.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonStartActionPerformed(evt);
}
});

jButtonStop.setText(“Stop”);
jButtonStop.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonStopActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldPorta, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jTextFieldRate, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(35, 35, 35)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButtonStart, javax.swing.GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE)
.addComponent(jButtonStop, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(22, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldPorta, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextFieldRate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jButtonStart)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButtonStop)))
.addContainerGap())
);

jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(“Controle”));

jSlider1.setMinimum(40);
jSlider1.setPaintTicks(true);
jSlider1.setValue(40);

jLabel3.setText(“Velocidade:”);

org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSlider1, org.jdesktop.beansbinding.ELProperty.create(“${value}”), jTextFieldVelocidade, org.jdesktop.beansbinding.BeanProperty.create(“text”));
bindingGroup.addBinding(binding);

jTextFieldVelocidade.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextFieldVelocidadeActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jSlider1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel3)
.addGap(18, 18, 18)
.addComponent(jTextFieldVelocidade, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18))))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextFieldVelocidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);

bindingGroup.bind();

pack();
}// </editor-fold>

private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

try {
String porta = jTextFieldPorta.getText();
String rate =jTextFieldRate.getText();
sc.serial(rate, porta);
Thread threadComRunnable = new Thread(new valor());
threadComRunnable.start();

} catch (Exception ex) {
Logger.getLogger(JFrameControleMotor.class.getName()).log(Level.SEVERE, null, ex);
}
}

private void jTextFieldVelocidadeActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:

}

private void jButtonStopActionPerformed(java.awt.event.ActionEvent evt) {
try {
dispose();
sc.close();
} catch (IOException ex) {
Logger.getLogger(JFrameControleMotor.class.getName()).log(Level.SEVERE, null, ex);
}
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate=”collapsed” desc=” Look and feel setting code (optional) “>
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if (“Nimbus”.equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(JFrameControleMotor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JFrameControleMotor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JFrameControleMotor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JFrameControleMotor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new JFrameControleMotor().setVisible(true);
}
});
}
// Variables declaration – do not modify
private javax.swing.JButton jButtonStart;
private javax.swing.JButton jButtonStop;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JSlider jSlider1;
private javax.swing.JTextField jTextFieldPorta;
private javax.swing.JTextField jTextFieldRate;
private javax.swing.JTextField jTextFieldVelocidade;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration
}

Essa é a tela do segundo código:

Considerações dos códigos JAVA:

A primeira classe “SerialCom” tem o objetivo de abrir a comunicação com a Serial usando a API RxTx de forma que consigamos enviar e receber dados da COM já a segunda classe JFrameControleMotor gera a interface gráfica em SWING chamando e passando parâmetros para a primeira alem disso nessa classe informamos a porta que o arduino foi reconhecido  “COM10” assim como a velocidade de comunicação que nesse caso usei a “9600” descrevendo o código um pouco o ponto mais relevante é o uso da ferramenta jSlider que chama uma Thread para executar em tempo real o controle de velocidade, não vou explicar linha a linha o código prefiro ir respondendo as duvidas que vão surgindo, deixarei um link para download de todo o código além da biblioteca RxTx, não esqueça de modela o código para o seu ambiente  nesse código eu criei uma pacote chamando “ControleMotorBrushless” vc pode mudar isso e deixar o nome que quiser, pois bem para aqueles que não têm um conhecimento básico em JAVA indico a apostila de Caelum   a FJ-11.

 

Caro Amigo espero que tenham gostado e que a descrição tenha sido boa sem duvidas, mas como todos já sabem fique avontade para pergunta, assim que puder responderei com muito prazer considero todo tipo de perguntas o mais importante é tirar sua duvida lembro quando também não sabia nada e me enrolava em pequenas coisas.

Postarei um vídeo em breve do motor funcionando….

 

Downloads dos código e API RxTx:

Link

RFID + Arduino

Publicado: janeiro 10, 2012 em Projetos Arduino

Prezados,

Segue um projeto utilizando Arduino com RFID.

Esse projeto tem a finalidade se ligar e desligar leds, com a leitura de cartões RFID, montagem simples para que vc’s apliquem suas imaginações e conhecimento para cria outros projetos legais e mais complexas.

Material necessário:

Foto do Material

Esquema Elétrico

Biblioteca <NewSoftSerial.h>

Cada tag tem uma númeração diferente no caso eu uso o “00558026”  para ser comparado com o lido, caso seja o mesmo ele entra no IF e aciona o led.

Código .pde

/* Codigo RFID Basico
By Rudrigo Lima */

#include

const byte ledPin = 13;

NewSoftSerial RFID(2, 3);
String msg;
String ID =” 00558026″;  //string to store allowed cards

void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
Serial.println(“Leitura Serial OK!”);
RFID.begin(9600);
Serial.println(“Leitura do RFID OK!”);
}

char c;

void loop(){

while(RFID.available()>0){
c=RFID.read();
msg += c;
if(msg.length()>=10){
//ID = msg;
Serial.println(msg);
Serial.println(ID);

if (msg.equals(ID)){
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
msg = “”;
break;
}
}
}
ATENÇÃO COLEGAS O CÓDIGO ACIMA ESTÁ ERRADO NÃO ATENDE O OBJETIVO, VOU CORRIGIR EM BREVE, MAS AGUARDO SUGESTÃO, TENHO ESSE CÓDIGO CORRIGIDO POREM NÃO ACHEI AGORA.

Foto do projeto montado

Sensor Ultrasonico + Arduino

Publicado: janeiro 10, 2012 em Projetos Arduino

Caros Amigos,

Já faz um tempo que não posto nada novo porem esse mês estou com muito tempo livre e por isso estarei postando alguns projetos que já montei segue um deles:

Esse projeto se trata de um sensor ultrasonico que medirá distância entre 20 cm à 2 m com intervalos de meio e meio metro, isso que dizer que a cada meio metro acende um led na sequência.

Componentes necessários:

Foto do Material

Código .pde (arduino)

/* Sensor ultrasonico basico  *
* By Rudrigo Lima                      *
*                                                         */
int leitura = 7;
long receb;

void setup(){
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}

void loop(){

pinMode(leitura, OUTPUT);
digitalWrite(leitura, LOW);

pinMode(leitura, INPUT);

receb = pulseIn(leitura, HIGH);
Serial.println(receb);
delay(100);
if (receb<2000){
digitalWrite(10, HIGH);
} else{
digitalWrite(10, LOW);
}
if (receb<4500){
digitalWrite(11, HIGH);
} else{
digitalWrite(11, LOW);
}
if (receb<6500){
digitalWrite(12, HIGH);
} else{
digitalWrite(12, LOW);
}
if (receb<8060){
digitalWrite(13, HIGH);
} else{
digitalWrite(13, LOW);
}
}

Esquema elétrico:

Fotos do projeto

Fim, espero que tenham gostado, fico a disposição para qualquer duvida.

Oi pessoal segue mais um projeto básico com Arduino, dessa vez iremos usar um controle remoto de marca Toshiba e modelo CT 7180 para controlar portas digitais nesse caso LED’s

Material necessário:

4 LED’s difusos de 3mm

5 Registores de 470 ohms (Amarelo,Violeta,Marrom)

1 Receptor IR TSOP1838 38Khz

1 Arduino Duemilanove

1 Placa de protoboard de 840 furos (Opcional)

Esquema Elétrico:

Agora segue o código comentado o objetivo dele é ligar e desligar led’s usandos as teclas CH+(Liga e desliga), CH-(Liga e desliga), VOL+(Liga e desliga),VOL-(Liga e desliga)

Código .pde

/*
Programa para leitura do infra vermelho de controle
remoto TOSHIBA CT7180, com acionamento de LED’s
*/

#include <WProgram.h> //Bibliotecas para Infra Vermelho
#include <NECIRrcv.h>
#define IRPIN 8 // Pino de entrada de dado IR

const byte ledPin10 = 10; // Variaves de pino digital de saída
const byte ledPin11 = 11;
const byte ledPin12 = 12;
const byte ledPin13 = 13;

const byte valor1 = 1;  // Variaveis Auxiliares
const byte valor2 = 1;
const byte valor3 = 1;
const byte valor4 = 1;

NECIRrcv ir(IRPIN) ;

void setup(){
pinMode(ledPin10, OUTPUT); //Setando pinos digital para saída
pinMode(ledPin11, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin13, OUTPUT);

ir.begin() ; //Inicia função IR
}

void loop()
{

unsigned long ircode=0; //Declaração de variaveis
unsigned long aux=0;

while (ir.available()) {
ircode = ir.read() ; // Leitura dos dados pino de entrada  “8”
aux=(ircode);

if (aux == 3827023680) { //Comparaçao de códigos do botão CH+ do controle remoto
if (valor1 == 1){
liga_1(); //Chamada da função liga_1
valor1=0;
}
else {
desl_1(); //Chamada da função desl_1
valor1=1;
}
}

if (aux == 3760176960) { //Comparaçao de códigos do botão CH- do controle remoto
if (valor2 == 1){
liga_2(); //Chamada da função liga_2
valor2=0;
}
else {
desl_2(); //Chamada da função desl_2
valor2=1;
}
}
if (aux == 3843735360) { //Comparaçao de códigos do botão VOL+ do controle remoto
if (valor3 == 1){
liga_3(); //Chamada da função liga_3
valor3=0;
}
else {
desl_3(); //Chamada da função desl_3
valor3=1;
}
}
if (aux == 3776888640) { //Comparaçao de códigos do botão VOL- do controle remoto
if (valor4 == 1){
liga_4(); //Chamada da função liga_4
valor4=0;
}
else {
desl_4(); //Chamada da função desl_4
valor4=1;
}
}

}
}

void liga_1(){   //função ligar led
digitalWrite(ledPin10, HIGH);
}
void desl_1(){   //função desliga o led
digitalWrite(ledPin10, LOW);
}
void liga_2(){   //função ligar led
digitalWrite(ledPin11, HIGH);
}
void desl_2(){   //função desliga o led
digitalWrite(ledPin11, LOW);
}
void liga_3(){   //função ligar led
digitalWrite(ledPin12, HIGH);
}
void desl_3(){   //função desliga o led
digitalWrite(ledPin12, LOW);
}
void liga_4(){   //função ligar led
digitalWrite(ledPin13, HIGH);
}
void desl_4(){   //função desliga o led
digitalWrite(ledPin13, LOW);
}

Link para baixar a bibliotecas usada no código e também essa tabela abaixo referente aos código de cada botão do controle remoto.

Modelo: CT 7180 *Toshiba*

|–TECLAS –|–Código HEX–|–Variavel Long–|
———————————————-
Power   |  ED12BF40    |  3977428800
Menu    |  F10EBF40    |  4044275520
Time    |  E31CBF40    |  3810312000
CH+     |  E41BBF40    |  3827023680
CH-     |  E01FBF40    |  3760176960
VOL+    |  E51ABF40    |  3843735360
VOL-    |  E11EBF40    |  3776888640
OFF/SOM   |  EF10BF40|  4010852160
S      |  EC13BF40    |  3960717120
1      |  FE01BF40       |  4261527360
2      |  FD02BF40    |  4244815680
3      |  FC03BF40    |  4228104000
4      |  FB04BF40    |  4211392320
5      |  FA05BF40    |  4194680640
6      |  F906BF40    |  4177968960
7      |  F807BF40    |  4161257280
8      |  F708BF40    |  4144545600
9      |  F609BF40    |  4127833920
0      |  FF00BF40    |  4278239040
100     |  F50ABF40    |  4111122240
A/V     |  EB14BF40    |  3944005440

Foto desse projeto montado por mim:

Olá pessoal aqui está mais um post sobre Arduino e suas diversas aplicações, bom hoje vamos montar um termômetro usando o sensor LM35DZ e mais um display de LCD 16×2 de 4 bit.

Material necessário:

Arduino Duemilanove/Uno

PC1602F Datasheet (Display)

Trimpot 10k

LM35DZ Datasheet (Sensor de Temperatura)

Esquema Elétrico:

Código .pde

/*
** TERMÔMETRO LM35 + DISPLAY LCD 16X2 **
By Rudrigo Lima

*/
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int potPin = 0;
float temp = 0;
long val=0;

void setup() {
lcd.begin(16, 2);
}

void loop(){
val = analogRead(potPin);
temp = (5*val*100/1024);       //converte voltagem em temperatura
//Serial.println ((long)temperature);
lcd.setCursor(0, 0);
lcd.print(“Rudrigo Lima”);
lcd.setCursor(13, 0);
lcd.print(millis()/1000);
lcd.setCursor(0, 1);
lcd.print(“Temperatura”);
lcd.setCursor(12, 1);
lcd.print(temp);
}

Fotos do Projeto:

Segue os Vídeos:

Olhar digital

Arduino +Iphone + PHP com WebServer

Arduino + PHP

 

Caros amigos, caso você tenha gostado exitem muitos vídeos desse no Youtube/Arduino

GPRS Shield for Arduino Vídeo turorial By Libelium

Um abraço e at+

Motor DC

Publicado: outubro 1, 2010 em Projetos Arduino

Montagem de um interface para motores de corrente continua DC

Circuito:

Código .pde

// MOTOR DC SIMPLES
// By RUDRIGO LIMA

//——————– VARIAVES ——————–//
int PortPin2 = 2;    // Motor 1
int PortPin3 = 3;    // Motor 1
int PortPin7 = 7;    // Motor 2
int PortPin8 = 8;    // Motor 2

int tempo = 1000;
int var = 0;

//————————————————–//

void setup()   {
// inicializar as portas digitais de saida:
pinMode(PortPin2, OUTPUT);
pinMode(PortPin3, OUTPUT);
pinMode(PortPin7, OUTPUT);
pinMode(PortPin8, OUTPUT);
}

void loop()  {

while (var < 10) {
drive_esquerda();    //chamada da função drive_esquerda
delay(tempo);
drive_direita();    //chamada da função drive_direita
delay(tempo);
drive_stop();    //chamada da funçao driver_stop
var++;
}

}

//——————– FUNÇÕES ——————–//

void drive_esquerda(){    //função drive_esquerda
digitalWrite(PortPin2, LOW);    //Motor 1
digitalWrite(PortPin7, LOW);    //Motor 2
digitalWrite(PortPin3, HIGH);    //Motor 1
digitalWrite(PortPin8, HIGH);    //Motor 2
}

void drive_direita(){    //função drive_direita
digitalWrite(PortPin2, HIGH);    //Motor 1
digitalWrite(PortPin7, HIGH);    //Motor 2
digitalWrite(PortPin3, LOW);    //Motor 1
digitalWrite(PortPin8, LOW);    //Motor 2
}

void drive_stop(){    //função drive_stop
digitalWrite(PortPin2, LOW);    //Motor 1
digitalWrite(PortPin7, LOW);    //Motor 2
digitalWrite(PortPin3, LOW);    //Motor 1
digitalWrite(PortPin8, LOW);    //Motor 2
}
//————————————————-//

Circuito montado por mim:

Encontrei uma página que também tem um bom tutoria com esse tema segue o link:

http://itp.nyu.edu/physcomp/Labs/DCMotorControl