Buscar

prática5_andre_henrique_murillo

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

exp1.ino
 #include <LiquidCrystal.h>
 LiquidCrystal lcd(8,9,4,5,6,7);
 //Definicoes pinos Arduino ligados a entrada da Ponte H
 int IN1 = 44;
 int IN2 = 45;
 int step=10;
 int val=50;
 int keyValue=0;
 #define keyup 1
 #define keydown 2
void motorInput (float input)
{
 if(input<0){
 input=max(input,-100);
 float v_map=map(input*-1,0,100,0,255);
 analogWrite(IN1,(int) v_map);
 analogWrite(IN2,0);
 }
 else{
 input=min(input,100);
 float v_map=map(input,0,100,0,255);
 analogWrite(IN2,(int) v_map);
 analogWrite(IN1,0);
 }
}
 void setup()
 {
 //Define os pinos como saida
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 }
 void keypadRead(){
 int analogKey = analogRead (0);
 if (analogKey<200){
 keyValue=1;
 val=val+step;
 }
 else if (analogKey<400){
 keyValue=2;
 val=val-step;
 }
 }
 void loop()
 {
 motorInput(val);
 displayMenu();
 delay(10);
 keypadRead();
 }
 void displayMenu(){
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("rpm do motor:");
 lcd.print(val);
 }
exp2.ino
 #include <LiquidCrystal.h>
 #include <MsTimer2.h>
 LiquidCrystal lcd(8,9,4,5,6,7);
 //Definicoes pinos Arduino ligados a entrada da Ponte H
 int IN1 = 44;
 int IN2 = 45;
 int step=10;
 int val=50;
 int keyValue=0;
 int leitura=0;
 float rpm=0;
 #define keyup 1
 #define keydown 2
 #define analogpin A3
void flash() {
 static boolean output=HIGH;
leitura=analogRead(13);
rpm=leitura*0.5;
 digitalWrite(13,output);
 output=!output;
}
void motorInput (float input)
{
 if(input<0){
 input=max(input,-100);
 float v_map=map(input*-1,0,100,0,255);
 analogWrite(IN1,(int) v_map);
 analogWrite(IN2,0);
 }
 else{
 input=min(input,100);
 float v_map=map(input,0,100,0,255);
 analogWrite(IN2,(int) v_map);
 analogWrite(IN1,0);
 }
}
 void setup()
 {
 pinMode(13,OUTPUT);
 MsTimer2::set(500,flash);
 MsTimer2::start();
 //Define os pinos como saida
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 }
 void keypadRead(){
 int analogKey = analogRead (0);
 if (analogKey<200){
 keyValue=1;
 val=val+step;
 }
 else if (analogKey<400){
 keyValue=2;
 val=val-step;
 }
 }
 void loop()
 {
 motorInput(val);
 displayMenu();
 delay(100);
 keypadRead();
 }
 void displayMenu(){
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("rpm:");
 lcd.print(rpm);
 }
exp3.ino.txt
#include <LiquidCrystal.h>
#include <MsTimer2.h>
LiquidCrystal lcd(8,9,4,5,6,7);
// Definições pinos Arduino ligados à entrada da Ponte H
int IN1 = 44;
int IN2 = 45;
int step=10;
int val=50;
int keyValue=0;
int leitura=0;
float rpm=0;
#define keyup 1
#define keydown 2
#define analogpin A3
void flash() {
 static boolean output=HIGH;
 leitura=analogRead(13);
 rpm=leitura*0.5;
 digitalWrite(13,output);
 output=!output;
}
void motorInput(float input) {
 if(input<0){
 input=max(input,-100);
 float v_map=map(input*-1,0,100,0,255);
 analogWrite(IN1, (int) v_map);
 analogWrite(IN2, 0);
 }
 else{
 input=min(input,100);
 float v_map=map(input,0,100,0,255);
 analogWrite(IN2, (int) v_map);
 analogWrite(IN1, 0);
 }
}
void setup() {
 pinMode(13, OUTPUT);
 MsTimer2::set(500, flash);
 MsTimer2::start();
 
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 
 lcd.begin(16, 2); // Inicialização do display LCD
}
void keypadRead() {
 int analogKey = analogRead(0);
 if (analogKey < 200) {
 keyValue=1;
 val=val+step;
 } else if (analogKey < 400) {
 keyValue=2;
 val=val-step;
 }
}
void loop() {
 motorInput(val);
 displayMenu();
 delay(100);
 keypadRead();
}
void displayMenu() {
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("rpm:");
 lcd.print(rpm);
}
Pr?tica5.pdf
Laboratório de Controle e Servomecanismo
Prática 5: Acionamento de um motor CC.
ANDRÉ LUÍS CORELIANO (RA:745948)
HENRIQUE CRAVEIRO D’ANTONIO (RA:791375)
MURILLO JOSÉ SUDAHIA GODOY (RA:789974)
TURMA C
12/08/2023
1 Descrição do experimento
A prática 5 serviu para aprender sobre como o microcontrolador Arduino pode ser
usado para controlar a velocidade e o sentido de rotação de um motor CC, através do
uso de uma ponte H. É importante salientar que os códigos feitos durante a aula foram
enviados junto a esse relatório por meio de uma pasta .zip na plataforma ava.
2 Execução do experimento
2.1 Experiência 1
2.1.1 Código 1
Essa imagem mostra o display do lcd, que por sua vez mostra o rpm do motor naquele
instante. O código usado foi nomeado como exp1.ino e este código utiliza um Arduino
em conjunto com um display LCD e um teclado analógico para controlar um motor de
corrente contı́nua utilizando uma ponte H L298. O código define os pinos de controle da
ponte H e demonstra como girar o motor no sentido horário, pará-lo, girá-lo no sentido
anti-horário e, em seguida, pará-lo novamente.
O código inclui a biblioteca LiquidCrystal para permitir o uso de um display LCD.
Em seguida, um objeto LiquidCrystal chamado lcd é criado e definido com os pinos de
conexão do display, step define o incremento/decremento da velocidade do motor quando
os botões do teclado analógico forem pressionados. val é a variável que armazena a
1
velocidade atual do motor. keyValue é usado para rastrear o valor do botão pressionado no
teclado analógico. keyup e keydown são constantes definidas para representar os valores
dos botões de aumento e diminuição. A função, motorInput, controla o motor com base
no valor de entrada passado como argumento. Se o valor for negativo, o motor gira
em uma direção; se for positivo, gira na direção oposta. A função utiliza o comando
analogWrite para controlar a intensidade da tensão nos pinos da Ponte H, determinando
assim a velocidade do motor. keypadRead lê o valor analógico de um teclado analógico
conectado ao pino analógico 0: se o valor lido for inferior a 200, o botão de aumento
é pressionado (keyup), se estiver entre 200 e 400, o botão de diminuição é pressionado
(keydown). Isso ajusta o valor de val de acordo com o passo definido. No loop, a função
motorInput é chamada para controlar o motor com base no valor atual de val. Em seguida,
a função displayMenu atualiza o display LCD para mostrar a velocidade atual do motor.
O loop também chama keypadRead para verificar se algum botão foi pressionado e ajusta
o valor de val conforme necessário. displayMenu limpa o display LCD e imprime a
mensagem ”rpm do motor:”seguida pelo valor atual de val.
2.2 Experiência 2
2.2.1 Código 2
O programa que faz a leitura da velocidade do tacômetro a cada 10ms foi nomeado
como exp2.ino.
Além das funções utilizadas no código anterior esse código inclui: biblioteca MsTi-
mer2 é incluı́da para a interrupção do temporizador. leitura armazena o valor lido de um
pino analógico (usado para medir a velocidade do motor). rpm é a variável que armazena
a velocidade do motor em RPM. A função, flash, é uma interrupção do temporizador que
é chamada a cada 500 ms. Ela lê um valor analógico do pino 13 e calcula a velocidade do
motor em RPM. Além disso, ela alterna o estado do pino 13, o que fará com que um LED
conectado a esse pino pisque a cada interrupção. No setup, o pino 13 é configurado como
saı́da (para controlar o LED). Além disso, a interrupção do temporizador é configurada
para chamar a função flash a cada 500 ms. Os pinos IN1 e IN2 são configurados como
saı́da, como no código anterior.
2.3 Experiência 3
2.1.3 Código 3
O programa pedido aqui foi nomeado como exp3.ino. Esse código é uma junção
2
dos dois códigos das experiências 1 e 2 para que seja possı́vel controlar a velocidade do
motor, alterar seu sentido de rotação e visualizar a velocidade no display LCD.
2.2 Pós-Laboratório
Com códigos implementados que alteram a velocidade e o sentido de rotação de
um motor
CC, com a velocidade do motor sendo visualizada no display LCD não há
dificuldade em controlar o motor a partir deles. A primeira experiência é mais simples
e demonstra os conceitos básicos de controle de direção e parada, enquanto a segunda
experiência é mais avançada, permitindo o ajuste contı́nuo da velocidade..
3 Avaliação dos resultados do experimento
A prática ocorreu de maneira satisfatória, visto que alguns dos códigos utilizados
na implementação foram fornecidos na própria prática, e os feitos pelo grupo foram exe-
cutados da maneira esperada.
4 Análise crı́tica e discussão
A dificuldade encontrada durante a execução dessa prática foi a falta de experiência
do grupo em programar com o arduino. Apesar disso a prática ocorreu de maneira satis-
fatória, de modo que todos os códigos exigidos foram executados de maneira coerente.
Além disso foi possı́vel aplicar de maneira prática, conceitos estudados na parte teórica
da disciplina, controlando a velocidade e o sentido do motor CC.
5 Outras informações
Nessa prática foi solicitado um pré-laboratório. As respostas do pré-laboratório são:
1) Uma ponte H é um circuito eletrônico usado para controlar a direção e a veloci-
dade de um motor, permitindo que ele gire para frente ou para trás. A ponte H é composta
por quatro transistores (ou outros dispositivos de comutação, como MOSFETs), dispos-
tos de maneira a criar uma estrutura que permite a inversão da polaridade da corrente que
passa pelo motor. Isso possibilita que o motor seja ligado tanto no sentido horário quanto
no sentido anti-horário, além de permitir o controle da velocidade variando a largura de
3
pulso dos sinais aplicados aos transistores. 2) Tensão de Alimentação de Potência (Vcc):
Geralmente, a tensão de alimentação de potência para os motores está na faixa de 5V a
46V.
Tensão de Alimentação Lógica (Vss): A tensão de alimentação lógica, que controla
os sinais de entrada e os circuitos de controle internos do L298, geralmente é de 4,5V a
7V. Os sinais de controle (Entrada1 e Entrada2) devem ser compatı́veis com essa tensão.
Corrente de Alimentação Individual de Cada Canal: O L298 possui dois canais
independentes (canal A e canal B) para controlar dois motores separados. A corrente
máxima de alimentação para cada canal (motor) é geralmente especificada em cerca de
2A a 2,5A, mas pode variar.
3) Módulo tacômetro —> Ponte H L 298 —> Motor CC —> Arduino mega
4) esboço do código pedido:
incluir bibibliotecas que serão usadas
declaração das variáveis
void motorInput (float input)
if(input¡0)
input=max(input,-100);
float vmap=map(input(parâmetros do input));
analogWrite(IN1,(int) vmap);
analogWrite(IN2,0);
else
input=min(input,100);
float vmap=map(input(parâmetros do input));
analogWrite(IN2,(int) vmap);
analogWrite(IN1,0);
setup do arduino usando o void setup()
setup do arduino usando o void loop e o void displayMenu()
5) esboço do código pedido:
mesmo código pedido no item anterior com as seguintes adições:
inclusão da biblioteca Mstimer
void flash()
static boolean output=HIGH;
4
leitura=analogRead(13);
rpm=leitura*parâmetro do motor;
digitalWrite(13,output);
output=!output;
6 Referências
Nessa prática não foram utilizadas referências bibliográficas.
5

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando