Minicurso de Arduino

joao.guimaraes@ifrn.edu.br

http://jp-guimaraes.github.io

Apresentação

https://jp-guimaraes.github.io/eu/

Objetivo do curso?

Curso introdutório

Arduino pra quem não tem Arduino

Simulador

Perfil do aluno?

O que é esse tal de arduino?

Arduino uno

O que é esse tal de arduino?

Microcontrolador Atmel

Computador num chip

Processador + Memória + Entrada/Saída

Baixo custo $

Baixo consumo energético

Automação

O que é esse tal de arduino?

Microcontrolador Atmel

Software livre

Hardware livre

Baixo custo

Modularidade

Reaproveitamento de Hardware e Software

Olhando mais de perto!

  • USB
  • Botão de reset
  • Alimentação
  • Entradas e saídas digitais
  • Alimentação 5V, 3.3V e GND
  • Entradas analógicas
  • LEDs Tx/Rx
  • LED embarcado
  • Eletrônica auxiliar
Arduino uno

Simulador

Tinkercad

Vantagens do uso de um simulador num projeto microcontrolado?

Por que não funcionou? Hardware, software?

Elementos do simulador

Componentes

Código

Iniciar a simulação

Hello world!

Software

+

Hardware

Hello world

Circuito 1

Hello world

  • Hardware
  • Olá mundo?
  • Circuito 2
  • Vocês conhecem a protoboard?
Circuito 2

Hello world

  • Hardware
  • Olá mundo!
  • Usando o Microcontrolador
  • Saída digital
  • Circuito 3
  • Código?
Circuito 3

Hello world: Anatomia de um firmware


// variáveis globais
int pino_led = 12;

//Função de inicalização
void setup(){
	pinMode(pino_led, OUTPUT);								
}
// Loop principal
void loop(){
	digitalWrite(pino_led, HIGH);
	delay(1000); // espera 1000 milissegundos
	digitalWrite(pino_led, LOW);
	delay(1000); // espera 1000 milissegundos
}								
					

Quiz!

Crie a conta no Tinkercad

Inclua os circuitos usados até agora ao seu perfil

Modifique o hardware e o software agora!

Faça o led embutido da placa conectado ao pino 13 piscar alternadamente com o led do pino 12.

Incrementando o código


// variáveis globais
int pino_led_embutido = 13;
int pino_led_externo = 12;

// Inicialização de variávies, módulos, pinos, etc
void setup(){
	pinMode(pino_led_embutido, OUTPUT);
	pinMode(pino_led_externo, OUTPUT);
}

// Laço principal 	
void loop(){
	digitalWrite(pino_led_embutido, HIGH);
	digitalWrite(pino_led_externo, LOW);
	delay(1000); // espera 1000 milissegundos
	digitalWrite(pino_led_embutido, LOW);
	digitalWrite(pino_led_externo, HIGH);
	delay(1000); // espera 1000 milissegundos
}				
						

Funções são bem vindas!


// variáveis globaiss
int pino_led_embutido = 13;
int pino_led_externo = 12;

void piscar(int tempo){
	digitalWrite(pino_led_embutido, HIGH);
	digitalWrite(pino_led_externo, LOW);
	delay(tempo); // espera
	digitalWrite(pino_led_embutido, LOW);
	digitalWrite(pino_led_externo, HIGH);
	delay(tempo); // espera 
}

// Inicialização de variávies, módulos e pinos
void setup(){
	pinMode(pino_led_embutido, OUTPUT);
	pinMode(pino_led_externo, OUTPUT);
}

// Laço principal 	
void loop(){
	piscar(250);
	piscar(500);  
	piscar(1000);
	piscar(2000);
}											
						
  • Circuito 4
  • Estruturas de repetição funcionam normalmente

    
    // variáveis globaiss
    int pino_led_embutido = 13;
    int pino_led_externo = 12;
    
    void piscar(int tempo){
    	digitalWrite(pino_led_embutido, HIGH);
    	digitalWrite(pino_led_externo, LOW);
    	delay(tempo); // espera
    	digitalWrite(pino_led_embutido, LOW);
    	digitalWrite(pino_led_externo, HIGH);
    	delay(tempo); // espera 
    }
    
    // Inicialização de variávies, módulos e pinos
    void setup(){
    	pinMode(pino_led_embutido, OUTPUT);
    	pinMode(pino_led_externo, OUTPUT);
    }
    
    // Laço principal 	
    void loop(){
    	for(int i=250;i<=2000;i=i+250){
    		piscar(i);
    	}
    }																		
    					
  • Circuito 5
  • Saída digital, ok...

    mas e entrada?

    • Saída de dados digitais
    • Portas digitais podem ser configuradas como entrada digital
    • Como funciona o botão(push button)?
    • Circuito 6
    Circuito 6

    Entrada digital

    conectando push button ao arduino

    • Saída de dados digitais
    • Portas digitais podem ser configuradas como entrada digital
    • Como funciona o botão?
    • Circuito 7
    • Cuidado com o ruido!
    • Debouncing
    Circuito 7

    Quiz!

    Modifique o exemplo(hardware/software) anterior incluindo um botão para ligar o led e um segundo para desligar.

    Circuito 8

    Código da resposta

    
    const int botao_liga = 8;   
    const int botao_desliga = 7; // pino de entrada (ligar o botão)
    const int ledPin =  12;      // Pino de saída (ligar o led)
    
    int estado_botao_liga;  
    int estado_botao_desliga; 
    
    void setup() {
    	// Inicializa o pino do led como saída
    	pinMode(ledPin, OUTPUT);
    	// Inicializa o pino do botão como entrada
    	pinMode(botao_liga, INPUT);
    	pinMode(botao_desliga, INPUT);	
    }
    
    void loop() {
    	// le o pino de entrada de forma digital
    	estado_botao_liga = digitalRead(botao_liga);
    	estado_botao_desliga = digitalRead(botao_desliga);
    
    	// Se o botão tiver sido pressionado
    	if (estado_botao_liga == HIGH) {
    		// liga o led
    		digitalWrite(ledPin, HIGH);
    	}
    	if (estado_botao_desliga == HIGH) {
    		// desliga o led
    		digitalWrite(ledPin, LOW);
    	}
    }																	
    						

    Circuito 8

    Entradas e saídas digitais?

    OK! Mas, e entradas e saídas analógicas?

    Entrada analógica

    Muito usada para fazer interface com sensores!

    Pinos especiais para conexão

    Circuito 9

    Hardware

    Circuito 9

    Circuito 9

    Saída analógica

    Muito usada para fazer interface com atuadores!

    Pinos especiais para conexão?

    Pulse Width Modulation - PWM

    Saída analógica

    
    int brilho = 0;
    
    void setup(){
    	pinMode(9, OUTPUT);
    }
    
    void loop(){
    	for (brilho = 0; brilho <= 255; brilho += 5) {
    		analogWrite(9, brilho);
    		delay(30); // Wait for 30 millisecond(s)
    	}
    	
    	for (brilho = 255; brilho >= 0; brilho -= 5) {
    		analogWrite(9, brilho);
    		delay(30); // Wait for 30 millisecond(s)
    	}
    }																
    					

    Circuito 10

    Hardware

    Circuito 10

    Circuito 10

    Interface com outros dispositivos

    Comunicação serial

    Comunicação Serial

    
    void setup(){
    	pinMode(A0, INPUT);
    	Serial.begin(9600);
    }
    
    void loop(){	
    	Serial.println("ola mundo");
    	delay(10); // macete para melhorar a simulacao
    }											
    					

    Quiz!

    Modifique o hardware/fimrware anteriores para enviar o valor da entrada analógica pela porta serial ao computador.

    Dica: pode começar por aqui: Circuito 10

    Comunicação Serial

    
    int sensorValue = 0;
    
    void setup(){
    	pinMode(A0, INPUT);
    	Serial.begin(9600);
    }
    
    void loop(){
    	// read the input on analog pin 0:
    	sensorValue = analogRead(A0);
    	// print out the value you read:
    	Serial.println(sensorValue);
    	delay(10); // Delay a little bit to improve simulation performance
    }											
    						

    Circuito 11

    Hardware

    Circuito 11

    Circuito 11

    Obrigado!

    Dúvidas, críticas, sugestões?

    joao.guimaraes@ifrn.edu.br

    Apresentanção feita usando reveal.js