Baixe o app para aproveitar ainda mais
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°.
Compartilhar