Arduino Exercicios Resolvidos

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 46

CESUMAR CENTRO UNIVERSITRIO DE MARING

Arquitetura de Computadores

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Arduino

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Desafio
Material utilizado
Porta digital 10
Protoboard

Resistor
Led Verde
Utilize a porta 10 e o
Protoborad para ligar o

Led, com o mesmo


programa anterior,
Somente alterando a
porta

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Programando
int ledPin = 10;

// LED conectado ao pino digital 13

void setup()

{
pinMode(ledPin, OUTPUT);

// configura pino digital como sada

}
void loop()

digitalWrite(ledPin, HIGH); // liga o LED


delay(1000);
// temporiza 1 segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000);
// aguarda mais um segundo
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Desafio II
Construa o simulador de um semforo utilizando VBB, com 3 leds

(verde, amarelo e vermelho) utilizando 3 portas digitais.


Simular a sequencia de abertura, ateno e vermelho, sendo que o
sinal de ateno necessita de menos tempo !

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Semforo

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
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) ;

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
digitalWrite ( greenPin , HIGH );

digitalWrite ( redPin , LOW);


digitalWrite ( yellowPin , LOW);

delay ( ledDelay );
digitalWrite ( yellowPin , HIGH );
digitalWrite ( greenPin , LOW);

delay (2000) ;
digitalWrite ( yellowPin , LOW);

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Botes
O interruptor momentneo 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

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Botes
Quando o interruptor est livre (no pressionado), no h conexo

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 conexo
entre seus terminais, de forma que o pino do Arduino ligado ao
GND e obtemos LOW.
(O pino ainda se mantm conectado aos 5 volts, mas o resistor de

pull-up faz com que o pino esteja mais prximo do GND.)

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Boto - Conexes

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Boto - Conexes

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Boto Conexes

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Boto - Cdigo

int ledPin = 8; // escolha o pino para o LED


int inPin = 2; // escolha o pino de entrada (para o interruptor)
int val = 0; // varivel para ler o estado do interruptor

void setup() {
pinMode(ledPin, OUTPUT); // declara-se o LED como sada
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
}
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Potnciometro

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
int potPin = 2; // selecione o pino de entrada ao potencimetro
int ledPin = 13; // selecione o pino ao LED
int val = 0;
// varivel a guardar o valor proveniente do sensor

void setup() {

pinMode(ledPin, OUTPUT); // declarar o pino ledPin como sada


}

void loop() {
val = analogRead(potPin); // ler o valor do potencimetro
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
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Exerccio Matriz de Led


Insira 6 Leds, nas portas definidas abaixo:

2, 3, 4, 5, 6, 7

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Matriz de Led
int timer = 100;

// Quanto maior, mais devagar.


int pins[] = { 2, 3, 4, 5, 6, 7 }; // vetor com o nmero dos pinos
int num_pins = 6;
// quantidade de LEDs (tamanho do vetor)
void setup()
{
int i;
for (i = 0; i < num_pins; i++) // elementos do vetor vo de 0 a num_pins
-1
pinMode(pins[i], OUTPUT); // configurar cada pino como sada
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

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.
}
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Exerccio Matriz de Led


Utilize o mesmo exemplo, e acrescente a seguinte funo:
Ao completar a sequncia, de ligar a matriz de Led, que ela venha

ligando na ordem inversa

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Acrescentar aps o final do 1 FOR:

for (i = num_pins - 1; i >= 0; i--) {

digitalWrite(pins[i], HIGH);
delay(timer);
digitalWrite(pins[i], LOW);
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

LCD Portas Digitais

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

LCD Portas Analgicas

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
#include <LiquidCrystal.h>
// Define a utilizao da biblioteca para controle de telas LCDs
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


}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
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 prxima

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);
Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo - Continuao
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);
}
Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Monitor Serial
O monitor serial utilizado para comunicao entre o Arduino e o

computador (PC).
O monitor serial pode ser aberto no menu tools opo serial

monitor, ou pressionando as teclas CTRL+SHIFT+M.


As principais funes do monitor serial so: begin(), read(),

write(), print(), println() e available().

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Monitor Serial
Algumas funes bastante usadas:
begin(): inicializa a comunicao 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 nmero de bytes disponveis no buffer de
leitura do monitor serial.

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Monitor Serial

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

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 (analgicos),
alm dos pinos de energia (5v, 3.3v, GND). O pino 10 tambm utilizado pela placa
para uma funo especfica, no caso o backlight, e no deve ser utilizado nos
programas.

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Display LCD
#include <LiquidCrystal.h>
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);
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
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 prxima 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);

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo - Continuao
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);
}
Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Sensor de Luz
LDR (Light Dependent Resistor, ou Resistor Dependente de

Luz).

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Sensor de Luz
Ao iluminarmos um LDR, a sua resistncia apresenta valores

muito baixos.
Ao cortarmos a iluminao, a resistncia sobe.
Conhecendo os princpios bsicos do componente, podemos
montar um circuito onde, com incidncia de luz, o led se apaga, e
ao cobrirmos o LDR, o led se acende :

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Sensor de Luz
O programa para este circuito l o valor da porta analgica (que

deve estar na faixa de 0 a 1024), verificando se o valor maior do


que 800 (LDR encoberto) e consequentemente acendendo o led.

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Sensor de Luz

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
int portaLed = 10; //Porta a ser utilizada para ligar o led
int portaLDR = A5; //Porta analgica utilizada pelo LDR

void setup()
{

pinMode(portaLed, OUTPUT); //Define a porta do Led como

sada
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo

void loop()
{

int estado = analogRead(portaLDR); //L o valor fornecido pelo LDR


// Caso o valor lido na porta analgica 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 contrrio, apaga o led
{

digitalWrite(portaLed, LOW);
}
Prof. Aparecido Vilela Junior
Prof.Aparecido
} Vilela Junior

Cdigo Morse

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Exerccio Criar o cdigo Morse para a palavra SOS.


As seguintes regras devem ser criadas.
Os pontos devem ter a durao de 150ms ligados e intervalos de

100ms.
Os traos devem ter durao 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.

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo

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
}

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo

// 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

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Cdigo
digitalWrite (ledPin , LOW); // LED desligado
delay (100) ; // intervalo de 100 ms
}
// intervalo de 5 segundos para transmitir o sinal

novamente
delay (5000) ;

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Exerccio Imprima no terminal serial, a palavra referente ao cdigo Morse,

simultaneamente com o sinal emitido no led.

Prof. Aparecido Vilela Junior

Prof. Aparecido Vilela Junior

Você também pode gostar