AULA 4 - Microcontroladores - Engenharia: mudanças entre as edições

De IFSC
Ir para navegação Ir para pesquisar
imported>Fargoud
imported>Fargoud
 
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 20: Linha 20:
* 2 resistores de 1000 Ω
* 2 resistores de 1000 Ω
* 2 chaves digitais tipo ''push-button'';
* 2 chaves digitais tipo ''push-button'';
* 4 chaves digitais ''on-off'';
* 4 chaves digitais ''dip-switch'';
* cabos fêmea-macho
* cabos fêmea-macho


Linha 156: Linha 156:
===EXERCÍCIO 2:===
===EXERCÍCIO 2:===


Escreva o programa que imprime uma tabela ASCII de 0 a 255, com os símbolos e respectivos valores na base decimal.
Escreva o programa que imprime uma tabela ASCII de 0 a 126, com os símbolos e respectivos valores na base decimal.
 


[[SUGESTÃO Solução Exercício 2 - AULA 4 MIC2]]


---------------------
---------------------
Linha 165: Linha 165:


No terceiro teste, vamos acionar, acender e apagar, o led do pino 13 através de comandos de teclado do PC, na interface '''Serial Monitor''', do Arduino.  
No terceiro teste, vamos acionar, acender e apagar, o led do pino 13 através de comandos de teclado do PC, na interface '''Serial Monitor''', do Arduino.  
A função ''Serial.available()'' indica se tem algum dado esperando no buffer de entrada serial. Já ''Serial.read()'' lê este dado '''como caractere''' (em ASCII).


A programação também é simples e bem interessante:  
A programação também é simples e bem interessante:  
Linha 175: Linha 177:
  #define LED 13
  #define LED 13
  int numero;
  int numero;
 
  void setup() {
  void setup() {
     pinMode(LED, OUTPUT);
     pinMode(LED, OUTPUT);
Linha 192: Linha 194:
       }//end if
       }//end if
     }//end if
     }//end if
  }//end while
  }//end loop
  }//end loop


===EXEMPLO 4: acionando leds externos a partir do Monitor Serial ===
===EXEMPLO 4: acionando leds externos a partir do Monitor Serial ===
Linha 228: Linha 228:
===EXERCÍCIO 4:===
===EXERCÍCIO 4:===


Faça o programa que lê um número de 0 a 15 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido.
Faça o programa que lê um número de 0 a 9 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido.
 
[[Sugestão de solução - Exercício 4 - Aula 4 MIC2]]


---------------------
---------------------
Linha 283: Linha 285:
*  e  [http://freeware.the-meiers.org/  ''CoolTerm''], entre outros.
*  e  [http://freeware.the-meiers.org/  ''CoolTerm''], entre outros.


=EXERCÍCIO:=
=KIT DIDATICO ARDUINO=
 
Desenvolva o programa que lê dois valores no Monitor Serial, o primeiro [1-4] que seleciona um entre 4 leds e o segundo [1-3], correspondente à frequência de piscagem daquele led, da forma abaixo:
 
  VALOR    FREQ [Hz]
    1  -  2
    2  -  1
    3  -  0,5
 


Adquirido de [https://pt.aliexpress.com/item/Mega-2560-Project-The-Most-Complete-Ultimate-Starter-Kit-for-Arduino-Mega2560-UNO-Nano-Free-Shipping/32817467401.html LAFVIN]
----
----
[[SUGESTÃO Solução Exercício 2 - AULA 4 MIC2]]


[[MIC2| << Página do curso ]]  
[[MIC2| << Página do curso ]]  

Edição atual tal como às 15h18min de 4 de setembro de 2025

<< Página do curso

PLANO DE AULA


CARGA HORÁRIA: 5 h
CARGA HORÁRIA TEÓRICA: 2 h CARGA HORÁRIA PRÁTICA: 3 h

MATERIAIS

Por aluno:

  • 1 placa Arduino Uno
  • cabo de comunicação/alimentação USB
  • 1 computador PC com software Arduino IDE instalado
  • 1 proto shield para montagens
  • 4 leds vermelhos;
  • 4 resistores de 150 ou 200 Ω
  • 2 resistores de 1000 Ω
  • 2 chaves digitais tipo push-button;
  • 4 chaves digitais dip-switch;
  • cabos fêmea-macho

METODOLOGIA

  • Exposição dialogada dos conteúdos disponíveis, em projetor multimídia.
  • Navegação assistida em outros sites e portais, de conteúdos relacionados.
  • Montagens práticas e desenvolvimento em computador de aplicativos.
  • Testes de verificação e validação.


Comunicação Serial

Apesar do Arduino ser gravado via porta USB, a comunicação se dá como serial padrão (USART). O ATmega328 permite comunicação serial no padrão UART TTL (5 V), que está disponível nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunicação serial através da USB e os drivers FTDI (incluído no software do Arduino) fornecem uma porta virtual para o software no computador.

O software Arduino inclui um Monitor Serial que permite que dados simples de texto sejam enviados e recebidos à placa Arduino.

Os LEDs RX e TX da placa piscam quando os dados estão sendo transferidos ao computador pelo chip FTDI e há conexão USB (mas não quando há comunicação serial pelos pinos 0 e 1).

A biblioteca SoftwareSerial permite comunicação serial por quaisquer dos pinos digitais do Uno.

O ATmega328 também oferece suporte aos padrões de comunicação I2C (TWI) e SPI.

O software do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C.

Para usar a comunicação SPI, veja o manual do ATmega328.

Assim, no Arduino existe uma parte do hardware especifica para a conversão Serial/USB.

Disso resulta a criação de uma porta COM virtual no computador para a comunicação com o Arduino.

Comunser.jpg

Como a comunicação é a serial padrão, é fácil trocar informações entre o computador e o Arduino.

Existe uma ferramenta própria na IDE do Arduino para a comunicação serial.

Monitorserial.jpg

A biblioteca Serial() do Wiring tem todas as funções necessárias para se implementar comunicação serial entre o Arduino e o PC.

A porta serial te permite ler e escrever facilmente dados de e para dispositivos externos.

Isto permite a duas máquinas se comunicarem através de portas seriais de 8 pinos, dos PCs, ou emulads através de um adaptador serial.

Velocidades típicas de comunicação são: 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 e 115200 BPS.

Apenas uma aplicação pode utilizar a porta serial, a cada vez.


As funções mais utilizadas são:

  • begin() Abre a porta serial para leitura ou escrita.
  • read() Retorna um número entre 0 e 255 para o próximo byte que está esperando no buffer. Retorna -1 se não há nenhum byte, embora isto possa ser evitado pelo uso da função available(), que informa se há dado disponível
  • write() Escreve um byte na porta serial.
  • print() Escreve dados (int, float, byte, char, char[], números nas bases (DEC, BIN, OCT or HEX) ou textos na porta serial.
  • println() O mesmo que a função print(), exceto que acrescenta uma linha nova ao final da chamada.
  • available() Retorna o número de bytes disponíveis.
  • peek() Investiga o próximo byte de dados no buffer da porta serial. Não o recupera do buffer. Retorna -1 se não há dado disponível.
  • flush() Descarrega o buffer da porta serial.
  • end() Fecha a porta serial.

EXEMPLO 1: enviando texto para Monitor Serial

 void setup(){
 Serial.begin(9600);
//Inicia a comunicação serial a 9600 bauds
 }
 void loop(){
  Serial.println(“Aprendendo a programar no arduino”);   
// Envia a string “Aprendendo a programar no arduino”       
//para a console
  }


Agora acesse o Monitor Serial, no menu do Arduino.

O resultado é uma sucessão de impressões da string “Aprendendo a programar no arduino”.

Vimos que iniciamos a comunicação serial através do comando serial.begin(9600) que colocamos dentro do setup(){} .

O  valor de 9600 pode variar dependendo da sua aplicação.

Conecte o Arduino no PC, selecione a versão do seu Arduino (UNO, Duemilanove, etc) e porta (COMx, ttyUSBx, ttyACMx) e clique em UPLOAD. Abra o Serial Monitor e selecione 9600 no baud.

Veja mais sobre velocidade da porta serial nesse post: [Baud Rates]

O comando Serial.print(“string aqui”) que faz com que a informação seja impressa no serial monitor.

Adiante veremos outros exemplos do uso do Serial.print, mas por ora quero que reparem que todo comando que não constrói um bloco (não tem “chaves” como o setup e o loop), ou então que não e uma diretiva de pré-processador (#include, #define que veremos adiante tambem)  termina com ponto e vírgula, isso indica o fim do comando.

EXERCÍCIO 1:

Escreva o programa que mostra uma contagem de segundos e minutos, iniciada pelo Arduino, no Monitor Serial.

Sugestão de solução - Exercício 1 - Aula 4 MIC2


EXEMPLO 2: outras instruções para Comunicação Serial

O programa abaixo ilustra as funções write() e print(arg, FORMAT) que permitem formatar em qual forma (texto ou número) ou sistema numérico um determinado valor arg será escrito.

byte estebyte = 35;
void setup() {
   Serial.begin(9600);
}
void loop() {
 Serial.println(" Como enviar valores formatados: ");
 Serial.println("Formato ASCII do valor: ");
 Serial.write(estebyte);
 Serial.println(".");
 Serial.println("Formato DECIMAL:");
 Serial.print(estebyte, DEC);
 Serial.println(".");
 Serial.println("Formato HEXADECIMAL:");
 Serial.print(estebyte, HEX);
 Serial.println(".");
 Serial.println("Formato BINÁRIO:");
 Serial.print(estebyte, BIN);
 Serial.println(".");
 Serial.println("");
 delay(10000);
}//end loop

EXERCÍCIO 2:

Escreva o programa que imprime uma tabela ASCII de 0 a 126, com os símbolos e respectivos valores na base decimal.



EXEMPLO 3: acionando o led do Arduino, via Monitor Serial

No terceiro teste, vamos acionar, acender e apagar, o led do pino 13 através de comandos de teclado do PC, na interface Serial Monitor, do Arduino.

A função Serial.available() indica se tem algum dado esperando no buffer de entrada serial. Já Serial.read() lê este dado como caractere (em ASCII).

A programação também é simples e bem interessante:


#define LED 13
int numero;

void setup() {
   pinMode(LED, OUTPUT);
   Serial.begin(9600);
}
void loop() {
 if(Serial.available() > 0)
  { numero = Serial.read();
    if(numero == '1') // Digitou 1 no Monitor Serial
    { digitalWrite(LED, HIGH);
      Serial.println(" LED ACESO!");
    }
    if(numero == '0') // Digitou 0 no Monitor Serial
     { digitalWrite(LED, LOW);
      Serial.println(" LED APAGADO!");
     }//end if
   }//end if
}//end loop

EXEMPLO 4: acionando leds externos a partir do Monitor Serial

Nosso quarto teste de uso do Monitor Serial vai ser um circuito e programação que acionam dois leds, conforme a montagem abaixo:

Circserial01.jpg

Agora, abra a IDE do Arduino e escreva/compile/carregue a seguinte programação:


 char c;
 void setup(){
   pinMode(2,OUTPUT);
   pinMode(3,OUTPUT);
   Serial.begin(9600);
 }
 void loop()
 {
   if (Serial.available()>0)
   {
     c = Serial.read() - '0';
     Serial.flush();
     digitalWrite(c,!digitalRead(c));
   }
 }

Ao digitar o número 2 no Serial Monitor, irá acender o LED conectado na porta digital 2 do Arduino, e ao digitar novamente o número 2, o LED apagará.

Agora se digitar o número 3, irá acender o LED da porta digital 3 e se digitar novamente o número 3, o LED apagará.


EXERCÍCIO 4:

Faça o programa que lê um número de 0 a 9 no Monitor Serial e acende a respectiva sequência de 4 LEDS externos, correspondente ao valor binário lido.

Sugestão de solução - Exercício 4 - Aula 4 MIC2


EXEMPLO 5: enviando estado de chave para Monitor Serial

Neste teste, o estado de uma chave externa será lido e enviado pro Monitor Serial.

Montagem:

Serial1.jpg

Código:

Serial2.jpg

No protoshield do laboratório:

Proto2.png

Quando pressiona a chave, efeito no Monitor Serial:

Proto3.png


EXERCÍCIO 5:

Crie o programa que lê 4 chaves binárias, do tipo dip-switch e imprime no Monitor Serial qual o valor digitado por meio da sequência de chaves, nos sistemas binário, hexadecimal e decimal.


Outros aplicativos para Comunicação Serial com Arduino

Existem aplicativos externos à plataforma Arduino, que permitem acesso à porta serial, como o PuTTY.

No Menu Session do aplicativo, clique em Serial para escolher o tipo da conexão.

Digite o nome da porta serial na caixa Serial line, e a velocidade, em bauds, na caixa Speed (9600, normalmente):

MIC2putty1.png

Em Terminal, clique em Force On nas seções Local echo e Local line editing:

MIC2putty2.png

Clique no botão Open para abrir a conexão e observe as mensagens sendo enviadas do Arduino ao PuTTY, para um programa arduino que use comunicação serial:


MIC2putty3.png

Outros softwares:

KIT DIDATICO ARDUINO

Adquirido de LAFVIN


SUGESTÃO Solução Exercício 2 - AULA 4 MIC2

<< Página do curso

Leitura das portas digitais AULA 4 - Uso da comunicação serial Leitura e escrita nas portas analógicas>>