Mini Curso Sistemas Embarcados

1.016 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
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.016
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
74
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Telefones celulares, Equipamentos de Rede: Modem, Hoteador, Hubs, Switchs, GPS, Calculadoras, TV’s, DVD’s, BlueRays, Videogames, Impressoras, Cameras Digitais
    CARROS: Controlador de injeção eletrônica, sistemas multicombustível, Controladores da tração, acionadores de air bags, Freios ABS
    ELETRODOMESTICOS: Geladeira, Maquina de Lavar, Microondas, Forno Elétrico, Sanduicheira, Ar condicionado
    EQUIPAMENTOS DE ACADEMIA: Esteira, Bicicleta Ergométrica, Eliptico
    EQUIPAMENTOS MÉDICOS:
    Drones
    ROBOS INDUSTRIAIS:
  • http://postscapes.com/what-exactly-is-the-internet-of-things-infographic
  • 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 => RS232) e o receiver 1489 (RS232 => 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
  • CHINA: 8 USD = 16 REAIS
  • 25 dolares = 50 reais
  • CHINA: 3.5 USD = 10 REAIS
  • 25 dolares = 50 reais
  • Massimo Banzi: https://www.ted.com/talks/massimo_banzi_how_arduino_is_open_sourcing_imagination#t-889308
    Instructables: http://www.instructables.com/
    Fazedores: http://blog.fazedores.com/
    MagPi: http://www.themagpi.com/
    Livro Arduino 50 Projetos: https://drive.google.com/file/d/0B0Rlvi0dF53LN1JnU1Myc2xIbkU/edit?usp=sharing
  • IFNMG JANUARIA LED
  • 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
    }
  • 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

    ×