segunda-feira, 25 de março de 2019

Sensores Motor DC com LCD

/*
  Título: Controle de Sensores
  Nome:  Professor
  Empresa: Escola Técnica Parobé
  Data: 12/03/2019
  Versão: 0.1.0

  Descrição:

  Entradas Analógicas, Saída Analógica, Saida serial

  Este circuito lê a entrada analógica, mapeia e joga o resultado para a saida analógica com
  objetivo de controlar a rotação de um motor CC.
  Também imprime na saída serial.
 
  O circuito:

  - Potenciômetro ligado ao pino analógico A0.
    O centro do potenciômetro vai ao pino..
    Os demais lados em +5V e GND
    Motor CC , baixo consumo

  Incluir biblioteca I2C
  criado em 11/03/2019
  modificado em 22/03/2019
  Referências em: Antonio
  http://www.arduino.cc/en/Tutorial/AnalogInOutSerial
  Fim do Cabeçalho*/

// Parte 2 - Inclusáo de bibliotecas

#include <Arduino.h> // Biblioteca padrão
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Parte 3 - Planejamento - Definição dos pinos e funções

#define sensorPino A0 //  define rótulo ao pino
#define pinoSaida 13 //define ao rótulo ao pino 13
//const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);




// Parte 4 Definição de Estruturas e Variáveis

void imprimeSerial (); // declara uma estrutura de impressão
void imprimeLcd();


int valorSensor = 0;        // valor inicial do sensor
int valorSaida = 0;        // valor inicial da saída

// Parte 5faz o setup do hardware
void setup(){
Serial.begin(9600);// inicializa a porta serial- reservar pinos 0 e 1
lcd.begin(16,2);



}
// Parte 6 - função principal- corpo do programa

void loop() {

  valorSensor = analogRead(sensorPino);// lê entrada A) de o a 1023
  valorSaida = map(valorSensor, 0, 1023, 0, 255);// converte entrada para saída - resolução
  analogWrite(pinoSaida, valorSaida);//escreve na saída
 
  imprimeSerial();
  imprimeLcd();

}
// Rotina de impressão no monitor serial

void imprimeSerial () {

  Serial.print("sensor = "); // imprime a palavra sensor
  Serial.print(valorSensor);// imprime o valor da entrada
  Serial.print("\t motor = ");// tabula /t e imprime a palavra saida
  Serial.println(valorSaida);// imprime em nova linha o valor saida


  delay(2);// aguarda 2 ms

}
void imprimeLcd() {
  lcd.setCursor(0, 0);
  lcd.print("sensor = " );
  lcd.print(valorSensor);
  lcd.setCursor(0, 1);
  lcd.print ("motor =");
  lcd.print(valorSaida);


}

quinta-feira, 27 de setembro de 2018

Display 7 segmentos Anodo e Catodo Comum

/*
*_****Titulo: Aula 04****
* código sugestão
*_local: E.T.E. Parobé
*_autor:
*_data: 17/09/2018
*_versão: 2.1.0
*_
*_referências: sketch disponivel em www.arduino.cc
*/
#include <arduino.h>  //inclui a bibliotéca arduino.h
#define segA 2  //define o pino 13 como led1 segA
#define segB 3 //define o pino 12 como led2 segB
#define segC 4 //define o pino 11 como led3 segC
#define segD 5 //define o pino 10 como led4 segD
#define segE 6  //define o pino 09 como led5 segE
#define segF 7  //define o pino 08 como led7 segF
#define segG 8  //define o pino 07 como led8 segG
#define segPT 9  //define o pino 06 como led9 segPT

void setup()
{
  pinMode (2 , OUTPUT);  //define led1 como saida
  pinMode (3 , OUTPUT);  //define led2 como saida
  pinMode (4 , OUTPUT);  //define led3 como saida
  pinMode (5 , OUTPUT);  //define led4 como saida
  pinMode (6 , OUTPUT);  //define button1 como saida
  pinMode (7 , OUTPUT);  //define button2 como entrada
  pinMode (8 , OUTPUT);  //define button3 como entrada
  pinMode (9 , OUTPUT);  //define button4 como entrada
  digitalWrite(9,0);// desliga o ponto
}
void loop()
{
  //escrever (9)
  digitalWrite(segA,1);
  digitalWrite(segB,1);
  digitalWrite(segC,1);
  digitalWrite(segD,0);
  digitalWrite(segE,0);
  digitalWrite(segF,1);
  digitalWrite(segG,1);
  delay(1000);
 


 
}

terça-feira, 28 de agosto de 2018

Funções

Funções, como criar, como usar

A estrutura um skecth de arduino  deve seguir uma ordem, esta ordem tem por objetivo organizar e facilitar o entendimento:

1. Declarar as variáveis, constantes ou "apelidos"
2. Declarar / escrever funções próprias
3. Escrever a função "setup" que define I/Os, inicializa periféricos, ou seja, ajusta as configurações inicias
4. Escrever a função "loop" que cria a rotina de looping para execução do programa

O QUE SÃO FUNÇÕES.

Uma função é, em linhas gerais, uma sequência de comandos que pode ser reutilizada várias vezes ao longo de um programa. Para criar uma função e dizer o que ela faz, nós precisamos fazer uma declaração de função.

Para entender o conceito de função vamos utilizar como exemplo um led ligado ao pino 0 de um Arduino UNO que pisca.



Código para piscar um led que usaremos como exemplo

 


/*
  Objetivo: entender o uso de funções
  Passo 1 - Exemplo de uma atividade: piscar um led ligado ao pino 0
*/

#define led_saida 0   // cria um apelido "led_saida" para o valor 0 (pino 0)

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  digitalWrite(led_saida, HIGH);  // liga o led. Coloca nível de tensão alto no pino 0
  delay(1000);                    // espera 1 segundo
  digitalWrite(led_saida, LOW);   // desliga o led. Coloca nível de tesão baixo no pino 0
  delay(1000);                    // espera 1 segundo
}

 



Criando uma função
Note que na função loop temos os comandos que fazem a ação, ou seja, o led piscar
Poderíamos substitui esse conjuntos de comandos a associar a eles um "nome" que permitisse lembrar o que esses comandos fazem (piscar o led).
Abaixo o código para piscar um led com os comandos colocados dentro de uma função

 



/*

  Objetivo: entender o uso de funções
  Passo 2 - Criar uma função que execute alguns comandos
*/

#define led_saida 0   // cria um apelido "led_saida" para o valor 0 (pino 0)

void pisca_led (void){
  digitalWrite(led_saida, HIGH);   // liga o led. Coloca nível de tensão alto no pino 0
  delay(1000);                               // espera 1 segundo
  digitalWrite(led_saida, LOW);    // desliga o led. Coloca nível de tesão baixo no pino 0
  delay(1000);                               // espera 1 segundo
}

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  pisca_led();  // executa os comandos que faão o led piscar
}

 


Colocando um parâmetro
Que tal se fosse possível controlar o tempo de on/off do led piscante?
para isso basta passar um dado que indique esse tempo. Aqui este dados é chamado de parâmtero
Abaixo o código para piscar um led com os comandos colocados dentro de uma função recebendo um parâmetro de tempo em segundos

 


/*
  Objetivo: entender o uso de funções
  Passo 3 - Criar uma função que execute alguns comandos recebendo um parâmetro de tempo
*/

#define led_saida 0   // cria um apelido "led_saida" para o valor 0 (pino 0)

void pisca_led (int segundos){
  digitalWrite(led_saida, HIGH);   // liga o led. Coloca nível de tensão alto no pino 0
  delay(1000 * segundos);                               // espera quantos segundos foram passados
  digitalWrite(led_saida, LOW);    // desliga o led. Coloca nível de tesão baixo no pino 0
  delay(1000 * segundos);                               // espera quantos segundos foram passados
}

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  pisca_led(2);  // executa os comandos que farão o led piscar com 2 segundos de tempo on e off
}

 



Trabalhando com mais parâmetros
Poderíamos controlar os tempo de on e off?
Para isso basta passar o tempo de on e o tempo de off.
Abaixo o código para piscar um led com os comandos colocados dentro de uma função recebendo dois parâmetros de tempo para on e off em segundos

 


/*
  Objetivo: entender o uso de funções
  Passo 4 - Criar uma função que execute alguns comandos recebendo dois parâmetros de tempo on e off
*/

#define led_saida 0   // cria um apelido "led_saida" para o valor 0 (pino 0)

void pisca_led (int segundos_on, int segundos_off){
  digitalWrite(led_saida, HIGH);   // liga o led. Coloca nível de tensão alto no pino 0
  delay(1000 * segundos_on);                               // espera quantos segundos de on foram passados
  digitalWrite(led_saida, LOW);    // desliga o led. Coloca nível de tesão baixo no pino 0
  delay(1000 * segundos_off);                               // espera quantos segundos de off foram passados
}

void setup() {  // função executada uma única vez quando pressionado o reset
  pinMode(led_saida, OUTPUT); // inicializa o pino 0 como saída
}

void loop() { // função que fará o programa rodar executar as instruções listadas repetidas vezes
  pisca_led(3,2);  // executa os comandos que farão o led piscar com 3 segundos de tempo on 2 segundos de tempo off
}

 

ATIVIDADE:

Utilizando a função delay (que gera um atraso de 1ms) construa um skech com:
uma função que gere múltiplos de 1s
pisque um led utilizando essa função, com tempos de ON=1s e OFF=2s