O documento apresenta uma introdução ao desenvolvimento de sistemas embarcados, discutindo brevemente a história dos sistemas embarcados, as diferenças entre microcontroladores e microprocessadores, como programar microcontroladores, sensores digitais e analógicos, comunicação serial, tipos de dados, plataformas abertas como Arduino e Raspberry Pi e exemplos de projetos como piscar LEDs e controlar um servo motor com um potenciômetro.
3. 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.
4. 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.
5. 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.
11. • 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.
15. 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
16. 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
17. 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.
19. 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();
}
}
20. Tipo de Dados
Tipo 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
32. Raspberry Pi
• Criado em 2006 no Reino Unido
• Começou a ser comercializado em 2012
• Custa em média 35 doláres
33. Modelo A
CPU: 700 MHz
GPU: Dual Core VideoCore
RAM: 256MB
1 Porta USB 2.0
Saí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
34. Modelo B
CPU: 700 MHz
GPU: Dual Core VideoCore
RAM: 512MB
2 Portas USB 2.0
Saí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
35. Modelo B+
CPU: 700 MHz
GPU: Dual Core VideoCore
RAM: 512MB
4 Portas USB 2.0
Saí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
39. 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
40.
41.
42.
43. PISCA LED
• 1 ARDUINO
• 1 RESISTOR 1k Ω
• 1 LED
45. LED
//Definindo LED
int 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
}
46. PISCA LED ( SOS)
//Definindo LED
int 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);
}
}
47. PISCA LED + Botão
• 1 ARDUINO
• 2 RESISTORES 1k Ω
• 1 LED
• 1 BOTÃO
49. Pisca LED + Botão
const int botao = 13; //
identifica o pino onde ligar o botao
const int led = 7; //
identifica o pino onde ligar o led
int 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);
}
}
55. 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á
conectado
int const servoMotorPin = 3; //pino digital
associado ao controle do servomotor
int 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(valPotenciome
tro); //definindo o valor/posição do
servomotor
delay(15);
}
A interface RS-232 é uma porta serial, ou seja, ela transmite e recebe dados de forma assíncrona. RS é uma abreviação de “Recommended Standard”. Ela relata uma padronização de uma interface comum para comunicação de dados entre equipamentos.
Onde: 1- Detecção de portadora (CD) 2- Recepção de dados (RXD) 3- Transmissão de dados (TXD) 4- Terminal de dados pronto (DTR) 5- Terra do Sinal (GND) 6- Data set ready (DSR) 7- Solicitação de envio (RTS) 8- Pronto para enviar (CTS) 9- Indicador de chamada (RI)
Deve-se estar atento ao pino 5 (GND), pois é nele que os sinais de dados realizam um caminho de retorno. Ao ligar no computador, o pino 7 fica ligado na carcaça da CPU, onde é o terra comum de toda a circuitaria do computador.
A especificação RS-232 inclui dois fios dedicados a revelar se há um dispositivo conectado a outra ponta da conexão, e se ele está ligado. O sinal no pino 4 chama-se Data Terminal Ready, ou simplesmente DTR. É uma voltagem positiva enviada do dispositiva enviada do dispositivo DTE para indicar que o dispositivo está conectado, ligado e pronto para iniciar a comunicação. O sinal complementar aparece no pino 6. Ele se chama Data Set Ready, ou DST; uma tensão positiva nessa linha indica que o DCE está ligado e pronto para fazer o seu trabalho. Em uma conexão serial RS-232 normal, os dois sinais devem estar presentes para que algo mais aconteça. O DTE envia o sinal DTR ao DCE, e o DCE envia o sinal DSR ao DTE. Os dois dispositivos, então, saberão que o outro está pronto. Para a interface RS-232, a taxa máxima para a transmissão de dados é de 19200 bps (bits por segundo). A maioria dos equipamentos digitais utilizam níveis TTL ou CMOS. Portanto, o primeiro passo para conectar um equipamento digital a uma interface RS232 é transformar níveis TTL (0 a 5 volts) em RS232 e vice-versa. Isto é feito por conversores de nível. Existe uma variedade grande de equipamentos digitais que utilizam o driver 1488 (TTL =&gt; RS232) e o receiver 1489 (RS232 =&gt; TTL). Estes CIs contém 4 inversores de um mesmo tipo, sejam drivers ou receivers. O driver necessita duas fontes de alimentação +7,5 volts a +15 volts e –7,5 volts a –15 volts. Isto é um problema onde somente uma fonte de +5 volts é utilizada. Um outro CI que está sendo largamente utilizado é o MAX232 (da Maxim). Ele inclui um circuito de “charge pump” capaz de gerar tensões de +10 volts e –10 volts a partir de uma fonte de alimentação simples de +5 volts, bastando para isso alguns capacitores externos. Este CI também tem 2 receivers e 2 drivers no mesmo encapsulamento. Nos casos onde serão implementados somente as linhas de transmissão e de recepção de dados, não seria necessário 2 chips e fontes de alimentação extras. A figura abaixo mostra um circuito de comunicação utilizando o MAX232:
CHINA: 8 USD = 16 REAIS
1 – Conexão USB – Utilizada para a comunicação com o computador2 – Alimentação – Ligue aqui o plug para alimentar o Arduino quando não estiver no computador3 – Chip de comunicação com o computador – Este chip que faz a comunicação entre o computador e o Arduino4 – Cristal de 16MHz – É este componente que faz a frequência do microcontrolador funcionar5 – Conexões digitais – Funcionam tanto como entrada quanto como saída de dados. As que possuem um “~” na frente, são saídas PWM6 – Led – Está ligado ao pino 13, serve para fazer pequenos testes sem precisar ligar mais nada no Arduino7 – Leds TX/RX – Indicam que o Arduino está se comunicando com o computador8 – Este é o microcontrolador ATMEGA328 – O cérebro do nosso Arduino9 – Barra de energia – Fornece uma fonte de energia para alimentar pequenos dispositivos externos (ou outros circuitos – “Shields”)10 – Pinos (TX/RX) para comunicação serial com dispositivos externos11 – Led de indicação de ligado – Indica quando o Arduino está ligado à uma fonte de energia12 – Botão de RESET – Reinicia o Arduino, começando sua programação desde o início13 – Entradas analógicas – Entradas que podemos ligar potenciômetros ou outros componentes analógicos
Conectar o terra
Resistencia
Ligar o pino a resistencia: 390 ohms
Led de forma que fique ligado a resistencia
Outra perna do led ao negativo
Clica no Arduino: Insere o Código
Conectar o terra a linha azul negativa
Conectar o positivo a luz vermelha positiva
Ligar o pino a resistencia: 390 ohms
Led de forma que fique ligado a resistencia
Outra perna do led ao negativo
Insere o Botão
Resistencia 1 k hom para o botão
Liga o pino digital a linha da resistencia
Liga a outra perna do botao ao positivo
4 resistores 250 ohm
1 resistor 1 kohm
// Pin 7 has an LED connected on most Arduino boards.
// give it a name:
int led = 7;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}