AULA 4 - Microcontroladores - Engenharia: mudanças entre as edições
imported>Fargoud |
imported>Fargoud |
||
| (26 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 ''dip-switch''; | |||
* cabos fêmea-macho | * cabos fêmea-macho | ||
| Linha 31: | Linha 32: | ||
</blockquote> | </blockquote> | ||
=Comunicação Serial= | =Comunicação Serial= | ||
| Linha 110: | Linha 110: | ||
Vimos que iniciamos a comunicação serial através do comando serial.begin(9600) que colocamos dentro do setup(){} . | 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 | 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: | |||
[[http://www.tech-faq.com/difference-between-bit-rate-and-baud-rate.html Baud Rates]] | [[http://www.tech-faq.com/difference-between-bit-rate-and-baud-rate.html Baud Rates]] | ||
| Linha 117: | Linha 121: | ||
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. | 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; | byte estebyte = 35; | ||
void setup() { | void setup() { | ||
Serial.begin(9600); | Serial.begin(9600); | ||
} | } | ||
| Linha 149: | Linha 151: | ||
Serial.println("."); | Serial.println("."); | ||
Serial.println(""); | Serial.println(""); | ||
delay(10000); | |||
}//end loop | }//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: | |||
<!----------- | |||
[[image: progserial.jpg|center]] | |||
ou */ -------> | |||
#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 === | ===EXEMPLO 4: acionando leds externos a partir do Monitor Serial === | ||
Nosso | |||
Nosso quarto teste de uso do Monitor Serial vai ser um circuito e programação que acionam dois leds, conforme a montagem abaixo: | |||
[[image: circserial01.jpg|center]] | [[image: circserial01.jpg|center]] | ||
| Linha 207: | Linha 221: | ||
} | } | ||
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: | |||
[[image: serial1.jpg|center]] | |||
Código: | |||
[[image: serial2.jpg|center]] | |||
No protoshield do laboratório: | |||
[[image: proto2.png|center]] | |||
Quando pressiona a chave, efeito no Monitor Serial: | |||
[[image: proto3.png|center]] | |||
===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 [https://www.putty.org/ 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): | |||
[[image: MIC2putty1.png|center]] | |||
Em ''Terminal'', clique em ''Force On ''nas seções ''Local echo'' e ''Local line editing'': | |||
[[image: MIC2putty2.png|center]] | |||
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: | |||
[[image: MIC2putty3.png|center]] | |||
Outros softwares: | |||
* [http://www.gnu.org/software/screen ''GNU Screen''], | |||
* [http://realterm.sourceforge.net/ ''RealTerm''], | |||
* e [http://freeware.the-meiers.org/ ''CoolTerm''], entre outros. | |||
=KIT DIDATICO ARDUINO= | |||
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
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.
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.
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:
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:
Código:
No protoshield do laboratório:
Quando pressiona a chave, efeito no Monitor Serial:
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):
Em Terminal, clique em Force On nas seções Local echo e Local line editing:
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:
Outros softwares:
- GNU Screen,
- RealTerm,
- e CoolTerm, entre outros.
KIT DIDATICO ARDUINO
Adquirido de LAFVIN
SUGESTÃO Solução Exercício 2 - AULA 4 MIC2
| Leitura das portas digitais | AULA 4 - Uso da comunicação serial | Leitura e escrita nas portas analógicas>> |
|---|









