sexta-feira, 28 de setembro de 2018

7-seg LED Display

0 comentários
Nessa atividade utilizando o simulador Proteus vimos um pouco do display de 7 segmentos. Há dois tipos de display, anodo comum e catodo comum, onde o que muda é o nível do sinal para ligar o LED. Cada pino do display é referente à um led e é especificado no diagrama de cada peça.


A atividade desenvolvida em sala pedia que fosse criado um contador de 0 a 9. Mas primeiro eu precisava definir o sinal para o display. Segue o código:

byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 },  // = 0
                                 { 0,1,1,0,0,0,0 },  // = 1
                                 { 1,1,0,1,1,0,1 },  // = 2
                                 { 1,1,1,1,0,0,1 },  // = 3
                                 { 0,1,1,0,0,1,1 },  // = 4
                                 { 1,0,1,1,0,1,1 },  // = 5
                                 { 1,0,1,1,1,1,1 },  // = 6
                                 { 1,1,1,0,0,0,0 },  // = 7
                                 { 1,1,1,1,1,1,1 },  // = 8
                                 { 1,1,1,0,0,1,1 }   // = 9
                               };

void sevenSegWrite(byte var) {
  byte pin = 1;
  for (byte cont = 0; cont < 7; ++cont) {
     digitalWrite(pin, seven_seg_digits[var][cont]);
     ++pin;   
   } 


quinta-feira, 27 de setembro de 2018

Uso de sensores analógico #2 - Buzzer

0 comentários
Continuando com o esquema da postagem anterior aqui será feito um acrescimo de um Buzzer para sinais de resposta. No código foi acrescentado os tons para notas do buzzer e a utilização da função tone para trabalhar a frequência e duração dos sons do Buzzer.



Uso de sensores analógico #1 - Potenciômetro e LDR

0 comentários


Nessa atividade desenvolvemos um procedimento para leitura analógica a parte de dois dispositivos, o LDR para medir luminosidade e o Potenciômetro que funciona como uma resistência.

Nesse esquema o LDR e o Potenciomêtro controlam os LEDs de referência (verde, amarelo e vermelho). Com o seguinte código:

int btn1, btn2, ldr, pot;
int var = 0;

void setup() {
  //Pins de saída
  pinMode(3, OUTPUT); //Buzzer
  pinMode(6,OUTPUT); //LED1
  pinMode(7,OUTPUT); //LED2
  pinMode(8,OUTPUT); //LED Verde
  pinMode(9,OUTPUT); //LED Amarelo
  pinMode(10,OUTPUT); //LED Vermelho

  //Pins de entrada
  pinMode(4, INPUT); //Botão 01
  pinMode(5, INPUT); //Botão 02
  
  //Pins de entrada (analógica)
  pinMode(A0, INPUT); //Potenciômetro
  pinMode(A1, INPUT); //LDR
  
  tone(3,450,100);
  digitalWrite(8, 1);
  delay(500);
  tone(3,200,100);
  digitalWrite(8,0);
  digitalWrite(9,1);
  delay(500);
  tone(3, 450,100);
  digitalWrite(9,0);
  digitalWrite(10,1);
  delay(500);
  tone(3,600,100);
  digitalWrite(10,0);
  tone(3,450,100);

}

sexta-feira, 14 de setembro de 2018

Inputs Analógicos #2

0 comentários
Continuando para atividade de casa foi nos pedido leituras analógicas no modelo feito no proteus. Começando com o seguinte modelo:


Primeiro foi lido o valor do potenciômetro e da senoide, em seguida comparado. O objetivo é criar um ponto de aviso com o potenciômetro, e avisar quando a senoide estiver abaixo desse valor.

int pot,sen;

void setup() {
Serial.begin(9600); 
pinMode(A0, INPUT); 
pinMode(A1,INPUT);
pinMode(1, OUTPUT);

}

void loop() {
  pot = analogRead(A1);
  sen = analogRead(A0);
  if (sen <=pot){
    Serial.print("Sinal muito baixo: ");
    Serial.print(sen);
    Serial.println(" de sinal.");
    }
  delay (200);
}

Ainda no mesmo modelo foi feito a leitura do potenciômetro para indicação de uma escala de qualidade. Nesse caso eu não consegui utilizar o switch case na IDE, acabei por utilizar uma cascata de if/else.

int pot,sen;

void setup() {
Serial.begin(9600); 
pinMode(A1,INPUT);
pinMode(1, OUTPUT);

}

void loop() {
  pot = analogRead(A1);
  if (pot <= 200 && pot >= 0){
      Serial.print("Sinal ruim: ");
      Serial.println(pot);
  }
  if (pot <= 400 && pot >= 201){
      Serial.print("Sinal Bom: ");
      Serial.println(pot);
  }
  if (pot <= 600 && pot >= 401){
      Serial.print("Sinal Muito Bom: ");
      Serial.println(pot);
  }
  if (pot <= 1000 && pot >= 601){
      Serial.print("Sinal Excelente: ");
      Serial.println(pot);
  }
  if (pot >= 1001){
      Serial.print("Sinal de deus: ");
      Serial.println(pot);
  }
  delay (200);
}


Mudando para o próximo modelo o objetivo é tornar essa escala visível numa sequência de led's


A atividade pedia que UM led ficasse ativo para exibir a escala, mas eu escolhi mostrar a escala de forma crescente onde todos os led's poderiam ficar ativos. E mais uma vez não consegui utilizar o switch case.

Inputs Analógicos #1

0 comentários





Seguindo no raciocínio de sinais analógicos trabalhamos com inputs tanto no meio físico como no virtual.

O experimento consiste em ler a entrada do potenciômetro e exibir no Serial da IDE.
A atividade em sala progrediu para leitura do sinal provido do LDR


O objetivo se tornou ligar um LED utilizando como entrada o valor do LDR dependendo do ponto de aviso determinado pelo Potenciômetro. Utilizamos o seguinte código para isso:

int valor, valor2;

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

void loop() {
 valor = analogRead(A2);
 delay(200);

 valor2  = analogRead(A0);
 delay(200);
 Serial.println("Valor LDR ");
 Serial.println(valor);
 Serial.println("Valor Potenciometro ");
 Serial.println(valor2);

if (valor < valor2) {
  digitalWrite(10,HIGH);
  }
  else{
    digitalWrite(10,LOW);
  }
}

terça-feira, 11 de setembro de 2018

Conhecendo a plataforma Arduino

0 comentários





Nesse momento já saímos do ambiente de prototipação e passamos para a ferramenta Arduino e sua plataforma de desenvolvimento.

Na atividade em questão começamos a manipular INPUTs, colocando um botão que iria enviar uma mensagem para o serial. No nosso modelo utilizou um LED de referência para quando o botão fosse pressionado.

Seguindo o código:

int a = 0;
int n = 0;
void setup() {
pinMode(7, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
a = digitalRead(7);
digitalWrite(13, a);
if (a == 1) {
n++;
Serial.println(n);
delay(500);
}
}

Em seguida testamos o modelo analógico para alterar a frequência do LED. No seguinte código:

int a = 0;
void setup() {
pinMode(A0, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
a = analogRead(A0);
digitalWrite(13, HIGH);
delay(a);
digitalWrite(13, LOW);
delay(a);
Serial.println(a);
}

Plataformas de Desenvolvimento

0 comentários
O objetivo da atividade em questão era aprender sobre o ambiente de projeto do Proteus e a IDE do Arduino, e assim realizar uma integração entre ambas.

O exemplo abaixo mostra o que fora produzido em sala. Na imagem pode-se ver dois LEDs, um SWITCH e um PUSH BUTTON ligados ao arduino.


Nesse projeto foi colocado o seguinte código:

int ledPin = 13;
int ledPin2 = 10;
int inPin = 7;
int inPin2 = 4;
int val= 0;
int val2 = 0;
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);
}
void loop() {
  val=digitalRead(inPin);
  val2=digitalRead(inPin2);
  if (val == 0) {
    if (val2 == 0){
    digitalWrite(ledPin, HIGH);
    delay(100);
    digitalWrite(ledPin, LOW);
    delay(100);
    }
    else{
    digitalWrite(ledPin2, HIGH);
    delay(100);
    digitalWrite(ledPin2, LOW);
    delay(100);
    }
    }
  else {
    if (val2 == 1){
    digitalWrite(ledPin, HIGH);
    delay(500);
    digitalWrite(ledPin, LOW);
    delay(500);
    }
    else{
    digitalWrite(ledPin2, HIGH);
    delay(500);
    digitalWrite(ledPin2, LOW);
    delay(500);
    }
    }
}

O comportamento dos LEDs é definido pelo chaveamento do SWITCH e do PUSH BUTTON, eles ficam com frequências alternadas dependendo de como esteja esse chaveamento.