Arquitetura de de Computadores Computadores
Arduino
Desafio
Material utilizado Porta digital 10 Protoboard Resistor Led Verde erd e
Utilize a porta 10 e o Protoborad Protoborad para ligar l igar o Led, com o mesmo programa anterior, Somente alterando a porta
Programando
int ledPin = 10;
void setup()
{
// LED conectado ao pino digital 13
pinMode(ledPin, OUTPUT);
}
void loop()
{
// configura pino digital como saída
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000);
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000);
}
// temporiza 1 segundo // aguarda mais um segundo
Desafio II
Construa o simulador de um semáforo utilizando VBB, com 3 leds (verde, amarelo e vermelho) utilizando 3 portas digitais. Simular a sequencia de abertura, atenção e vermelho, sendo que o sinal de atenção necessita de menos tempo !
Semáforo
Código
int ledDelay = 5000; int redPin = 10; int yellowPin = 9; int greenPin = 8; void setup () {
pinMode (redPin , OUTPUT ); pinMode ( yellowPin , OUTPUT ); pinMode ( greenPin , OUTPUT );
}
void loop () {
digitalWrite ( redPin , HIGH ); delay ( ledDelay ); digitalWrite ( yellowPin , HIGH ); delay (2000) ;
Código
}
digitalWrite ( greenPin , HIGH ); digitalWrite ( redPin , LOW); digitalWrite ( yellowPin , LOW); delay ( ledDelay );
digitalWrite ( yellowPin , HIGH ); digitalWrite ( greenPin , LOW); delay (2000) ; digitalWrite ( yellowPin , LOW);
Botões
O interruptor momentâneo é um componente que conecta dois pontos de um circuito ao pressioná-lo. Conectamos dois fios à placa Arduino. O primeiro vai de um dos terminais do interruptor ao GND. O segundo vai do outro terminal do interruptor até o pino digital 2 do Arduino
Botões
Quando o interruptor está livre (não pressionado), não há conexão entre os seus dois terminais, de forma que o pino do Arduino está conectado aos 5V (via o resistor de pull-up) e ao ler o pino, obtemos HIGH. Quando o interruptor é fechado (pressionado), ocorre a conexão entre seus terminais, de forma que o pino do Arduino é ligado ao GND e obtemos LOW.
(O pino ainda se mantém conectado aos 5 volts, mas o resistor de pull-up faz com que o pino esteja mais próximo do GND.)
Botão - Conexões
Botão - Conexões
Botão – Conexões
Botão - Código
int ledPin = 8; // escolha o pino para o LED int inPin = 2; // escolha o pino de entrada (para o interruptor) int val = 0; // variável para ler o estado do interruptor void setup() { pinMode(ledPin, OUTPUT); // declara-se o LED como saída pinMode(inPin, INPUT); // declara-se o interruptor como entrada } void loop(){ val = digitalRead(inPin); // ler o valor de entrada if (val == HIGH) { // verificar se a entrada é HIGH (interruptor livre) digitalWrite(ledPin, LOW); // desligar LED } else { digitalWrite(ledPin, HIGH); // ligar LED } }
Potênciometro
Código
int potPin = 2; // selecione o pino de entrada ao potenciômetro int ledPin = 13; // selecione o pino ao LED int val = 0; // variável a guardar o valor proveniente do sensor void setup() { pinMode(ledPin, OUTPUT); // declarar o pino ledPin como saída } void loop() { val = analogRead(potPin); // ler o valor do potenciômetro digitalWrite(ledPin, HIGH); // ligar o ledPin delay(val); // pausar o programa por algum tempo digitalWrite(ledPin, LOW); // desligar o ledPin delay(val); // pausar o programa por algum tempo }
Exercício – Matriz de Led
Insira 6 Leds, nas portas definidas abaixo:
2, 3, 4, 5, 6, 7
Matriz de Led
int timer = 100;
int pins[] = { 2, 3, 4, 5, 6, 7 }; // vetor com o número dos pinos
int num_pins = 6;
void setup()
{
// quantidade de LEDs (tamanho do vetor)
int i; for (i = 0; i < num_pins; i++) // elementos do vetor vão de 0 a num_pins -1 pinMode(pins[i], OUTPUT);
// Quanto maior, mais devagar.
}
// configurar cada pino como saída
Matriz de Led
void loop() { int i; for (i = 0; i < num_pins; i++) { // varrer cada pino... digitalWrite(pins[i], HIGH); // ligando-o, delay(timer); // pausando-o, digitalWrite(pins[i], LOW); // e desligando-o. } }
Exercício Matriz de Led
Utilize o mesmo exemplo, e acrescente a seguinte função: Ao completar a sequência, de ligar a matriz de Led, que ela venha ligando na ordem inversa
Acrescentar após o final do 1º FOR:
for (i = num_pins - 1; i >= 0; i--) { digitalWrite(pins[i], HIGH); delay(timer); digitalWrite(pins[i], LOW); }
LCD – Portas Digitais
LCD – Portas Analógicas
Código
#include
// Define a utilização da biblioteca para controle de telas LCD’s
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Cria um objeto LCD e atribui os pinos
void setup() {
lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas }
Código
void loop() { lcd.clear(); // Limpa o display do LCD lcd.print(“ Turma de : "); // Imprime a string no display do LCD delay(2000); // Espera 2 segundos antes de imprimir a próxima string no LCD
lcd.clear(); lcd.print(“ na aula de "); lcd.setCursor(0,1); // Posiciona o cursor na coluna 0 linha 1 do LCD lcd.print(“ Arduino "); delay(2000);
Código - Continuação
lcd.clear(); lcd.print("Disciplina"); delay(2000);
lcd.clear(); lcd.print("Arquitetura"); delay(1000);
for (int i = 0; i < 16; i++) { // Rolando o display para a esquerda 16 vezes lcd.scrollDisplayLeft(); delay(600); }
delay(3000);
}
Monitor Serial
O monitor serial é utilizado para comunicação entre o Arduino e o computador (PC). O monitor serial pode ser aberto no menu tools opção serial monitor, ou pressionando as teclas CTRL+SHIFT+M. As principais funções do monitor serial são: begin(), read(), write(), print(), println() e available().
Monitor Serial
Algumas funções bastante usadas: begin(): inicializa a comunicação entre o Arduino e um computador; read(): recebe caracteres inseridos no monitor serial; print(): imprime caracteres no monitor serial; println(): imprime caracteres no monitor serial, mas causa uma quebra de linha no final; available(): retorna o número de bytes disponíveis no buffer de leitura do monitor serial.
Monitor Serial
LCD - Portas
Note no detalhe das imagens abaixo, que a placa possui furos que permitem a soldagem de uma barra de pinos ou conectores, com isso podemos usar os pinos que sobraram : 0, 1, 2, 3, 11, 12, 13 (digitais), e A1, A2, A3, A4, A5 (analógicos), além dos pinos de energia (5v, 3.3v, GND). O pino 10 também é utilizado pela placa para uma função específica, no caso o backlight, e não deve ser utilizado nos programas.
Display LCD
#include
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// ou esse conjunto de portas
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
}
Código
void loop() { lcd.clear();
// Limpa o display do LCD
lcd.print (“Aula de Arduino"); lcd.setCursor(0,1); lcd.print(“ Turma de : "); // Imprime a string no display do LCD delay(2000); // Espera 2 segundos antes de imprimir a próxima string no LCD lcd.clear(); lcd.print(“ na aula de "); lcd.setCursor(0,1); // Posiciona o cursor na coluna 0 linha 1 do LCD lcd.print(“ Arduino "); delay(2000);
Código - Continuação
lcd.clear(); lcd.print("Disciplina"); delay(2000);
lcd.clear(); lcd.print("Arquitetura"); delay(1000);
for (int i = 0; i < 16; i++) { // Rolando o display para a esquerda 16 vezes lcd.scrollDisplayLeft(); delay(600); }
delay(3000);
}
Sensor de Luz
LDR (Light Dependent Resistor , ou Resistor Dependente de Luz).
Sensor de Luz
Ao iluminarmos um LDR, a sua resistência apresenta valores muito baixos. Ao cortarmos a iluminação, a resistência sobe. Conhecendo os princípios básicos do componente, podemos montar um circuito onde, com incidência de luz, o led se apaga, e ao cobrirmos o LDR, o led se acende :
Sensor de Luz
O programa para este circuito lê o valor da porta analógica (que deve estar na faixa de 0 a 1024), verificando se o valor é maior do que 800 (LDR encoberto) e consequentemente acendendo o led.
Sensor de Luz
Código
int portaLed = 10; //Porta a ser utilizada para ligar o led int portaLDR = A5; //Porta analógica utilizada pelo LDR
void setup() { pinMode(portaLed, OUTPUT); //Define a porta do Led como saída }
Código
void loop()
{
int estado = analogRead(portaLDR); //Lê o valor fornecido pelo LDR
// Caso o valor lido na porta analógica seja maior do que
800, acende o LED Ajuste o valor abaixo de acordo com o seu circuito
if (estado > 800)
{
digitalWrite(portaLed, HIGH);
}
else //Caso contrário, apaga o led
{
digitalWrite(portaLed, LOW); }
Código Morse
Exercício
Criar o código Morse para a palavra SOS. As seguintes regras devem ser criadas.
Os pontos devem ter a duração de 150ms ligados e intervalos de 100ms.
Os traços devem ter duração de 400ms ligados e intervalos de 100ms
Os intervalos entre as letras devem ser de 100ms.
Os intervalos entre as mensagens devem ser de 1 segundo.
Código
int ledPin = 10; // LED connectado ao terminal digital 10 // executa uma vez , quando o programa comeca void setup () { // inicializa o terminal digital como OUTPUT . pinMode (ledPin , OUTPUT ); } void loop () { // 3 `` pontos '' = S for (int x = 0; x < 3; x++) { digitalWrite (ledPin , HIGH ); // LED ligado delay (150) ; // intervalo de 150 ms digitalWrite (ledPin , LOW); // LED desligado delay (100) ; // intervalo de 100 ms }
Código
// intervalo entre as letras de 100 ms delay (100) ; // 3 `` tracos '' = O for (int x = 0; x < 3; x++) { digitalWrite (ledPin , HIGH ); // LED ligado delay (400) ; // intervalo de 400 ms digitalWrite (ledPin , LOW); // LED desligado delay (100) ; // intervalo de 100 ms } // intervalo entre as letras de 100 ms delay (100) ; // mais 3 `` pontos '' = S for (int x = 0; x < 3; x++) { digitalWrite (ledPin , HIGH ); // LED ligado delay (150) ; // intervalo de 150 ms
Código
digitalWrite (ledPin , LOW); // LED desligado delay (100) ; // intervalo de 100 ms } // intervalo de 5 segundos para transmitir o sinal novamente delay (5000) ; }