Bom dia.
Estou ciente que existem inúmeros tópicos sobre o assunto, porém já testei todos os codigos apresentados que consegui encontrar e nenhum calcula a rpm corretamente.
Tenho um contador de RPM da minipa para comparação.
Alguem tem algum código que marque realmente a rpm?
Tenho um motor que gira exatamente a 120 rpm e nenhum dos codigos que testo marca essa velocidade.
Existem incontaveis videos, mas não conferem a rpm, apenas mostram um monte de numeros ..
Alguem pode me ajudar, preciso marcar a RPM de 60 a 300rpm.
Muitos marcam alternadamente 60 -120 -60 -120...
Grato
Tags:
Boa tarde,
Veja se ajuda :
http://labdegaragem.com/forum/topics/sensor-hall-de-rota-o-rpm
Se quiser medir a frequencia com muita precisão, temos esse tutorial :
https://blog.eletrogate.com/esp32-frequencimetro-de-precisao/
Nesse projeto, é só incluir o cálculo de RPM :
RPM = é o número de rotações (ou revoluções) por minuto.
Se capturar a frequência do pulso do motor (um pulso por volta) , poderá fazer alguns cálculos:
RPS = rotações por segundo
Se um pulso for gerado para cada volta (rotação):
RPM = 60 x RPS ( um minuto tem 60 segundos)
olá Paulo.
Eu já perdi a conta da quantidade de tópicos aqui no LDG, onde publiquei implementações medindo RPMs. Em todos eles, publiquei códigos completos e com comentários funcionais, que explicam todo o funcionamento do próprio código. Não tenho uma lista dos links neste momento, mas irei preparar uma e publico assim que possível.
De qualquer forma, este seu tópico é uma boa oportunidade, pois vc está essencialmente só medindo a RPM, e os demais parâmetros do seu Sistema (velocidade e distância percorrida) são decorrentes da medição da RPM. Assim ele pode ser usado como referência para diversas outras necessidades relacionadas à medição da RPM.
Mas peço a vc que esclareça o seguinte ponto: qual o modelo de Sensor Hall ("plaquinha" ou "módulo") vc está usando?
Vc pode postar aqui uma foto do Sensor? (ou então postar um link onde eu possa ver qual o modelo do Sensor).
Note: é importante conferir alguns parâmetros técnicos do seu Sensor, como alimentação e principalmente o tipo de saída (se é "Totem-Pole" ou se é "Open-Collector", "Open-Drain").
O seu Arduino, pelo seu código eu suponho que é o UNO (ou talvez o Nano).
Então publicarei uma implementação simples mas efetiva para que vc possa usar como referência. Os códigos que publico aqui, são de forma que sempre podem ser expandidos conforme a necessidade (e sem precisar fazer gambiarras que resultam geralmente em efeitos colaterais indesejados).
Sobre o link específico do "Instructables" que vc postou, eu diria que não é uma boa referência para quem quer realmente aprender e seguir em frente neste aprendizado. Naquele código tem diversas pontos implementados de forma inadequada, e que dificultam as pessoas expandirem a coisa (e provavelmente incorrerão em efeitos colaterais). Realmente não entendo o porquê complicam tanto. Isso não é bom pois veja que aqueles "problemas" vc acabou levando para o seu código. Mas o "Instructables" é um bom site (mas também é algo mais como um zoológico de implementações). Mas não é porque funcionou, que aquela é a forma mais "adequada" de implementação para todas as pessoas. Espero que vc e outros vejam isto que coloquei como uma crítica construtiva.
Abrçs,
Elcids
Obrigado Elcids, e desculpe-me pelas as falhas. Vou tentar mandar uma foto. Não estava conseguindo (recebia um erro do servidor).
No sensor está escrito: 44E 402
É uma plaquinha com com um ou 2 resistors e 3 saidas (gnd,5v, S)
Mas comprei um modulo 3144e e pretendo testar com esse novo modulo.(ainda nao recebi)
Estou usando o nano.
(As linhas de calculos de velocidade foram incluidas por mim (do jeito que achei correto (rs), não estao no codigo original)
Grato
na linha:
vel=(rpm/5.665)*.925/60*60*60; //CALCULA VELOCIDADE (Km/h)
Trata-se de uma pequena esteira com perimetro de 92,5 cm
ou seja a cada 5.665 voltas do eixo motor a esteira dá uma volta.
o perimetro do eixo motor é de 16,328. (92,5/16,328=5.665)
Faço a medição da RPM no eixo motor da esteira.
Se estiver fazendo cálculos errados desculpe-me.
Paulo
Boa noite,
Esteira você pode medir por metros/segundo. Vai ficar melhor para expressar o valor.
Qual é o diametro da polia que move a esteira?
(Interface NEXTION ainda em desenvolvimento, me enrosquei nas RPM..lol)
O rolo tem 5,2 cm diametro. A polia eh igua a do motor 20 dentes.
Essa é soh uma das informações, mas no display NEXTION eu mostro Km/h, M/min e cm/s, (essa ultima (cm/seg) eh a mais usada no proposito da esteira)
Existe a opçao para usuaario escolher a unidade de medida que quer trabalhar.
Grato
(Estou fazendo esses projetos a pedido de minha filha, que faz Doutorado em uma faculdade pública. Um já conclui.(video abaixo))
Paulo
Boa tarde Paulo,
Achei esse trabalho sobre esteira rolante.
Nele tem o cálculo de velocidade da esteira. Sujiro que leia.
Esteira Transportadora
https://www.ifmg.edu.br/arcos/ensino-1/tai/20162_TAI1_Esteiratransp...
5.2.1-Velocidade angular e linear:
A velocidade linear descreve no movimento de rotação de cada polia a distância que é percorrida por segundo, sendo essa velocidade dada em m/s, aumentando conforme o diâmetro da polia aumenta. A equação da para o calculo velocidade linear é dada por:
f = Frequência
t = Tempo
W=Velocidade angular
R = Raio
Obrigado a todos pelo retorno.
Vou estudar com certeza.
Mas o foco de minha postagem refere-se ao código do arduino para calculo de RPM, que só mostrava a metade das RPMs, e eu queria entender o porque e como alterar se fosse o caso.
Grato voces são muito atenciosos.
Paulo
olá Paulo.
Antes de mais nada, parabéns por sua implementação do seu Sistema, mostrado no vídeo que vc disponibilizou. Ficou profissional e sensacional.
Concluí a implementação do código que prometi, e testei medindo rotações até 15 mil RPMs, e o erro foi menor que 0,5%. E na maioria das medições, o valor medido foi praticamente exato (por exemplo para 120 RPM que é seu caso). Irei publicar aqui logo mais (falta capturar algumas imagens para usar no post).
Mas antes, vou esclarecer porque aquele código que vc estava usando (do Instructables), mede a metade do "valor correto".
Naquele código, há uma série de "problemas", tanto na codificação do cálculo, quanto na temporização do próprio código. Veja: se a rotação é 120 RPM, então a rotação por segundo será 2 (pois 120 rotações / 60 segundos = 2 rotações por segundo). No seu caso Paulo, cada giro do eixo do Motor está produzindo no Sensor Hall, 1 Pulso por rotação. Então se são 2 rotações por segundo, o Sensor irá produzir exatos 2 Pulsos por segundo. Agora observe a equação usada no código:
rpm = 30 * 1000 / ( millis() - time ) * REV
A equação multiplica o tempo de medição (o resultado de "millis - time"), por 30000, e então por "REV" (a quantidade de Pulsos contada). Considere o caso de 3 Pulsos medidos (que vc escolheu no seu código), os quais ocorrerão num período de 1,5 segundos já que a RPM é 120. Ou seja, millis - time = 1500 (em mili-segundos), e REV = 3 que é a contagem de Pulsos. Na equação teremos:
rpm = 30 * 1000 / ( 1500 ) * 3 = 60
Conclusão, o fator "30" na equação está inadequado, pois o autor fixou para o caso específico dele, onde cada giro do eixo do Motor produz 2 Pulsos (e não 1, como é seu caso Paulo). Se fossem produzidos 2 Pulsos por giro, ao invés da contagem 3, teríamos 6, e com isso o resultado seria 120 RPM.
Para corrigir isso, a equação "correta" seria assim:
rpm = 60 * 1000 * (REV / N) / ( millis() - time )
Onde "N" é a quantidade de Pulsos gerados por giro no eixo do Motor. Para o caso do autor, N = 2, e isso resulta que a equação volta a ser a original. Mas no seu caso Paulo, N = 1, pois cada giro do eixo produz um único Pulso, e com isso o resultado será o correto.
Mas ainda há um problema: se a divisão REV / N resultar em valor fracionário, como é um cálculo com números inteiros, a fração será truncada, e isso resultará em um erro no resultado. Então é preciso fazer pelo menos uma parte do cálculo com "float". Mas no seu caso Paulo, temos N=1, então REV / N = REV, ou seja, o valor resultante já é um inteiro, e o resultado não seria errado quando usando a equação com o fator "N".
Sobre eventualmente a medição ser correta no código original, veja que para 120 RPM são apenas dois Pulsos por segundo, e qualquer imprecisão no tempo de execução do Processo poderá acarretar contagem errônea dos Pulsos, no momento exato que o teste "if" é feito para checar a contagem acima de um valor (no seu caso vc está usando "3"). E no código há vários elementos que propiciam a imprecisão no tempo de execução (impressões na Serial, "delays", cálculos, etc). Então o que é preciso, é usar uma técnica de amostragem que não dependa dessas imprecisões (pois elas existirão sempre), e assim resulte em uma medição mais correta e precisa.
Acredito que hoje ainda consigo publicar o código que implementei e que mede com grande precisão a RPM (e sem aquelas dependências de temporização que descrevi). No post também explicarei o funcionamento do Processo.
Abrçs,
Elcids
Maravilha de explicação!!! Muito obrigado. Vou estudar e tentar implementar a forma correta.
Muito agradecido Elcids!!
Paulo
Boa noite. Tentei com a formula que voce passou, mas recebo numeros absurdos na rpm.
Paulo
olá Paulo.
Antes de tudo, peço desculpas por parecer que "larguei" o tópico. Estive ausente desde o final do ano, para todas as atividades técnicas, e como não consegui publicar o post antes disto, resultou que somente agora retomei a publicação.
A demora também se deve ao fato de que resolvi acrescentar grande quantidade de detalhes sobre como a implementação funciona, o que ajudará muito aqueles que querem aprender sobre a técnica usada para a medição da RPM.
Sobre seus testes, provavelmente vc cometeu algum erro simples, daqueles bem traiçoeiros aos nossos olhos.
Caso deseje, posso enviar o código para vc testar, via email do LDG, antes mesmo de eu concluir todo o post que irei publicar aqui (pois devido a grande quantidade de detalhes, ainda irá demorar mais alguns dias para concluir).
Abrçs,
Elcids
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por