Arquivo da categoria ‘Projetos Arduino’

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:

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

LDR basico

Publicado: setembro 30, 2010 em Projetos Arduino

Montagem basica do LDR

Material necessário para montagem:

1 Resistor 470 ohm  – Amarelo,Violeto, Marrom

1 Resistor 1 k – Marrom, Preto, Vermelho

1 LDR – 5mm ou maior

1 LED – 10mm

1 placa de ProtoBoard

1 Arduino

1 Fio Jump 50 cm

Código  .pde

/*# PROGRAMA MODIFICADO POR RUDRIGO LIMA #*/

int valor = 0;      // Variavel onde e guardado o valor lido do LDR
const byte ledPin = 11;   // Pino onde vamos ligar o LED
int analogin = 0;   // Pino onde vamos ligar a LDR

void setup(){

pinMode(ledPin, OUTPUT);     // Inicia A comunicação da porta 11 do led

}

void loop(){

valor = analogRead(analogin);    // O valor que irá ser lido na porta analogica numero 6 irá ser guardado na variavel “valor”
Serial.println(valor);           // Mostras no Serial Monitor o valor da variavel “valor”
delay(25);                       // Faz uma pequena pausa de 25 Mili Segundos

if (valor < 100) {               // Valor para calibragem do sensor, padrão 300
digitalWrite(ledPin, HIGH);     // acende o led da porta 10
else {
digitalWrite(ledPin, LOW);      // desligado led

}