Disciplina Sistemas Embarcados / Microcontroladores e Aplicações do Departamento de Computação da UFSCar, oferecida no modelo ENPE (Ensino Não Presencial Emergencial) e ministrada pelo Prof. Rafael Aroca, do DC-UFSCar – Fevereiro/2021 até Maio/2021.
Aulas teóricas (vídeos)
Aula teórica | Conteúdo / Atividades | |
1 | Introdução / visão geral de sistemas embarcados Aula no YouTube Slides | |
2 | Dispositivos, arquiteturas, ferramentas e linguagens Aula no YouTube Slides | |
3 | Sensores Aula no YouTube (Parte 1) Aula no YouTube (Parte 2) Aula no YouTube (Parte 3) Slides | |
4 | Atuadores Aula no YouTube (Parte 1) Aula no YouTube (Parte 2) Slides | |
5 | Comunicação Aula no YouTube (Parte 1) Aula no YouTube (Parte 2) Aula no YouTube (Parte 3) Slides | |
6 | Interface com o usuário Aula no YouTube (Parte 1) Aula no YouTube (Parte 2) Aula no YouTube (Parte 3) Slides | |
7 | Linux Embarcado Aula no YouTube Slides | |
8 | Integração de Sistemas e dicas Aula no YouTube Slides |
Quizzes
# Quiz | Acesso ao Quiz | Prazo |
1 | Assuntos: aulas 1 e 2 https://forms.gle/5MX2RRTwNTBXN7uC9 | 13/03/21 |
2 | Assuntos: aulas 3 e 4 https://forms.gle/A4g5HsDzSoMnu4hb6 | 04/06/21 |
3 | Assuntos: aulas 5 e 6 https://forms.gle/okhEQv3tRtr5bWvC9 | 21/06/21 |
4 | Assuntos: aulas 7 e 8 https://forms.gle/YKy5V4bkj2Q2s5LA9 | 28/06/21 |
Laboratório remoto

Acesso ao laboratório remoto:
Programação, gravação do microcontroladores e console serial:
Câmera:
http://uc.bipes.net.br:8090/cgi-bin/mjpg/video.cgi?subtype=1
Pinagem das conexões do AtMega2560 no laboratório remoto (em Mar/2021):
Pino – Arduino Mega 2560 | Descrição |
A0 | Entrada analógica conectada a um sensor de temperatura LM35, com alimentação de 5V |
6 | Rele 1 (Iluminação da bancada remota ou fonte do motor DC) |
7 | Rele 2 (Iluminação da bancada remota ou fonte do motor DC) |
8 | Saída PWM para controle de velocidade do motor DC |
9 | Controle de rotação do motor DC (saída 1) |
10 | Controle de rotação do motor DC (saída 2) |
2 | Encoder – canal A |
4 | Encoder – canal B |
12 | Servo motor: Micro Servo 9g SG90 |
14,15,16,17 | Motor de passo (entradas 1,2,3,4) |
Atividades práticas usando laboratório remoto
# | Prazo | Descrição |
1 | 06/03 | Atividade Prática #1 Acessar o laboratório remoto e criar um programa para piscar o LED com intervalo de 500 milisegundos. Verificar o uso da câmera e ferramenta. Não é necessário realizar nenhuma entrega – o objetivo é conhecer a ferramenta. |
2 | 13/03 | Atividade Prática #2 Acessar o laboratório remoto http://uc.bipes.net.br:5000/ Existe um sensor de temperatura LM35 conectado à porta analógica A0 de um Arduino Mega Verifique o manual do sensor LM35 e do conversor ADC do AtMega2560 para, a partir da leitura do sensor, converter a leitura “bruta” em temperatura, em graus Celcius Faça um programa que faz 30 leituras/amostras do sensor, e faz uma média, apresentado a leitura na tela, através do envio por comunicação Serial Caso a média da temperatura lida seja superior a 30 graus, acionar um rele no pino digital 13, que aciona um sistema de ventilação Envie o programa elaborado, por email, para o professor da disciplina |
3 | 28/03 | Atividade Prática #3 Considerando a pinagem da tabela de conexões do laboratório remoto, implemente um programa que liga a luz da bancada do laboratório remoto, mostrado na foto acima. Salve a imagem do laboratório com a luz acesa e apagada. Para entrega, envie um arquivo PDF com duas fotos: uma foto da bancada com a luz apagada, e outra com a luz acesa. Inclua também o código fonte utilizado, no mesmo arquivo PDF. Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
4 | 31/03 | Atividade Prática #4 Prepare um programa que posiciona o micro-servo motor, conectado ao pino 12 do Arduino Mega, em 6 ângulos diferentes, com a diferença de 20 segundos entre cada posicionamento. Execute o programa no laboratório remoto, e visualize, através da Câmera 2, o movimento do eixo do motor de passo. Salve a imagem de cada posição e verifique o ângulo de posicionamento do motor através da ferramenta online, enviando cada imagem capturada e comparando com o instrumento de medida de ângulo virtual: https://www.ginifab.com/feeds/angle_measurement/ Salve imagens do ângulo medido na ferramenta, e adicione a um arquivo PDF para envio. Inclua, também, no PDF, o código fonte utilizado e uma tabela relacionando o ângulo medido com a ferramenta online (link acima) com o valor x ajustado no programa, através do comando servo.write(x). Finalmente, faça um gráfico, a partir da tabela, relacionado o ângulo configurado via programação, e o ângulo medido na ferramenta online de medida de ângulos. Junte todas informações mencionadas em um único arquivo PDF e envie pelo link abaixo: Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
5 | 03/04 | Atividade Prática #5 Esta atividade é dividida em diversas partes, para facilitar o teste com o motor de corrente contínua (DC ou CC). Parte 1: Utilize as funções analogWrite(pino, valor) para geração de sinal PWM e digitalWrite(pino, valor) para controle da direção de rotação do motor de corrente contínua. Experimento rotação horário e anti-horária, em diferentes velocidades. Parte 2: Implemente a funcionalidade de leitura do encoder do motor CC e envio pela porta serial (Serial.prinln()) a leitura da medida do encoder. Dica: Estude o código disponível no link abaixo, para facilitar a sua implementação: https://www.arduinoecia.com.br/motor-dc-com-encoder-arduino Parte 3: Após implementar a leitura do encoder, controle o motor para girar lentamente e verifique a contagem de pulsos do encoder. Estime o número de pulsos por volta deste Encoder. Parte 4: Ajuste o programa para informar a velocidade de rotação do motor, enviando a velocidade para o console serial. Através da função analogWrite(pino, valor), controle o motor para girar em diversas velocidades (pelo menos 10) e anote o valor ajustado na função analogWrite(pino, valor) e a velocidade medida. Faça um gráfico tendo no eixo X o valor ajustado na função analogWrite, e no outro eixo, a medida real de velocidade. Faça o mesmo gráfico, mais uma vez, porém para rotação do motor em sentido oposto à rotação do primeiro gráfico. Discuta suas observações e compare os resultados experimentais com modelo teórico de motores de corrente contínua comentados na aula teórica. Compile todas informações solicitadas em um arquivo PDF e envie pelo link abaixo. Dica: note que a ponte H L298 está conectada aos pinos 8, 9 e 10 do Arduino Mega, conforme tabela acima. Contudo, esta ponte H recebe uma alimentação de 6V de uma fonte de bancada (lado direito da foto acima, indicando 6v) que não está ligada de forma permanente. Esta fonte de alimentação tem seu controle de liga/desliga através de um rele (pino 6 ou 7 – verifique). Dessa forma, para controlar o motor DC através da ponte H, você deve primeiro acionar o rele que fornece energia para a ponte H / motor. Note também que a placa de reles está com lógica invertida, então é necessário enviar um sinal baixo (LOW) para que o rele acione. Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
6 | 10/04 | Atividade Prática #6 Parte 1: Motor de passo Utilizando a pinagem detalhada na tabela acima, implemente um programa que move o motor de passo (motor com ponteiro verde na montagem do laboratório remoto). Verifique a máxima velocidade possível antes do motor começar a “perder passos”. Parte 2: Controle “P” em malha fechada – velocidade Com base nas implementações anteriores, implemente um programa que monitora a velocidade angular do motor de corrente contínua e realiza controle proporcional (P) de velocidade, em malha fechada. Dessa forma, seu programa deve monitorar constantemente a velocidade, e controlar a saída PWM para que o motor receba tensão proporcional ao erro (erro = velocidade atual – velocidade desejada). Este algoritmo deve se repetir continuamente, para que o sistema mantenha a velocidade controlada, independente dos distúrbios que possam ocorrer. Parte 3: Controle “P” em malha fechada – posição Com base nas implementações anteriores, implemente um programa que monitora a posição angular do motor de corrente contínua e realiza controle proporcional (P) de posição, em malha fechada. Dessa forma, seu programa deve monitorar constantemente a velocidade, e controlar a saída PWM para que o motor receba tensão proporcional ao erro (erro = velocidade atual – velocidade desejada). Este algoritmo deve se repetir continuamente, para que o sistema mantenha a velocidade controlada, independente dos distúrbios que possam ocorrer. Teste diferentes valores para o ganho proporcional (Kp) e velocidade do loop de controle (delay entre cada interação). Anote os resultados, e se possível, plote gráficos. Junte todas observações em uma arquivo PDF e envie no link abaixo. Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
7 | 11/06 | Atividade Prática #7 Implemente um programa no laboratório remoto, que possa receber comandos, via comunicação serial, e executar funções de acordo com estes comandos. Neste sentido, estamos implementando um “protocolo simples” para comunicação serial. Para testar, basta utilizar o Serial Console do laboratório remoto, que permite envio e recepção de dados. O protocolo terá as seguintes características: Mensagem de comando, enviada pelo usuário no terminal: X,P1,P2 Onde X é o dispositivo a ser acionado e P1 e P2 são parâmetros para este dispositivo. Os seguintes comandos devem ser implementados: 1,0,0 => realiza a leitura do sensor de temperautra LM35 e envia a leitura pela porta serial 2,1,0 => acende a luz do laboratório 2,0,0 => apaga a luz do laboratório 3,X,0 => posiciona o servo motor no ângulo X 4,X,0 => Move o motor de passo em X passos Opcional: 5,X,0 => Utiliza o controle P da prática anterior, e posiciona o motor de corrente contínua no ângulo X, com controle em malha fechada Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
Laboratório Remoto 2 – ESP8266
Acesso ao laboratório remoto com ESP8266:
Acesse o BIPES (bipes.net.br) / http://www.bipes.net.br/beta2/ui/
O BIPES é uma plataforma que permite programar microcontroladores à distância usando Python / MicroPython.
Ao acessar o BIPES, repare nas guias (Blocks, Console, Python…)
Em console, informe qual placa você irá acessar, conforme lista abaixo indicando o endereço da placa em “Address” e informando a senha da placa.
Importante: cada placa aceita apenas um acesso de cada vez
Escolha uma placa:
Placa 1: ws://uc.bipes.net.br:8061/ (Senha: bipesUno)
Placa 2: ws://uc.bipes.net.br:8062/ (Senha: bipes10)
Placa 3: ws://uc.bipes.net.br:8063/ (Senha: bipes0003)
Placa 4: ws://uc.bipes.net.br:8064/ (Senha: bipes04)
Placa 5: ws://uc.bipes.net.br:8065/ (Senha: bipesFive)
Conecte na placa e teste seu programa. Você pode programar em blocos ou diretamente em Python. Você também pode usar o Console para interagir em tempo real / online com a placa.
Os resultados dos comandos prints podem ser vistos na aba console.
Para fazer um primeiro teste, utilize o seguinte programa:

Indique o endereço da placa em Console -> Address e conecte. Em seguida use o botão “Play” ou “Run block basd program”:

Você pode tranformar o programa em blocos em Python, editar, e executar o programa em Python pela guia Files:

Solicitamos a gentileza de não editar / mudar o conteúdo dos arquivos boot.py e webrepl_cfg.py, que são definições e configurações para operação do laboratório remoto.
Ao usar o os LEDs, você pode ver o resultado pela câmera:
Câmera: http://uc.bipes.net.br:8280/cgi-bin/mjpg/video.cgi?subtype=1 (Usuario: camera / Senha: camera123)
http://uc.bipes.net.br:8280/cgi-bin/mjpg/video.cgi?subtype=1 (Usuario: camera / Senha: camera123)
Componentes:
O laboratório é composto por 5 placas ESP8266 modelo WeMos D1 mini.
Cada placa está montada em um protoboard com um sensor de umidade e temperatura DHT11 e com um shield de matriz de LEDs 8×8 TM1640.
Pinagem das conexões do ESP8266 no laboratório remoto (em Jun/2021):
Pino – ESP8266 | Descrição |
D4 | Sensor de umidade e temperatura DHT11 |
14 | Clock (CLK) da matriz de LEDs TM1640 |
13 | Clock (CLK) da matriz de LEDs TM1640 |
Atividades práticas usando laboratório remoto
# | Prazo | Descrição |
8 | 20/06 | Atividade Prática #8 Parte 1: Teste a conexão com o ESP8266 e tente realizar alguns testes, experimentos para conhecer a ferramenta. Você pode escolher entre programar em blocos ou em Python. A programação em blocos é uma tendência para redução de tempo e falhas de programação. Parte 2: Implemente um programa que faz a leitura do sensor de temperatura e umidade DHT11 e mostra as leituras com intervalo de 1 segundo. Parte 3: Adicione a este programa a funcionalidade de Internet das coisas (IoT) usando protocolo MQTT. Você pode usar o bloco EasyMQTT para isso. Envie dados de temperatura e umidade para o servidor MQTT em nuvem, do BIPES e visualize o gráfico destas temperaturas. Caso queira integrar com outras aplicações, existe uma API para interação com o servidor MQTT do BIPES, com detalhamento na documentação no final desta página. Parte 4: Utilize o servidor MQTT para publicar dados (números) e visualizar o dado publicado na matriz de LEDs. Por exemplo: http://bipes.net.br/easymqtt/publish.php?session=1c64k&topic=LedMatrix&value=1 Ao observar uma mudança no dado publicado, atualizar a matriz de LEDs com o novo valor, automaticamente. Slides do mini-curso BIPES, que podem ser úteis: Slides Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
9 | 28/06 | Atividade Prática #9 Elabore 5 programas diferentes, e carregue cada um destes programas em 1 das placas. Os programas devem consultar um servidor de data e hora de alta precisão, via protocolo Network Time Protocol (NTP), e exibir nos displays a hora, com atualização automática no formato: HH : MM HH -> Placas 1 e 2 : -> Placa 3 MM -> Placas 4 e 5 A placa 3 deve piscar o símbolo “:” suavamente. A cada minuto completo, as placas devem interromper a exibição das horas e mostrar a temperatura e umidade, no formato: TT / UU Depois de 10 segundos, a exibição do relógio deve voltar ao normal. Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
10 | 28/06 | Atividade Prática #10 Linux Embarcado com Raspberry Pi Descrição em breve Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 |
AF | 29/06 | Apresentação Final (Atividade Prática #11) Elabore 5 programas diferentes, e carregue cada um destes programas em 1 das placas. Os programas devem funcionar de forma sincronizada (comunicaçao entre as placas via rede), demonstrando um efeito de animação gráfica (animação livre) que ocorre nos 5 displays, totalizando (8 x 40 LEDs) Entrega através do Google Form: https://forms.gle/KKratAx4ZYBS9tTP7 (indicar submissão como 11) |
Notas
Divulgadas via email e WhatsApp com atualização das entregas até 14/06/21
Feedback anônimo
Caso queira deixar alguma crítica ou sugestão, de forma anônima, utilize o formulário abaixo. Não é necessário se identificar:
https://forms.gle/DhESmcD4ujdUGcdc7
Outras informações
Código fonte do Laboratório Remoto de Microcontroladores
https://github.com/rafaelaroca/RemoteMicrocontrollerLab
Detalhes e documentos sobre o BIPES:
http://www.bipes.net.br/papers.html
Código fonte do projeto BIPES: