Buscar

APOSTILA PARTE3a234849

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

APOSTILA DE INTRODUÇÃO A 
COMPUTAÇÃO 
 
 
ENGENHARIA ELÉTRICA E 
ELETRÔNICA 
 
 
 
 
11. MODULADOR DE LARGURA DE PULSO (PWM) 
 
A Modulação de Largura de Pulso, conhecida pela sigla PWM1 é uma 
tecnologia utilizada para manipular a razão cíclica 2 de um sinal. Com essa 
técnica é possível controlar a velocidade dos motores CC, transportar qualquer 
informação sobre um canal de comunicação, bem como utilizá-la como 
conversores para o controle de um servo motor. A técnica PWM é basicamente 
um sinal digital oscilando entre 0V e 5V em uma determinada frequência, como 
se estivéssemos ligando e desligando o pino do Arduino. Essa oscilação gera 
uma onda quadrada, como se fosse o clock, porém o intervalo que o sinal fica 
em 5V e em 0V podem ser diferentes. Na figura 10.1 o sinal está 50% em nível 
lógico baixo e 50% em nível lógico alto. 
 
 
Figura 11.1 – Sinal de uma onda quadrada 
 
O tempo em que o sinal fica em nível lógico alto é chamado de largura de 
pulso e é exatamente a modulação desse pulso que controlamos via software. 
Assim para reduzir ou aumentar, por exemplo, a velocidade do motor deve-se 
diminuir ou aumentar a largura do pulso. 
Na figura 10.2 podemos ver o sinal de um motor em um clico ativo de 
75%, dessa forma o motor irá girar mais rápido que o sinal mostrado na figura 
10.1, pois o valor médio da tensão na figura 10.1 é de 2,5V e na figura 10.2 é de 
3,75V 
 
Figura 11.2 – Ciclo ativo de 75%. 
 
 
1 Pulse Width Modulation 
2 Duty Cycle 
Quando falamos em modular a largura de pulso através de um software, 
na verdade estamos determinamos o ciclo de trabalho (Duty Cycle), ou seja, o 
percentual do tempo em que o sinal fica em nível lógico alto. 
No Arduino UNO apenas alguns pinos são capazes de enviar um sinal 
PWM, esses pinos estão identificados com um “~” na frente do número referente 
à porta digital, no caso os pinos 3, 5, 6, 9, 10 e 11 conforme mostra a figura 11.3. 
Para realizarmos o controle do PWM devemos enviar um sinal analógico que 
pode variar de 0 a 255, que é a resolução da porta analógica, onde “0” seria 0% 
e “255” igual a 100%, porém a saída é um sinal digital, como comentado 
anteriormente, ou seja, uma onda quadrada. 
 
 
Figura 11.3 – Portas com PWM do Arduino 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EXEMPLO I: Variar a intensidade do Led 
 
O exemplo a seguir tem o objetivo de mostrar o comportamento de um 
pino que possui tecnologia PWM. Com base na figura 10.3 onde podemos 
observar o ciclo de trabalho do PWM, iremos utilizar a variação exemplificada 
nesta figura para alterarmos a intensidade do LED em um intervalo de dois 
segundos. 
Na figura 8.2, temos o esquema de ligação do LED ao Arduino. 
 
 
Figura 11.4: Esquema para ligar o LED. 
 
Explicação do circuito: O LED foi ligado ao pino digital 3 que possui PWM e de 
acordo com a variação da largura do pulso especificado teremos a alteração da 
intensidade do LED. 
Código fonte: 
Sintaxe: analogWrite(pin, value); 
 
Parâmetros: 
 pin: o número do pino que se 
deseja escrever. 
 value: valor obtido que pode 
variar entre 0 a 5V. 
Retorno: nada 
Explicação do código fonte: A 
função analogWrite tem a 
void setup() { 
 
} 
void loop() { 
 analogWrite(3, 0); 
 delay(2000); 
 analogWrite(3, 64); 
 delay(2000); 
 analogWrite(3, 127); 
 delay(2000); 
 analogWrite(3, 191); 
 delay(2000); 
 analogWrite(3, 255); 
 delay(2000); 
} 
finalidade de escrever um valor analógico em um pinos digitais que possuem a 
tecnologia PWM. Os valores passados a essa função são chamados ciclo de 
trabalho que podem variar entre 0 até 255, analogicamente, representa uma 
variação de tensão de 0V a 5V. Observe a tabela abaixo: 
 
RENDIMENTO TENSÃO 
(V) 0 - 100% 0 – 255 
0 0 0 
25 64 1,25 
50 127 2,50 
75 191 3,75 
100 255 5,00 
Tabela 11.1: Conversão dos valores correspondentes ao ciclo de trabalho para Volts. 
 
 No código em questão, a cada dois segundos está sendo alterado o valor 
do ciclo de trabalho, variando proporcionalmente o valor da tensão aplicada ao 
LED que está conectado ao pino 3. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Capítulo 11 – Exercícios 
 
1) Fazer um ciclo repetitivo onde a intensidade de um LED aumenta 
gradativamente até chegar a sua luminosidade máxima, a partir deste estado 
a intensidade começa a diminuir gradativamente até apagar. 
▫ Obs.: Utilizar uma estrutura de repetição. 
 
2) Digitar um valor entre 0 e 100, representando a porcentagem de intensidade 
luminosa, no serial monitor do Arduino (100% Maximo e 0% desligado). 
Acender um LED conforme a luminosidade indicada. 
▫ No Serial monitor deverá retornar a porcentagem digitada, O valor 
analógico correspondente e a tensão equivalente. 
 
3) Receber através do Serial Monitor do Arduino uma sequência de três 
números separados por virgula (Ex.: 128,53,237). Os números correspondem 
às intensidades luminosas de um LED RGB, sendo o primeiro a cor vermelha, 
o segundo a cor verde e o terceiro a cor azul. Alternar as cores do LED RGB 
a partir dos valores digitados no Serial Monitor. Seguir a sequência de cores 
da tabela: 
 
 
 
 
Nome da Cor RGB Cor 
Amarelo 255,255,0 
Azul Escuro 0,0,255 
Azul 0,127,255 
Branco 255,255,255 
Púrpura 135,31,120 
Rosa 255,28,174 
Steel Azul 35,107,142 
Verde 0,255,0 
Verde Primavera 127,255,0 
Vermelho 255,0,0 
Tabela 11.2: Tabela de cores para simulação do LED RGB. 
 
 
 
 
 
12. PORTAS ANALÓGICAS 
 
As portas analógicas geralmente são utilizadas para leitura de sinais 
analógicos de diversos sensores, como: temperatura, umidade, presença, 
pressão, etc. Por default, elas estão definidas como entrada. Então, previamente 
não precisam ser configuradas. Caso seja necessário essas portas analógicas 
também podem ser configuradas como portas digitais através da função 
pinMode(). O exemplo a seguir mostra a transformação da porta analógica A0 
em uma saída digital. 
 
pinMode(14, OUTPUT); 
 
O Arduino Uno possui seis portas analógicas conhecidas como A0, A1, 
A2, A3, A4 e A5 que estão localizadas no lado oposto às barras de portas digitais 
conforme a figura 12.1. As portas analógicas aceitam tensões de entrada que 
podem variar entre 0 a 5V, essa tensão é lida pelo conversor analógico/ digital 
(A/D) de 10 bits no microcontrolador do Arduino. 
 
 
Figura 12.1 – Portas analógicas do Arduino 
 
IMPORTANTE: O microcontrolador utilizado na placa Arduino trabalha 
internamente com dados digitais, portanto é necessário traduzir um sinal 
analógico para um valor digital, ou seja, deve-se efetuar uma conversão 
analógica/ digital. 
 
 
CONVERSOR ANALÓGICO/ DIGITAL (A/ D) 
 
O conversor analógico/digital (A/D) consiste em converter o sinal 
analógico para um valor digital, dessa forma podemos quantificar o sinal 
presente. A quantificação do valor analógico é feita conforme a quantidade de 
bits da sua resolução. A resolução é dada pela seguinte equação: 
 
𝑟𝑒𝑠𝑜𝑙𝑢çã𝑜 = 
𝑉𝑟𝑒𝑓
2𝑛
 
 (eq. 12.1) 
 
Vref: tensão de referência do conversor A/D; 
n: número de bits do conversor. 
 
O conversor A/D do microcontrolador ATmega328 possui 10 bits de 
resolução, a sua tensão de entrada pode variar de 0V até o valor de VCC. Com 
base na equação 12.1, se trabalharmos com a referência em VCC o menor valor 
que pode ser lido será: 
𝑟𝑒𝑠𝑜𝑙𝑢çã𝑜= 
5
1023
= 4,89𝑚𝑉 
 
OBS.: 210 = 1024 → mas utilizamos 1023 na equação porque a contagem começa do zero 
 
Assim o valor 4,89𝑚𝑉 é o degrau para uma conversão de 10 bits com 
referência em 5V. Caso a referência externa for selecionada, a resolução 
dependerá do valor de tensão aplicada ao pino AREF. 
 
 
EXEMPLO I: Efetuando a leitura do potenciômetro em uma entrada 
analógica. 
 
A figura 12.2 demonstra como ligar um potenciômetro a uma porta 
analógica e como verificar a variação desse dispositivo através do Serial Monitor. 
 
 
 
 
 
 
 
Figura 12.2: Esquema para ligar o potenciômetro. 
 
Explicação do circuito: O potenciômetro possui uma resistência elétrica 
ajustável. É um resistor de três terminais onde a conexão central é deslizante e 
manipulável. Geralmente é utilizado para alterar características de entrada/saída 
de aparelhos eletrônicos, como volume, cor, tempo de funcionamento, etc. O 
pino do meio do potenciômetro foi ligado ao pino A0 da placa Arduino e os outros 
dois pinos foram ligados no 5V e no GND. 
 
Código fonte: 
 
Sintaxe: analogRead(pin); 
Parâmetros: 
 pin: o número da porta analógica 
que se deseja ler. 
Retorno: um valor de 0 a 1023. 
 
 
 
Explicação do código fonte: Primeiramente foram definidas as variáveis do 
sistema sendo do tipo inteiro (int), que tem a capacidade de armazenar valores 
 
int potenciometro = 0; 
int valor = 0; 
 
void setup() { 
 
Serial.begin(9600); 
} 
 
void loop() { 
 
valor =analogRead(potenciometro); 
Serial.println(valor); 
delay(100); 
 
} 
na faixa de -32.768 a 32.767. A sintaxe int potenciometro = 0 define a porta 
analógica a qual o potenciômetro foi conectado. Na sintaxe seguinte, int valor = 
0, inicializa a variável “valor” com zero, esta foi criada para receber o valor do 
potenciômetro lido pelo pino analógico. Na função setup foi inicializada a 
comunicação serial através da sintaxe Seria.begin(9600), com uma taxa de 
transferência em bits por segundo de 9600 bauds. Dentro da função loop temos 
inicialmente o comando valor=analogRead(potenciometro), a variável “valor” 
recebe a leitura da informação que está sendo inserida no pino analógico, esta 
é feita através da sintaxe analogRead(potenciometro). Para visualizarmos a 
variação do potenciômetro é necessário imprimir os dados recebidos no Serial 
Monitor com o comando Serial.println(valor) e para este exemplo foi ajustado um 
tempo de atualização da informação lida de 100 milisegundos, delay(100). 
Então, ao variarmos o potenciômetro os valores serão alterados 
proporcionalmente ao giro, assumindo valores entre 0 e 1023. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Capítulo 12 – Exercícios 
 
1) Controlar a intensidade luminosa de um LED através de um potenciômetro 
ligado ao Arduino. 
 
Figura 12.3a - Sugestão de montagem do circuito referente ao exercício 1. 
 
Figura 12.3b – Diagrama esquemático da sugestão de montagem do circuito referente ao 
exercício 1. 
 
2) Utilizar um potenciômetro para variar os valores analógicos e acionar o LED 
RGB. 
 Definir uma escala referente a cada cor do RGB. 
 Se o potenciômetro estiver na região da direita o LED na cor vermelha 
deve acender. 
 Se o potenciômetro estiver na região central o LED na cor verde deve 
acender. 
 Se o potenciômetro estiver na região da esquerda o LED na cor azul 
deve acender. 
3) Aumentar e diminuir a velocidade do motor com através de um potenciômetro 
e disponibilizar no Serial Monitor a porcentagem de tensão aplicada no motor. 
 
Figura 12.4a - Sugestão de montagem do circuito referente ao exercício 3. 
 
 
 
Figura 12.4b – Diagrama esquemático da sugestão de montagem do circuito referente ao 
exercício 3. 
 
 
 
 
13. SENSORES (LM35, DHT11, LDR) 
 
Nesse capítulo será abordado o funcionamento especificações dos 
sensores de temperatura, umidade e luminosidade. 
 
Sensor de Temperatura LM35: é um sensor muito simples de utilizar, pois ele 
não precisa de nenhuma calibração inicial, basta alimentá-lo que 
automaticamente o sinal de saída é gerado, outra facilidade é que a saída do 
sensor apresenta uma tensão linear relativa à temperatura. O sensor LM35 e a 
especificação dos terminais podem ser visualizados na tabela 13.1 
 
 
DHT11 
1 VCC 
2 OUT 
3 GND 
Tabela 13.1: Tabela com a especificação dos terminais do sensor LM35. 
 
Especificações: 
Tensãode operação: 4 – 30VDC 
Precisão: 10mV/ ºC 
Faixa de temperatura: - 55ºC à 150ºC 
 
Sensor DHT11: é um sensor de temperatura e umidade relativa. Diferentemente 
do LM35 que apresenta valores analógicos em sua saída o DHT11 disponibiliza 
sinais digitais, pois possui internamente um microcontrolador que trata os sinais 
previamente. O sensor DHT11 e a especificação dos terminais podem ser 
visualizados na tabela 13.2 
 
 
DHT11 
1 VCC 
2 DATA 
3 NC 
2 GND 
Tabela 13.2: Tabela com a especificação terminais do sensor DHT11. 
Especificações: 
Tensão de operação: 3 – 5VDC 
Faixa de umidade: 20 – 90% de umidade relativa (RH) 
Faixa de temperatura: 0ºC à 50ºC 
 
Light Dependent Resistor (LDR): O LDR é um dispositivo semicondutor cuja 
resistência elétrica varia conforme a luminosidade aplicada, sua superfície é 
revestida de um material fotossensível os quais estão conectados a dois 
terminais. Esse material quando exposto a luz oferece uma resistência muito 
baixa e quando não há luz sua resistência aumenta. O LDR pode ser visualizado 
na figura 13.3. 
 
 
Figura 13.3: LDR. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
EXEMPLO I: Como converter o valor analógico recebido de um sensor 
conectado a porta analógica 
 
 
 Para exemplificar a conversão dos dados recebidos por um sensor em 
uma porta analógica será utilizado neste exemplo o sensor LM35, figura 13.4. 
 
 
Figura 13.4: Sensor de temperatura LM35 
 
Quando utilizamos um sensor ou qualquer outro dispositivo eletrônico é 
necessário consultarmos as especificações (datasheet) fornecidas pelo 
fabricante do componente, pois só assim podemos referenciar corretamente os 
terminais de alimentação e os terminais correspondentes à entrada/saída de 
dados. De acordo com as especificações, o sensor de temperatura LM35 possui 
uma resolução de 10mV para cada 1°C. Como já foi mencionada, a porta 
analógica tem uma resolução de 10 bits, ou seja, valores que irão variar de 0 a 
1023. Então para convertermos a informação recebida para graus é necessário 
primeiramente efetuar os seguintes cálculos: 
 
𝑟𝑒𝑠𝑜𝑙𝑢çã𝑜 𝑑𝑎 𝑝𝑜𝑟𝑡𝑎 𝑎𝑛𝑎𝑙ó𝑔𝑖𝑐𝑎 = 
𝑉𝑟𝑒𝑓
1023
 = 
5
1023
= 0,0048875 ≅ 4,89 𝑚𝑉 - eq. (13.1) 
 
𝑐𝑜𝑛𝑠𝑡𝑎𝑛𝑡𝑒 𝑑𝑒 𝑐𝑜𝑛𝑣𝑒𝑟𝑠ã𝑜 =
4,89 𝑚𝑉
10 𝑚𝑉
= 0,489 - eq. (13.2) 
 
𝑟𝑒𝑠𝑢𝑙𝑡𝑎𝑑𝑜 𝑒𝑚 °𝐶 = 𝑣𝑎𝑙𝑜𝑟 𝑑𝑖𝑔𝑖𝑡𝑎𝑙 𝑙𝑖𝑑𝑜 ∗ 0,489 - eq. (13.3) 
 
Na equação 13.1 temos a representação do cálculo da base de conversão 
analógica. Na equação 13.2 temos a constante de conversão que irá ser utilizada 
para transformar o valor digital lido para grau Celsius, como se pode observar na 
equação 13.3. 
 
EXEMPLO II: Como utilizar o sensor DHT11 
 
O sensor DHT11 possui uma biblioteca específica de trabalho a DHT, o que 
facilita a sua utilização, assim para o mesmo funcionar basta ligar apenas o VCC, 
GND e DATA. 
 
Código Fonte: 
Sintaxe: 
NomeObjeto.setup(pin); 
Parâmetros: 
 Sdht.setup(2): Indica qual 
o pino em que o sensor está 
ligado. 
Retorno: nadaCódigo Fonte: 
Sintaxe: Objeto.getHumidity() 
Parâmetros: 
 Sdht.getHumidity(): 
executa o método da biblioteca 
que lê o valor da umidade. 
Retorno: retorna o valor da 
umidade medida pelo sensor. 
 
 
 
 
 
 
#include "DHT.h" 
DHT Sdht; 
 
void setup(){ 
 Serial.begin(9600); 
 Serial.println(); 
 Sdht.setup(2); 
} 
 
void loop(){ 
 delay(1000); 
 float umidade = Sdht.getHumidity(); 
 float temp = Sdht.getTemperature(); 
 Serial.print("Sensor - "); 
 Serial.print(Sdht.getStatusString()); 
 Serial.print("\t Umidade = "); 
 Serial.print(umidade); 
 Serial.print("\t Temperatura = "); 
 Serial.println(temp); 
} 
#include "DHT.h" 
DHT Sdht; 
 
void setup(){ 
 Serial.begin(9600); 
 Sdht.setup(2); 
} 
 
void loop(){ 
 delay(1000); 
 float umidade = Sdht.getHumidity(); 
 float temp = Sdht.getTemperature(); 
 Serial.print("Sensor - "); 
 Serial.print(Sdht.getStatusString()); 
 Serial.print("\t Umidade = "); 
 Serial.print(umidade); 
 Serial.print("\t Temperatura = "); 
 Serial.println(temp); 
} 
 
Código Fonte: 
Sintaxe: Objeto.getTemperature() 
Parâmetros: 
Sdht.getTemperature (): executa o 
método da biblioteca que lê o valor 
da temperatura. 
Retorno: retorna o valor da 
temperatura medida pelo sensor. 
 
 
 
 
 
 
Código Fonte: 
Sintaxe: 
Objeto.getStatusString() 
Parâmetros: 
Sdht.getStatusString (): executa 
o método da biblioteca que verifica 
se o sensor está em operação na 
porta indicada. 
Retorno: Se o sensor estiver 
funcionando retorna a String “OK”, 
caso contrário retorna a String 
“TIMEOUT”. 
 
 
Explicação do código fonte:o terminal data (2) do sensor DHT11 foi ligado ao 
pino 2 do Arduino. A seguir foi criada uma variável DHT (Sdht) do tipo da 
biblioteca. No setup() a comunicação serial e foi iniciado que o sensor esta ligado 
ao pino 2 do arduino (Sdht.setup(2)). Na rotina loop() foram declaradas as 
variaveis do tipo float para armazenarem os valores da umidade e da 
temperature, essas variaveis são inicializadas com os respectivos valores 
#include "DHT.h" 
DHT Sdht; 
 
void setup(){ 
 Serial.begin(9600); 
 Sdht.setup(2); 
} 
 
void loop(){ 
 delay(1000); 
 float umidade = Sdht.getHumidity(); 
 float temp = Sdht.getTemperature(); 
 Serial.print("Sensor - "); 
 Serial.print(Sdht.getStatusString()); 
 Serial.print("\t Umidade = "); 
 Serial.print(umidade); 
 Serial.print("\t Temperatura = "); 
 Serial.println(temp); 
} 
 
#include "DHT.h" 
DHT Sdht; 
 
void setup(){ 
 Serial.begin(9600); 
 Sdht.setup(2); 
} 
 
void loop(){ 
 delay(1000); 
 float umidade = Sdht.getHumidity(); 
 float temp = Sdht.getTemperature(); 
 Serial.print("Sensor - "); 
 Serial.print(Sdht.getStatusString()); 
 Serial.print("\t Umidade = "); 
 Serial.print(umidade); 
 Serial.print("\t Temperatura = "); 
 Serial.println(temp); 
} 
 
através dos métodos Sdht.getHumidity() e Sdht.getTemperature (), o 
funcionamento do sensor é verificado e exibido no serial Monitor através do 
método Sdht.getStatusString() em seguida são exibidos os valores da umidade 
e da temperatura no serial Monitor. 
 
Esquema de Montagem. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Capítulo 13 – Exercícios 
 
1) Realizar a leitura dos sinais analógicos do sensor de temperatura LM35 e 
disponibilizar os dados primeiramente no Serial monitor, em seguida mostre 
o valor no Display LCD. 
 
 
 
Figura 13.5a - Sugestão de montagem do circuito referente ao exercício 1. 
 
 
 
 
Figura 13.5b – Diagrama esquemático da sugestão de montagem do circuito referente ao 
exercício 1. 
 
 
 
2) Utilizar o display LCD para exibir a temperatura disponibilizada pelo sensor 
LM35. Utilizar dois botões para seleção da temperatura em graus Celsius (º 
C) e em Kelvin (º K). 
 Equivalência: 1º C = 274.15 º K 
 
 
 
 
 
 
 
 
3) Realizar a leitura os sinais do sensor de temperatura/umidade DHT11 e 
disponibilizar os dados no Display LCD. 
 
 
4) Utilizar o LDR para acender os LEDs de acordo com a intensidade da luz. 
 Cada LED deve corresponder a uma faixa de intensidade de luz. 
 
 
Figura 13.6 - Sugestão de montagem do circuito referente ao exercício 4. 
 
 
Botão 1 
Pressionado 
Botão 2 
Pressionado 
14. SERVO MOTOR 
 
O servo motor é um dispositivo eletromecânico que se movimenta 
precisamente através de comandos, nesse caso comandos elétricos. Porém 
diferentemente dos motores CC os servos motores não tem rotação contínua, 
sua movimentação ocorre dentro de um range de limite de ângulos especificados 
pelo fabricante. 
Quando queremos movimentar o servo motor, devemos enviar o ângulo que 
queremos em forma de pulso, então a posição atual do eixo desse dispositivo é 
verificada, internamente o servo possui um circuito de controle que faz essa 
verificação e em seguida se o servo não estiver na posição desejada o eixo é 
reposicionado. A direção de rotação do motor do servo vai depender também da 
posição do potenciômetro, o motor vai girar na direção que levar o potenciômetro 
até a posição correta. Um detalhe importante é que quando o servo se 
movimenta até o valor do ângulo desejado ele se mantém na posição, se 
forçamos o eixo ele se movimenta e volta para o ângulo determinado. 
O servo em estudo é constituído por: circuito de controle, potenciômetro, 
motor, engrenagens e caixa, como podem ser observados na figura 14.1. 
 
Figura 14.1 – Componentes e vista interna do servo motor 
 
Descrição dos componentes internos do servo motor: 
 
• Circuito de controle: responsável pela recepção dos sinais enviados na 
entrada no servo motor, por monitorar o potenciômetro, por acionar o motor e 
direcioná-lo na posição correta. E poder ser constituído por um microcontrolador 
ou um circuito lógico. 
• Potenciômetro: ligado ao eixo de saída do servo, a posição é monitorada 
a partir dele. 
• Motor: movimenta as engrenagens e o eixo principal do servo. 
• Engrenagens: reduzem a rotação do motor, transferem mais torque ao eixo 
principal de saída e movimentam o potenciômetro junto com o eixo. 
• Caixa do servo: acomoda os componentes internos do servo. 
 
O servo motor trabalha com sinal PWM e a largura do pulso, no caso o tempo 
que ele fica em nível lógico alto determina um ângulo no servo moto, vale 
ressaltar que cada servo tem características diferentes dependendo do 
fabricando. O Servo utilizado pode variar entre 0° a 180°. O sinal enviado ao 
servo é de 0V ou 5V, porém como falado anteriormente o que varia é o tempo 
que o sinal fica em nível lógico alto, o circuito de controle do servo monitora este 
sinal em intervalos de 20ms, se dentro desse intervalo houver alguma alteração 
do sinal a posição do eixo será alterada para coincidir com o sinal que recebeu. 
 
Figura 14.2 – Sinais de controle do servo motor 
 
 Como podemos observar no diagrama da figura 14.2, que representa a 
relação da variação da largura de pulso e o ângulo correspondente. Quando 
temos um sinal com largura de pulso de 1ms corresponde à posição do servo 
em 0° grau, quando a largura do pulso for de 1,5 ms corresponde a posição em 
90° graus e quando for de 2 ms corresponde a posição em 180°. O servo motor 
assim como outros dispositivos possui uma biblioteca para facilitar a execução 
de algumas funções. Abaixo temos a descrição dos métodos existentes nessa 
biblioteca. 
• BIBLIOTECA<Servo.h> 
o attach(): esta função referencia para variável do tipo Servo o número do 
pino ao qual o servo motor está ligado. 
Sintaxe: variavel.attach(pin); 
 
o write(): envia ao servo motor o ângulo que ele deve posicionar-se. 
Sintaxe: variavel.write(ângulo); 
 
o writeMicroseconds(): determina a largura de pulso expressa em 
microsegundos, assim, o servo é posicionado em um determinado ponto. 
Normalmente, com um pulso de 1000 o servo é totalmente posicionado à 
esquerda, com um pulso de 2000 para à direita e com 1500 o servo fica 
centralizado. Mas, essa relação dos microssegundos com o 
posicionamento do servo pode variar de fabricante para fabricante. 
Sintaxe: variavel.writeMicroseconds(µs); 
 
o read(): lê o ângulo atual do servo motor e retornao valor que será 
expresso em um range entre 0° a 180°. 
Sintaxe: variavel.read(); 
 
o attached():verifica se o servo motor está ligado a algum pino e retorna 
uma informação booleana (true ou false). 
Sintaxe: variavel.attached(); 
 
o detach(): ao contrário da função attach(), esta função desvicula o pino do 
servo referente ao sinal de controle que está conectado ao Arduino. 
Exemplo: Vamos supor que estamos trabalhando com saídas do Arduino 
multiplexadas, para efetuar o controle do servo motor executamos a 
função attach() e se quisermos usar o pino que está vinculado ao servo 
pra outra finalidade, executamos a função detach() para fazer a liberação 
do pino . 
Sintaxe: variavel.detach(); 
 
EXEMPLO I – ACIONANDO O SERVO MOTOR COM O ARDUINO 
 
No exemplo abaixo demonstraremos como efetuar as ligações do servo 
motor ao Arduino, figuras 14.3a e 14.3b. 
 
Figura 14.3a – Sugestão de montagem do circuito do servo motor na 
protoboard. 
 
Figura 14.3b – Diagrama esquemático de montagem do circuito do servo 
motor. 
Explicação do circuito: Como podemos visualizar na figura 3a, o servo motor 
possui três frios, sendo um fio para enviarmos o sinal e os outros dois 
correspondentes a alimentação do circuito. O dispositivo em questão trabalho 
com sinal PWM, devido a isso, neste exemplo estamos ligando o fio 
correspondente ao sinal (fio amarelo) no pino digital 3 do Arduino. Poderíamos 
ligar o fio amarelo em qualquer outro pino que possui a tecnologia PWM. 
Código fonte: 
 
 
 
 
 
 
 
 
 
 
Explicação do código: Primeiramente importamos a biblioteca <Servo.h>, pois 
ela contém os controles para o servo motor. A seguir, criamos uma variável 
chamada motor que é do tipo Servo. Na funçãosetup executamos o método 
motor.attach(3), este método informa que o cabo de sinal do servo motor esta 
ligado ao pino digital 3 do Arduino. Na função loop inicialmente temos o comando 
motor.write(0), com este comando enviamos ao servo o ângulo que ele deve se 
posicionar. Pode-se perceber que a cada 1 segundo a única informação que está 
sendo alterada é o valor do ângulo. Portanto, inicialmente o servo está na 
posição 0°, após um segundo, é posicionado a 90°, um segundo depois para 
180° e pra finalizar, passado um segundo o servo retorna pra posição 0° e inicia 
novamente o processo. 
 
#include <Servo.h> 
Servo motor; 
void setup() 
{ 
motor.attach(3); 
} 
void loop() 
{ 
motor.write(0); 
delay(1000); 
motor.write(90); 
delay(1000); 
motor.write(180); 
delay(1000); 
} 
Capítulo 14 – Exercícios 
1) Utilize uma estrutura de repetição para incrementar e decrementa os graus de 
posicionamento do servo motor. 
 
2) Controlar um servo motor com um potenciômetro através do Arduino. Ao girar 
o potenciômetro o braço do servo deverá responder ao movimento de forma 
proporcional a velocidade e ao sentido do giro do potenciômetro. 
 
3) Controlar o servo através do Serial Monitor de acordo com as condições 
abaixo: 
• Inicialmente o servo deve iniciar na posição equivalente a 90°; 
• Ao digitar “d” no Serial Monitor deve-se adicionar 20 posições para à direita; 
• Ao digitar “e” no Serial Monitor deve-se adicionar 20 posições para à esquerda; 
• Se atingir os extremos de 0° ou 180°, o servo retornar a posição definida 
inicialmente. 
 
4) Utilizar dois botões, um para incrementar e outro para decrementar os graus 
de posicionamento do servo, mostrar no Serial Monitor o valor do ângulo e exibir 
VALOR MÁX. e VALOR MÍN., se o ângulo atingir os extremos de 0° ou 180°.

Outros materiais