terça-feira, 3 de janeiro de 2017

Você conhece o arduino? Não?





Bom! aqui eu explicarei de forma clara e sucinta o que é o Arduíno e o que podemos fazer como ele. Se procurar no Google ou na Wikipedia irá encontrar a definição de que é "uma plataforma open-source de prototipagem eletrônica com hardware e software flexíveis e fáceis de usar, destinado a artistas, designers, hobbistas e qualquer pessoa interessada em criar objetos ou ambientes interativos.” 

Você pode até refletir nisso se quiser, e realmente é uma definição abrangente, assim como o Arduíno o é. Mas prefiro dizer que é uma ferramenta que podemos utilizar para desenvolver projetos ou soluções diversas em eletrônica, e o mesmo pode nos abrir caminhos para criação de soluções em diversas necessidades ou facilitações do nosso dia a dia. Como acredito que o exemplo é a melhor maneira de se aprender algo, vou mostrar alguns para entendermos melhor o potencial desta ferramenta.

Podemos criar controles diversos como:
- Ligar e desligar uma ou diversas Lâmpadas;
- Abrir uma porta ou um portão eletrônico utilizando um botão, um tablet ou celular;
- Enviar um sinal pelo Bluetooth do celular para o Arduíno controlar uma saída (como por exemplo ligar um ou mais relés);
- Controlar um robô seguidor de linha ou um que ande sem trombar em nada utilizando um sensor ultrassônico.

Como o Arduíno possui diversos pinos que chamamos de I/O, ou seja, pinos de entrada e saída, podemos através destes criar infinitas soluções. Imaginem que quando recebe um dado qualquer pelo pino de entrada (como exemplo ao pressionarmos um botão o mesmo enviará um sinal para o pino do Arduíno), o Arduíno receberá este dado e de acordo com a programação que fizermos ele vai criar uma resposta (processar) para aquela entrada, gerando uma saída em um pino de saída (por exemplo enviar um sinal para acionar um relé e ligar uma Lâmpada) e através deste simples processamento das portas, podemos criar inúmeras soluções. É claro que as portas do Arduíno não enviam e recebem sinais apenas, elas podem ser temporizadas, podem receber tensões analógicas para se trabalhar com estas variações de tensão, pode gerar saídas em PWM (que explicarei em outro tópico). E assim aumentarmos a quantidade de coisas que podemos fazer com o Arduíno.

Para entender melhor, vou explicar passo a passo o funcionamento do "Blink" primeiro projetinho que normalmente fazemos para o Arduíno, mas com uma pequena alteração que fiz que em vez de piscar um led, eu coloco dois leds para piscar alternadamente.

Primeiramente monte o circuito abaixo:

Material:
- 1 Arduíno UNO;
- 2 resistores de 150 ohms;
- 2 leds.

Ligue um fio nos pinos 13 e 12 nos ânodos (perninha maior) dos LEDs como mostra a figura, depois ligue cada um dos resistores em cada um dos cátodos (perninha menor) dos LEDs, e ligue a outra perninha dos resistores no terrra (GND).



Este aqui é o Sketch (o programinha), é ele que vai ensinar o que o Arduíno deve fazer com suas portas, no caso os pinos digitais 12 e 13. Este programa é carregado na IDE do Arduíno que você instala em seu computador e transfere o mesmo através da porta USB do computador para o Arduíno. Você pode baixar pelo endereço: https://www.arduino.cc/en/Main/Software


// esta é a função de setup, ela é a primeira função a ser chamada no Arduíno, é executada uma única // vez:
void setup() 
{
  pinMode(13, OUTPUT); //define o pino 13 como saída
  pinMode(12, OUTPUT); //define o pino 12 como saída
}

// esta é a função loop e é executada até que seja resetado o Arduíno.
void loop() 
{
  digitalWrite(13, HIGH);   //coloca o pino 13 em nível lógico 1, ou seja, liga o LED            
  digitalWrite(12, LOW);    //coloca o pino 12 em nível logico 0, ou seja, desliga o LED
  delay(1000);   //aguarda 1 segundo
  digitalWrite(12, HIGH);   //coloca o pino 12 em nível lógico 1, ou seja, liga o LED            
  digitalWrite(13, LOW);   //coloca o pino 13 em nível logico 0, ou seja, desliga o LED
  delay(1000); //aguarda 1 segundo
} //inicia o loop novamente, assim ficam piscando os LEDs intermitentemente e continuamente.


Abraço a todos e até a próxima.


quarta-feira, 21 de dezembro de 2016

Curso de Arduino em Rio Claro


Módulo - INICIANTE
Apresentação do Arduino
Alimentação do Arduino
Arduino Uno
IDE e sua instalação
Configuração da IDE
Primeiro Sketch – Blink
Ambiente Autodesk Circuits - circuits.io
Sketch - Semáforo interativo
Sketch - Liga LED com botão utilizando o PULLUP interno

quinta-feira, 9 de julho de 2015

Projeto que envia mensagens para um display através do celular, mostra horas e liga 8 relés.

Telas criadas pelo Editor do OSC


Marcia e Davi, aparecem na primeira linha do display quando acionado o push da tela do celular, e as outras mensagens na segunda linha substituindo a anterior a cada toque.


Nestas telas também envia a hora para o display e liga relés











sexta-feira, 3 de julho de 2015

Criando um relógio com Arduíno Mega, um RTC e um display


Biblioteca virtuaborixRTC

//Programa: Imprime data e hora no display lcd 16x2
//Baseado no virtuabotixRTC
//Biblioteca virtuabotixRTC
#include <virtuabotixRTC.h>        
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
// Determina os pinos ligados ao modulo
// RTC(clock, data, rst)
virtuabotixRTC RTC(6, 7, 8);
//Meu Logo
byte a[8]= {B11111,B11111,B11000,B11111,B11111,B00000,B00000,B00000,};
byte b[8]= {B11111,B11111,B10001,B11011,B11011,B11011,B11111,B11111,};
byte c[8]= {B11111,B11111,B00011,B11111,B11111,B00000,B00000,B00000,};
byte d[8]= {B11111,B11011,B11011,B11011,B11011,B11011,B11011,B11111,};


void setup()
{

  lcd.init();                    
  lcd.backlight();
  lcd.createChar(1, a);
  lcd.createChar(2, b);
  lcd.createChar(3, c);
  lcd.createChar(4, d);
  //Coloca meu logo no final do display, utilizando as colunas 13, 14 e 15
  lcd.setCursor(13,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(1); //Escreve o simbolo
  lcd.setCursor(14,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(2); //Escreve o simbolo
  lcd.setCursor(15,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(3); //Escreve o simbolo
  lcd.setCursor(14,1); //Coloca o cursor na coluna 0, linha 0
  lcd.write(4); //Escreve o simbolo


  // Informacoes iniciais de data e hora
  /*depois da data e hora ajustada, comente a linha abaixo e compile novamente,
  ou seja, a hora ja foi armazenada no RTC e agora se você "recompilar"
  a hora e a data já estão em andamento.
  O Macete é colocar a hora com um minuto adiantado e quado chegar a três segundos antes
  da hora que você ajustou clique para carregar, depois é só recompilar comentando a linha
  abaixo
  */
  // (segundos, minutos, hora, dia da semana, dia do mes, mes, ano)
  //RTC.setDS1302Time(00, 47, 20, 6, 03, 07, 2015);
}

void loop()
{
  // Le as informacoes do CI
  RTC.updateTime();

  // Imprime as informacoes no serial monitor
  lcd.setCursor(0,0);
  //Serial.print("Data: ");
  // Chama a rotina que imprime o dia da semana
  printdayofweek(RTC.dayofweek);
  //lcd.print(" ");
  lcd.print(RTC.dayofmonth);
  lcd.print("/");
  lcd.print(RTC.month);
  lcd.print("/");
  lcd.print(RTC.year);
  lcd.setCursor(0,1);
    // Adiciona um 0 caso o valor da hora seja <10
  if (RTC.hours < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.hours);
  lcd.print(":");
  // Adiciona um 0 caso o valor dos minutos seja <10
  if (RTC.minutes < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.minutes);
  lcd.print(":");
  // Adiciona um 0 caso o valor dos segundos seja <10
  if (RTC.seconds < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.seconds);
  delay( 1000);
}

void printdayofweek(int day)
{
  switch (day)
  {
    case 1:
    lcd.print("Sun");
    break;
    case 2:
    lcd.print("Mon");
    break;
    case 3:
    lcd.print("Tue");
    break;
    case 4:
    lcd.print("Wed");
    break;
    case 5:
    lcd.print("Thu");
    break;
    case 6:
    lcd.print("Fri");
    break;
    case 7:
    lcd.print("Sat");
    break;
  }
}



quinta-feira, 2 de julho de 2015

Sensor de temperatura e umidade com arduino e um display

 Ligação de um Display lendo temperatura e umidade pelo sensor.

Com controle de backlight


Segue Sketch
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 22  //pino com o sinal do sensor   
#define DHTTYPE DHT11 

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,16,2);

void setup(void) {
  lcd.init(); 
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("TK Control");
  dht.begin();
}

void loop() {
  
  float temperature, humidity;
  humidity = dht.readHumidity();
  temperature = dht.readTemperature();
  delay(2000); 

 lcd.clear();
 char tempF[6]; 
 char humF[6];
 dtostrf(temperature, 5, 1, tempF);
 dtostrf(humidity, 2, 0, humF);
 lcd.setCursor(0,0);
 lcd.print("Temp:"); 
 lcd.print(tempF);
 lcd.print((char)223);
 lcd.print("C ");
 lcd.setCursor(0,1);
 lcd.print("Umid: ");
 lcd.print(humF);
 lcd.print("%");
 delay(3000);
 lcd.setCursor(0,0);
 lcd.print("você está vendo");
 lcd.setCursor(0,1);
 lcd.print("a temperatura    ");
 delay(3000);
 lcd.setCursor(0,0);
 lcd.print("Em Rio Claro     ");
 lcd.setCursor(0,1);
 lcd.print("                 ");
}





RFID com arduino mega, aqui funciona!!!

Montei um arduino mega com o módulo RFID, que permite ligar um relé ao passar o cartão correto e mostra as informações no display 16x2 serial.







Segue a pinagem de deve ser usada para o MEGA
  MOSI  D51  
  MISO  D50  
  SCK    D52  
  SS       D53


segue o sketch
//==============================================
//Sketch do RFID com arduino mega
//==============================================
#include <SPI.h>
#include <Wire.h> 
#include <RFID.h>
#include <LiquidCrystal_I2C.h>
#define RST 9
#define SS 53
RFID rfid(SS, RST);
LiquidCrystal_I2C lcd(0x27,16,2);
int porta_rele1 = 2;

//==============================================
//Aqui coloquei minha logo que ficará no canto direito do display
//==============================================
byte a[8]= {B11111,B11111,B11000,B11111,B11111,B00000,B00000,B00000,};
byte b[8]= {B11111,B11111,B10001,B11011,B11011,B11011,B11111,B11111,};
byte c[8]= {B11111,B11111,B00011,B11111,B11111,B00000,B00000,B00000,};
byte d[8]= {B11111,B11011,B11011,B11011,B11011,B11011,B11011,B11111,};

void setup()
  pinMode(porta_rele1, OUTPUT); 
  digitalWrite(porta_rele1, LOW);
  lcd.init(); // initialize the lcd 
  lcd.backlight();
  SPI.begin(); 
  rfid.init();
  lcd.createChar(1, a); 
  lcd.createChar(2, b); 
  lcd.createChar(3, c); 
  lcd.createChar(4, d); 
  
  lcd.setCursor(13,0); //Coloca o cursor na coluna 13, linha 0
  lcd.write(1); //Escreve o simbolo 
  lcd.setCursor(14,0); //Coloca o cursor na coluna 14, linha 0
  lcd.write(2); //Escreve o simbolo 
  lcd.setCursor(15,0); //Coloca o cursor na coluna 15, linha 0
  lcd.write(3); //Escreve o simbolo 
  lcd.setCursor(14,1); //Coloca o cursor na coluna 14, linha 1
  lcd.write(4); //Escreve o simbolo

}
void loop()
{   
   String conteudo= "";
    if (rfid.isCard()) 
    {
//mude aqui com o numero do cartão que quer que ligue o relé
        if (rfid.readCardSerial()&& rfid.serNum[0]==157 && rfid.serNum[1]==25 && rfid.serNum[2]==144 && rfid.serNum[3]==85 && rfid.serNum[4]==65)
        { 
        lcd.setCursor(0,0);     
        lcd.print("Reconhecido ");
          lcd.setCursor(0,1);     
          lcd.print("Liga Rele ");
          
          digitalWrite(porta_rele1, HIGH);
          delay (3000);
          digitalWrite(porta_rele1, LOW);
          lcd.setCursor(0,0);     
          lcd.print("PASSE      ");
          lcd.setCursor(0,1);     
          lcd.print("O CARTAO ");
        }
        else
        { 
          lcd.setCursor(0,0);
          lcd.print("Recusado    ");
          lcd.setCursor(0,1);
          lcd.print("            ");
          delay (2000);
          lcd.setCursor(0,0);
          lcd.print("PASSE      ");
          lcd.setCursor(0,1);     
          lcd.print("O CARTAO ");
        }
    }
    rfid.halt();
  delay(10);
}