Alberto Brochado, Eugénio Oliveira, Fernando Coelho Alberto Brochado, Eugénio Oliveira, Fernando Coelho
STEM com Robótica
STEM com Robótica
‐Scaling Up Inclusion: Robotics, a STEM ‐
focused Project
‐Scaling Up Inclusion: Robotics, a STEM ‐
focused Project
Centro de Formação de Associação de Escolas Paços de Ferreira, Paredes e Penafiel
STEM com Robótica
Modulação
Sinal PWM
Pulse Width Modulation
(Modulação por Largura de Pulso)
O Arduino UNO possui 6 (seis) portas PWM: 3, 5, 6, 9, 10 e 11.
O sinal PWM pode variar de 0 a 255 e para ativá‐lo basta usar a
seguinte instrução numa porta PWM:
analogWrite (pin, sinal_pwm);
Nota: as portas PWM são todas digitais, porém o sinal é modulado
“como se fosse” um sinal analógico.
08
STEM com Robótica
Conceito de PWM
Pulse With Modulation
(Modulação por largura de pulso)
As grandezas digitais são aquelas que podem ser definidas por meio de saltos entre valores bem definidos dentro de
uma faixa de valores. Um exemplo de elementos que trabalham com estas grandezas são os relógios digitais, de modo
que, nestes, apesar do tempo em si variar continuamente, o visor dos mesmos mostra o tempo em saltos de um em
um segundo.
Em contrapartida, as grandezas analógicas são
aquelas que, ao contrário das grandezas
digitais, podem assumir infinitos valores de
amplitude dentro de uma faixa de valores. O
velocímetro de um carro, por exemplo, pode
ser considerado analógico, pois o ponteiro gira
continuamente conforme o automóvel acelera
ou trava.
STEM com Robótica
Conceito de PWM
Pulse With Modulation
(Modulação por largura de pulso)
Características de uma entrada analógica
Os conversores analógico‐digital do Arduino UNO possuem uma resolução de 10 bits e o intervalo de tensão no
qual são realizadas as discretizações (degraus da escada) é de 0 a 5V, ou seja, este intervalo será dividido
em 1024 pedaços (2
10, onde 10 é a resolução do conversor ) , de forma que, o valor atribuído à tensão existente
num determinado pino será o valor discreto (um dos 1024 valores) mais próximo da mesma.
PWM – Simulando saídas analógicas
Além de possuir portas para realizar a leitura de variáveis analógicas, o Arduino UNO conta também com pinos
que podem ser usados para simularem saídas analógicas através da técnica PWM, que se define então como
uma técnica para obter resultados analógicos em meios digitais.
Este recurso consiste na geração de uma onda quadrada, na qual, controla‐se a percentagem de tempo em que a
onda permanece num nível lógico alto (5v). Esta percentagem é denominada Duty Cycle e sua alteração
provoca mudança no valor médio da onda, indo desde 0V (0% de Duty Cycle) até 5V (100% de Duty Cycle).
STEM com Robótica
Ciclo de Trabalho – Duty ‐ Cycle
O sinal PWM possui um ciclo de trabalho que determina com que frequência o
sinal muda do nível lógico
HIGH
para o nível lógico
LOW
e vice versa.
No Arduino a frequência do PWM pode ser definida entre 32Hz até 62kHz.
Duty cicle = (100 %* largura do pulso) / período
08
Conceito de PWM
STEM com Robótica
Conceito de PWM
Pulse With Modulation
(Modulação por largura de pulso)
Assim, o Duty Cycle corresponde a um número inteiro, que é
armazenado num registrador 8 bits (arduino UNO).
O seu valor irá de 0 (0%) até 255 (100%).
Utilizaremos então a função
map(sensorValue, 0, 1023, 0, 255)
// lê o valor analógico de entrada A0:
sensorValue = analogRead(0);
// mapeia o valor de entrada para a gama de valores de saída:outputValue = map(sensorValue, 0, 1023, 0, 255);
// altera o valor analógico de saída Pin9:analogWrite(9, outputValue);
08
STEM com Robótica
Atuadores
São dispositivos que fazem com que aconteça algo no mundo real. (
outputs
)
Classificação:
Visuais: LED, LCD, Monitor;
Auditivos: buzzer, speaker;
Movimento: motores, válvula, servo;
Táteis: Aquecimento e arrefecimento;
Atuadores analógicos: motores cc (DC); Led controlado por voltagem
Nota: O Arduino não consegue
gerar saídas analógicas
09
Relacionar o arduino com o mundo exterior
STEM com Robótica
Atuadores de movimento
Servo, motores de passo e corrente continua
Uma das formas dos robôs e sistemas automatizados interagirem com o meio ambiente
é através de movimentos físicos. Para esta tarefa encontramos com frequência motores
elétricos.
Existem diversas forma de classificar motores elétricos, uma delas é quanto ao tipo de
corrente: continua ou alternada.
MOTOR CORRENTE CONTÍNUA SERVO
MOTOR PASO A PASO
(28BYJ‐48)STEM com Robótica
Shields
As extensões das placas do Arduino são chamadas de shields.
Existem shields para as mais diversas funcionalidades, por exemplo:
‐ Comunicação ethernet;
‐ Comunicação wifi;
‐ Comunicação bluethooth;
‐ Ponte H;
‐ Banco de relês
‐ ...
Lista official:
playground.arduino.cc/Main/SimilarBoards#goShie
10
Expandir o arduino
STEM com Robótica
Para controlar a quantidade de motores e o sentido de rotação, utilizaremos elementos
denominados por
SHIELD / PONTE‐H
Shield L293D Driver Ponte H
Módulo Ponte H com o CI L298N
Módulo Driver ULN2003
10
Shields
STEM com Robótica
Como funciona a Ponte H? Porquê este nome?
Conceito de Ponte H
As pontes H possuem este nome devido ao formato
em que é montado o circuito, semelhante a letra H.
O circuito utiliza quarto chaves (S1, S2, S3 e S4) que
são acionadas de forma alternada, ou seja, (S1‐S3) ou
(S2‐S4).
Dependendo da configuração entre as chaves
teremos a corrente percorrendo o motor hora por um
sentido, hora por outro.
10
Shields
Alberto Brochado, Eugénio Oliveira, Fernando Coelho Alberto Brochado, Eugénio Oliveira, Fernando Coelho
Centro de Formação de Associação de Escolas Paços de Ferreira, Paredes e Penafiel
STEM com Robótica
Centro de Formação de Associação de Escolas Paços de Ferreira, Paredes e Penafiel
STEM com Robótica
1º Exercício
Utilizando um
sensor de temperatura/humidade DHT11
,
para simular uma estação meteorológica e mostrar os
resultados no monitor serial.
Sensores DHTxx (xx = 11‐21‐22‐33‐44) Estes sensores possuem geralmente, s pinos, GND, +5V e uma única linha de dados. Usa a libraria dht.h, que possui 6 funções básicamente idênticas: read(PIN), read11(PIN), readxx(PIN) Utilização: DHT.read11(DHT11_PIN); ou DHT.read11(5); Esta função devolve: DHTLIB_OK (0) : se o sensor e o checksum está OK. DHTLIB_ERROR_CHECKSUM (‐1) : se o checksum test falhou. DHTLIB_ERROR_TIMEOUT (‐2) : se ocorreu um timeout, communicação falhou. Signal Vcc (+) Gr ound (‐) V CC(+) Signal Não utiliz ado Gr ound (‐) R esis tência 10K pullupBiblioteca:
dht.h
Funções existentes: DHT.humidity e DHT.temperature
STEM com Robótica
1º Exercício
Utilizando um
sensor de temperatura/humidade DHT11
,
para simular uma estação meteorológica e mostrar os
resultados no monitor serial.
#include <dht.h> dht DHT; #define DHT11_PIN 5 void setup() { Serial.begin(115200); Serial.println("DHT ‐ PROGRAMA TESTE“); Serial.print(“Formação STEM com Robótica”); Serial.println(); Serial.println("Tipo,\tstatus,\tHumidade (%),\tTemperatura (C)"); } void loop() { // Leitura de dados Serial.print("DHT11, \t"); int chk = DHT.read11(DHT11_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; case DHTLIB_ERROR_CONNECT: Serial.print("Connect error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // Visualizar dados Serial.print(DHT.humidity, 1); Serial.print(",\t"); Serial.println(DHT.temperature, 1); delay(2000); }STEM com Robótica
2º Exercício
Utilizando um potenciômetro para controlar o brilho de um
LED – efeito fade in / fade out e mostrar os resultados no
monitor serial
const int analogInPin = A0; // pin análógico entradaconst int analogOutPin = 9; // pin analógico de saída
int sensorValue = 0; // valor lido pelo sensor int outputValue = 0; // valor enviado para a saída analógica void setup() { Serial.begin(9600); // inicializar comunicações em 9600 bps } void loop() { sensorValue = analogRead(analogInPin); // ler valor analógico outputValue = map(sensorValue, 0, 1023, 0, 255); analogWrite(analogOutPin, outputValue); // alterar o valor de saída Serial.print("sensor = "); // mostra os valores no Serial Monitor Serial.print(sensorValue); Serial.print("\t output = "); Serial.println(outputValue); // aguarda 2 millisegundos antes do próximo ciclo analógico‐digital delay(2); } 3 pinos: Sinal VCC GND Utilizar o programa existente nos exemplos, denominado: analogInOutserial Vai permitir ler dados analógicos numa porta analógica (A1) compreendidos entre 0 e 1023 e converter para uma gama de 0 até 255, utilizando a função map()
STEM com Robótica
2º Exercício
Mudando a intensidade de um Led de alto brilho
recorrendo a um sinal PWM
const int led_alto_brilho = 3; void setup() { pinMode(led_alto_brilho, OUTPUT); Serial.begin(9600); } void loop() { int i; for (i = 10; i <= 255; i+=10) { analogWrite(led_alto_brilho, i); // Aumenta a intensidade do brilho Serial.println(i); delay(300); } for (i = 255; i >= 5; i‐=10) { analogWrite(led_alto_brilho, i); // Diminui a intensidade do brilho Serial.println(i); delay(300); } delay(3000); }