Existem programas que precisam necessariamente de uma interface para você saber o que está acontecendo, mas nem sempre você vai querer colocar algum display em seu projeto. Isso porque o display dá um trabalho adicional de ser implementado e também representa um custo. E uma das funcionalidades do monitor serial é essa, poder ver o programa funcionando sem precisar de algum componente adicional.
Além disso, ele é muito interessante para podermos tirar os bugs de nosso programa. Isto é, ver o que está acontecendo em cada parte de um programa que não funciona para então achar onde está o erro. Portanto o monitor serial é uma ferramenta muito interessante e que facilita bastante nossas vidas nos casos citados anteriormente.
Recomendo a leitura do post sobre comunicação serial assíncrona para melhorar o entendimento.
Na aula anterior, vimos como usar as funções PWM do Arduino.
O que é
O monitor serial é uma janela que você abre na IDE do Arduino que te permite comunicar com ele por meio do USB. A comunicação é serial e ocorre por meio de dois pinos do Arduino e os dois pinos de dados do USB (data+ e data-). A imagem abaixo ilustra simplificadamente a ligação.
Como pode ser observado, o pino de transmissão do Arduino (Tx) se liga ao pino de recepção de dados do computador (data-) e vice versa. Dessa forma, os dois dispositivos podem se comunicar. Afinal, essa comunicação torna possível o computador enviar e receber dados do Arduino e o mesmo para o Arduino, enviar e receber dados do computador.
Mas onde eu acesso isso no Arduino? Primeiro você precisa estar conectado a algum dispositivo (o Arduino no caso). E depois é só selecioná-lo em “Ferramentas” -> “Porta”. Com isso, basta clicar no ícone de uma lupa na parte superior no canto direito do programa (imagem abaixo).
Com isso ele abre a seguinte janela:
De acordo com a imagem, os principais elementos são:
- Barra e botão para enviar alguma informação. Basta clicar na barra, digitar o que você quiser e aperta enter ou clicar em enviar.
- Opção para selecionar a velocidade de comunicação. Veja o subtópico abaixo para entender.
Existe ainda o plotter serial, que é uma janela que transforma os dados que você imprime em gráfico. Veja as imagens de demonstração abaixo.
Velocidade de comunicação
Uma coisa muito importante na comunicação serial é a velocidade de envio e recebimento dos dados. Afinal, por mais que o computador envie varios bits (informações) para o Arduino, ele precisa saber a velocidade que eles estão chegando para poder receber os dados corretamente.
Sendo assim, você deve escolher a velocidade na hora de inicializar a função de comunicação serial (tópico programação). E também deve ir na janela do monitor serial e mudar a velocidade de comunicação para a velocidade que foi escolhida. Se aparecer alguma letra estranha no monitor serial quer dizer que os dados estão sendo transmitidos em outra velocidade.
Por fim, a velocidade é medida em baud. Baud significa a quantidade de símbolos que podem ser enviados por segundo. Se ficou confuso, apenas entenda que é a mesma coisa que quantidade de bits por segundo neste caso.
Existem casos onde vai ser necessário fazer uma leitura rápida, por exemplo a velocidade de um motor, portanto a velocidade para esse caso seria bem alta (talvez 115200). E a velocidade máxima de muitos microcontroladores é 115200, então se passar disso, as informações vão apresentar erros.
Programação
Explicação
Existem muitos pontos importantes para saber e assim poder usar a comunicação serial corretamente. Como dito anteriormente, ela utiliza 2 pinos (tx e rx) e no Arduino UNO, por padrão, são os pinos 0 e 1. E quando você está usando a comunicação serial, esses pinos ficam ocupados por ela. É por isso que nos outros posts eu evito de usar eles, mesmo que eu não esteja usando a comunicação (as vezes eu posso precisar arrumar alguns erros do código).
A principio, nós devemos inicializar o monitor serial com o seguinte comando:
Serial.begin(velocidade);
Onde “velocidade” é o parâmetro da velocidade que você quer. É comum usar 9600 quando não se tem um requisito ou especificação para a velocidade.
O próximo passo é imprimir um determinado valor que você deseja, e para isso, existem dois comandos:
Serial.print(valor), Serial.println(valor) e Serial.write(valor)
Onde “valor” é a informação que você deseja enviar: pode ser uma variável ou uma string (alguma frase). A diferença do print e do println é que o println imprime o valor e pula uma linha. E o write envia o valor em forma binária.
Outra coisa importante é fazer a leitura de informações que são enviadas ao Arduino. Para esse caso, nós temos 2 principais comandos:
Serial.available() e Serial.read()
O Serial.available retorna o número de bytes disponíveis para leitura na porta serial. Ou seja, se for maior que 0, indica que existem dados para serem lidos. E o comando Serial.read() retorna a leitura dos dados da porta serial.
Código de Exemplo 1
Código de um circuito que lê um determinado valor no pino analógico A0 e imprime ele no monitor serial. Entenda mais essa parte com a aula 5, caso você não tenha visto.
1 2 3 4 5 6 7 8 9 10 11 12 13 | int sensor = A0; void setup() { pinMode(sensor, INPUT); Serial.begin(9600); } void loop() { int valor= analogRead(sensor); Serial.print("Valor lido: "); Serial.println(valor); delay(1000); } |
Código de Exemplo 2
Adaptação de um código na página do Arduino. Basicamente lê uma palavra ou caractere e imprime no monitor serial.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | char informacao = 0; void setup(){ Serial.begin(9600); } void loop(){ // entra no if apenas se tiver coisa para ser lida if(Serial.available() > 0){ // le os dados informacao = Serial.read(); // apenas escreve a informacao Serial.println(informacao); } } |
Bibliotecas – Aula 8 – AI
Essa do Plotter Serial é novidade para mim. Vai ser bastante útil. Valeu
De boa. O plotter serial é bem legal mesmo, ajuda muito a entender o sinal pelo tempo.
Puxa vida, muito obrigado por compartilhar tanto conteúdo de valor. Vou continuar seguindo o blog / site e compartilhando
Eu é que fico grato pelo retorno, Flávio. Valeu!
Obrigado pelo seu post bem didático.
Uso muito o plotter serial da IDE com aulas de sensores diversos.
Por nada, Carlos! Eu que fico grato pelo retorno positivo. O plotter é bem útil mesmo, ajuda bastante em várias leituras.
estou coletando dados na porta COM do notebook de arduino UNO, através de sensores de temperatura umidade do ar e do solo. Como faço para gravar estes dados no notebook? ctrl C e ctrl V dá um trabalho insano, existe outra forma menos trabalhosa?
Olá. Você pode tentar gravar os dados em arquivo txt ou csv. Aqui no site tem um post explicando como fazer isso.
Eu consigo recuperar dados do serial monitor? Eu ainda nao tinha acabado de copiar os dados para o bloco de notas quando perdi os dados que estavam no serial monitor e eu preciso deles. Há possibilidade de recuperação?
Infelizmente acredito que não é possível não…