Mini Curso Sistemas Embarcados

1.074 visualizações

Publicada em

Este mini curso aborda os fundamentos do desenvolvimento embarcado e boas práticas de programação, demonstra as principais diferenças em relação ao desenvolvimento de software para sistemas computacionais convencionais, em especial derivadas das restrições de capacidade de processamento, memória e energia que estão presentes em muitos sistemas embarcados, também serão apresentados conceitos relacionados as plataformas Arduino e Raspberry pi.

Publicada em: Engenharia
  • Seja o primeiro a comentar

Mini Curso Sistemas Embarcados

  1. 1. VIII Simpósio de Informática – Tecnologia Aplicada ao Desenvolvimento Social INTRODUÇÃO AO DESENVOLVIMENTO DE SISTEMAS EMBARCADOS SUZANA VIANA MOTA
  2. 2. Sistemas Embarcados
  3. 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. 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. 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.
  6. 6. Microcontrolador X Microprocessador Memória ROM Memória RAM Portas I/O Periféricos
  7. 7. Microcontrolador • 40 Pinos • 16 bits • 8 canais para conversor de A/D • 1536 bytes de memória RAM • 40 MHz de Clock
  8. 8. Programando Microcontroladores EEdditiotorr CC CCoommppilialaddoorr HHeexxaaddeeccimimaal l GGraravvaaddoorr
  9. 9. Ambiente de Desenvolvimento
  10. 10. Acende LED void main() { while(TRUE) { output_high(PIN_D0); delay_us(100); output_low(PIN_D0); } }
  11. 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.
  12. 12. output_low(PIN_D0); Faz com que o PINO 19, vá para o nível “baixo”, ou seja, ele fica com 0v.
  13. 13. Sensores • São dispositivos capazes de captar ações ou estímulos externos.
  14. 14. Posição, Presença, Proximidade, Toque Movimento, Velocidade, Deslocamento Temperatura Umidade Acústica, Som, Vibração Aceleração Elétrico, Magnético Vazamentos, Níveis Força, Carga, Esforço, Fluxo Químico, Gás Tensão, Pressão Luz, Visão de Máquina Sensores
  15. 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. 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. 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.
  18. 18. Comunicação Serial
  19. 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. 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
  21. 21. Tabela ASCII
  22. 22. Plataformas Open Hardware
  23. 23. Arduino • Criado na Itália em 2005 • Democratizar o ensino de programação e eletrônica.
  24. 24. Arduino Uno • 14 pinos digitais • 6 entradas analógicas • Clock de 16 Mhz • 20.00 € = R$ 60,00
  25. 25. Arduino Uno
  26. 26. Arduino Uno
  27. 27. Arduino Esplora • Joystick Analógico • Acelerômetro • Clock de 16 Mhz • 39.90 € = R$ 120,00
  28. 28. Arduino Esplora
  29. 29. Arduino Nano • 14 pinos digitais • 8 entradas analógicas • Clock de 16 Mhz • 33.00 € = R$ 100,00
  30. 30. Arduino Nano
  31. 31. Raspberry Pi • Criado em 2006 no Reino Unido • Começou a ser comercializado em 2012 • Custa em média 35 doláres
  32. 32. 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
  33. 33. 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
  34. 34. 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
  35. 35. Projetos
  36. 36. X Caracterí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
  37. 37. Inspirações...
  38. 38. 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
  39. 39. PISCA LED • 1 ARDUINO • 1 RESISTOR 1k Ω • 1 LED
  40. 40. PISCA LED
  41. 41. 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 }
  42. 42. 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); } }
  43. 43. PISCA LED + Botão • 1 ARDUINO • 2 RESISTORES 1k Ω • 1 LED • 1 BOTÃO
  44. 44. PISCA LED + Botão
  45. 45. 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); } }
  46. 46. LED + Potenciômetro • 1 ARDUINO • 1 RESISTOR 390 ohm • 1 LED • 1 POTENCIOMETRO • 1 MULTIMETRO ( OPCIONAL )
  47. 47. LED + Potenciômetro
  48. 48. 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); }
  49. 49. Servo Motor + Potenciômetro • 1 ARDUINO • 1 POTENCIOMETRO • 1 SERVO MOTOR
  50. 50. Servo Motor + Potenciômetro
  51. 51. 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); }
  52. 52. Pisca LED + Arco-íris de botões
  53. 53. LED + Botão 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; } void 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); } }
  54. 54. Obrigada! Contato: suzana.svm@gmail.com suzana.mota@cti.gov.br

×