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;
}
}
sexta-feira, 28 de setembro de 2018
quinta-feira, 27 de setembro de 2018
Uso de sensores analógico #2 - Buzzer
Marcadores:
Computação Física
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
Marcadores:
Computação Física
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
Marcadores:
Computação Física
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);
}
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
Marcadores:
Computação Física
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
Marcadores:
Computação Física
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
Marcadores:
Computação Física
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);
}
}
}
Assinar:
Postagens (Atom)