INTRODUÇÃO AO DESENVOLVIMENTO DE
SISTEMAS EMBARCADOS SUZANA VIANA MOTA
VIII Simpósio de Informática – Tecnologia Aplicada ao Desenvolvimento Social
Sistemas Embarcados
Um pouco de história
• Apollo Guidance Computer• Desenvolvido em 1968 no MIT.• Um computador - guia, que
operava em tempo real, e era considerado o item mais arriscado do sistema.
Um pouco de história
• Década de 60 - 70
• O primeiro sistema embarcado de produção em massa foi o computador guia do míssil nuclear LGM -30 Minuteman.
Um pouco de história
• Em meados da década de 80, com evolução da microeletrônica pode-se juntar vários componentes num único chip, o circuito integrado.
Microcontrolador X Microprocessador
Memória ROM
Memória RAM
Portas I/O Periféricos
Microcontrolador
• 40 Pinos• 16 bits• 8 canais para conversor de A/D• 1536 bytes de memória RAM• 40 MHz de Clock
Programando Microcontroladores
EditorEditor
CC
CompiladorCompilador
HexadecimalHexadecimal GravadorGravador
Ambiente de Desenvolvimento
Acende LED
void main()
{
while(TRUE)
{
output_high(PIN_D0);
delay_us(100);
output_low(PIN_D0);
}
}
• Ok, Entendi o programa.
• Mas o que acontece no microcontrolador?
output_high(PIN_D0);
Faz com que o PINO 19, vá para o nível “alto”, ou seja, ele fica com 5v.
output_low(PIN_D0);
Faz com que o PINO 19, vá para o nível “baixo”, ou seja, ele fica com 0v.
Sensores
• São dispositivos capazes de captar ações ou estímulos externos.
Posição, Presença, Proximidade, Toque
Movimento, Velocidade, Deslocamento
Temperatura
Umidade
Acústica, Som, Vibração
Químico, GásFluxoForça, Carga, Esforço, Tensão, Pressão
Vazamentos, Níveis
Elétrico, Magnético
Aceleração
Luz, Visão de Máquina
Sensores
Sensores Digitais
• Do ponto de vista elétrico, comportam-se como se fossem uma chave: liga/desliga.
• Portanto podemos fazer a ligação de modo que o sinal do sensor seja 0v ou 5v.
Sensor Óptico Sensor de Presença Sensor de Toque
Sensores Analógicos
• Pode assumir qualquer valor no seu sinal de saída ao longo do tempo, desde que esteja dentro da sua faixa de operação.
Sensor de Temperatura
Microfone Web Cam
Comunicação Serial
O padrão RS-232 é uma dos mais difundidos no mundo da automação e controle. Hoje em dia muitos equipamentos fazem uso do mesmo.
Comunicação Serial
Comunicação Serial
while(TRUE)
{
int SENSORES = 3;
int v_inicio=[2]
for(int i=0;i<SENSORES;i++)
{
set_adc_channel(i);
delay_us(300);
v_inicio[i] = read_adc();
}
}
Tipo de DadosTipo Tamanho em Bits Faixa de Valores
BOOLEAN 1 0 ou 1
CHAR 8 0 a 255
INT 8 0 a 255
LONG INT 16 0 a 65.535
FLOAT 32 0 a 4.294.967.295
Tabela ASCII
Plataformas Open Hardware
Arduino
• Criado na Itália em 2005• Democratizar o ensino de programação e
eletrônica.
Arduino Uno
• 14 pinos digitais• 6 entradas analógicas• Clock de 16 Mhz• 20.00 € = R$ 60,00
Arduino Uno
Arduino Uno
Arduino Esplora
• Joystick Analógico• Acelerômetro• Clock de 16 Mhz• 39.90 € = R$ 120,00
Arduino Esplora
Arduino Nano
• 14 pinos digitais• 8 entradas analógicas• Clock de 16 Mhz• 33.00 € = R$ 100,00
Arduino Nano
Raspberry Pi
• Criado em 2006 no Reino Unido• Começou a ser comercializado em 2012• Custa em média 35 doláres
Modelo A
CPU: 700 MHz GPU: Dual Core VideoCore
RAM: 256MB 1 Porta USB 2.0Saídas de vídeo: HDMI
Composite RCA (PAL e NTSC)Saídas de áudio: Conector de 3.5 mm, HDMI
35 USD = R$ 77,00
Modelo B CPU: 700 MHz
GPU: Dual Core VideoCore
RAM: 512MB 2 Portas USB 2.0Saídas de vídeo: HDMI
Composite RCA (PAL e NTSC)Saídas de áudio: Conector de 3.5 mm, HDMI
Porta Ethernet
45 USD = R$ 99,00
Modelo B+ CPU: 700 MHz
GPU: Dual Core VideoCore
RAM: 512MB 4 Portas USB 2.0Saídas de vídeo: HDMI
Composite RCA (PAL e NTSC)Saídas de áudio: Conector de 3.5 mm, HDMI
Porta Ethernet45 USD = R$ 99,00
Projetos
XCaracterísticas Arduino Raspberry Pi
Sistema Operacional - Linux - Raspbian
Linguagem de Programação C Python
IDE Arduino IDE, Eclipse OpenEmbedded, Eclipse
Arquitetura 8 bits 32 bits
Processamento 16 Mhz 700 Mhz
RAM 2 KB 256 MB
USB 1 2
Áudio - Stereo
Vídeo - HDMI, NTSC, PAL
Inspirações...
Criando o primeiro projeto
• Acesse: www.123d.circuits.io• Clique em SIGN UP• Preencha os campos necessários para o
cadastro.• Clique em CIRCUITS• Clique em CREATE A NEW CIRCUITS• Preencha o Campo NAME
PISCA LED
• 1 ARDUINO• 1 RESISTOR 1k Ω• 1 LED
PISCA LED
LED//Definindo LEDint led = 7;void setup() { //Inicializando o LED pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever:void loop() { digitalWrite(led, HIGH); // Led em Pino Alto delay(1000); // Aguarda digitalWrite(led, LOW); // Led em Pino Baixo delay(1000); // Aguarda}
PISCA LED ( SOS)//Definindo LEDint led = 7;void setup() { //Inicializando o LED pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever:void loop() { for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH);delay(150);digitalWrite(ledPin, LOW);delay(100);}
}
PISCA LED + Botão
• 1 ARDUINO• 2 RESISTORES 1k Ω• 1 LED• 1 BOTÃO
PISCA LED + Botão
Pisca LED + Botãoconst int botao = 13; // identifica o pino onde ligar o botaoconst int led = 7; // identifica o pino onde ligar o ledint estado;
void setup() { pinMode(botao, INPUT); // configura o pino como entrada pinMode(led, OUTPUT); // configura o pino como saída}
void loop() { estado = digitalRead(botao);
if( estado == LOW) { digitalWrite(led, LOW); } else { digitalWrite(led, HIGH); } }
LED + Potenciômetro
• 1 ARDUINO• 1 RESISTOR 390 ohm• 1 LED• 1 POTENCIOMETRO• 1 MULTIMETRO ( OPCIONAL )
LED + Potenciômetro
int ledPin = 7;int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
}void loop() {
val = analogRead(A0);digitalWrite(ledPin, HIGH);delay(val);digitalWrite(ledPin, LOW);delay(val);
}
LED + Potenciômetro
Servo Motor + Potenciômetro
• 1 ARDUINO• 1 POTENCIOMETRO• 1 SERVO MOTOR
Servo Motor + Potenciômetro
Servo Motor + Potenciômetro#include <Servo.h>
//incluindo biblioteca para controle do servomotor Servo servoMotorObj; //Criando um objeto da classe Servo int const potenciometroPin = 0; //pino analógico onde o potenciômetro está conectadoint const servoMotorPin = 3; //pino digital associado ao controle do servomotorint valPotenciometro; //variável usada para armazenar o valor lido no potenciômetro
void setup() { servoMotorObj.attach(servoMotorPin); //associando o pino digital ao objeto da classe Servo} void loop() {
valPotenciometro = analogRead(potenciometroPin); //lendo o valor do potenciômetro (intervalo entre 0 e 1023) valPotenciometro = map(valPotenciometro, 0, 1023, 0, 180); //mapeando o valor para a escala do servo (entre 0 e 180) servoMotorObj.write(valPotenciometro); //definindo o valor/posição do servomotor delay(15);
}
Pisca LED + Arco-íris de botões
const char botao = 11;char estadoBotao;int atraso = 1000;int i = 0;void setup() { pinMode(botao, INPUT); for ( i = 0; i < 4; i ++ ) {
pinMode(i, OUTPUT); digitalWrite(i, LOW); digitalWrite(0, HIGH); } i =0;
}
LED + Botãovoid loop() { delay(atraso); estadoBotao = digitalRead(botao); if(estadoBotao == LOW){ digitalWrite(i, LOW); i++; if (i == 4) { i = 0;} digitalWrite(i, HIGH); } else { digitalWrite(i, LOW); i--; if (i == -1) { i = 3;} digitalWrite(i, HIGH); } }