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