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

Exibições: 3062

Responder esta

Respostas a este tópico

Boa tarde PC,

a grande vantagem de ter a minha idade é não se importar se me chama de "chato" . kkkkk

Vc disse que não conseguiu anexar um arquivo com seu código. Correto.

Veja se fazendo assim vc consegue: 

  Clique em : " Arquivos "  e depois anexe o arquivo  com o seu sketch completo;

Se conseguir,  delete todo o código que postou no seu tópico.

Como vc pelo menos anteriormente tentou anexar o arquivo, vou desconsiderar que

vc postou e vou tentar te ajudar.

Mas antes nos dê mais informações.

Qual ucontrolador está usando?

Qual esquema de ligação do seu Hall com o ucontraldor?

Qual display está usando no seu projeto?  (LCD/& seg, etc).

RV 

RPMultimovisto.ino

Obrigado, estou em viagem quando retornar vou tentar me re-organizar e postar as informações.

Muito obrigado.

Muito bom.

RV

Mas basicamente uso o uno, o nano e mega. Usandos os devidos pinos de interrupção.

O display ainda estou programando (Uso o NEXTION)

Veja esse pequeno video de meu ultimo projeto com o Nextion.

É um pequeno equipamento para testes em ratos de laboratorio (resistencia, equilibrio etc..

Os animais são colocados no eixo e seleciona-se o tipo de teste. Inicia-se o cronometro e quando o animal cai, um sensor na base para o cronometro.

Tudo muito básico, mas para quem não sabe quase nada, tudo fica mais dificil (rsrsr)

https://youtu.be/J7ahTvLoV08

Grato

Bom dia PC,

achei a montagem muito legal e bem feita.

Foi vc que confeccionou tudo, 

a parte mecânica, a eletrônica e a programação do display?

RV

Sim totalmente artesanal.

Parte mecanica, codigos do arduino (adaptando codigos encontrados na net), configuração do display Nextion (que não conhecia, tive que aprender tudo) , corte/dobra de acrilico, tudo feito por mim.

(ainda não fiz "amizade" com esses motores de passo, estou tendo muita dificuldade de entender - rs rs). Foi a primeira vez que tive contato com um.

No projeto tem 3 sensores de peso (um para cada baia) que são acionados pela queda do animal (rato) e ao ser acionado envia comando ao display Nextion para parar o respectivo cronometro.

Tive que usar um arduino nano EXCLUSIVO para o motor nema, 1 arduino nano EXCLUSIVO  para os sensores de peso e um MEGA para centralizar tudo e fazer a interface com o display.

Gostei do display Nextion, 80% da programação/calculos faço no Nextion(que tem um microprocessador proprio) e envio somente os resultados ao arduino.

A maior deficiencia desse display é que ele não "trabalha" com decimais, e fica um pouco chato de fazer calculos.

Grato

Boa tarde Sr. PC,

antes de iniciar uma ajuda, gostaria de fazer um comentário.

É muito bom quando a gente coloca uma dificuldade e alguém ajuda. Certo?

Mas é muito bom também quando agente quer ajudar, faz perguntas ao interessado na ajuda e ele responde. Certo?

http://labdegaragem.com/forum/topics/velocidade-motor-passo-arduino...

RV

Desculpe-me mineirin RV, não tinha visto seu retorno à minha pergunta. Sinto muito pela falta de educação.

Desculpe-me mais uma vez.

Não fique zangado. Agradeço sua preocupação, mas estou lendo tantos tópicos sobre o assunto que me perco.

Paulo

Olá amigo, quando precisei tive ajuda de um amigo aqui do fórum e fiz algumas modificações no código.

uso um sensor IR deste aqui:

Mas com hall também funciona

No meu caso, faço leitura de RPM de um motor Brushless A2212, que chega a mais de 10.000 RPM, com ótima precisão,

Já conferi com osciloscópio, multímetro e também fazendo as contas de:

HERTZ = ((RPM * POLOS) / GRAUS);

RPM = ((HERTZ * 120) / POLOS);

POLOS = ((HERTZ / RPM) * HERTZ);

GRAUS = ((RPM / HERTZ)  * POLOS);

Funciona muito bem pra mim, experimenta !!!

RPM.ino

Obrigado pelo retorno Hélio.

No meu projeto eu preciso de uma certa precisão nas RPMs até no máximo de 400 rpm. Não é um projeto para altas rotações.

Mais uma vez grato (vou trabalhar rs rsrs)

Grato. 

Testa se este fica estável na sua montagem... o pino de entrada ficou como 2 do uno...

[code]
//18/12/2020
//Mod 27/1/21 by Leko
//RPM ultimo visto
//MARCANDO DE ACORDO COM O MINIPA (CONTADOR DE RPM) DIFERENÇA DE menos DE 1%
//Adaptado de:
//https://www.instructables.com/Measure-RPM-DIY-Portable-Digital-Tach...
//

// Declara contantes
#define diametro .2944 //Diametro da polia da esteira aonde se encotra o sensor de voltas
#define pi 3.14
#define perimetro diametro*pi //O compilador calcula o perimetro em metros

unsigned long int rpm=0 ,oldtime; //
int rps; // Declara variavel para rotações por segund e metros por segundo
int bandeira = 0; // A VARIABLE TO DETERMINE WHETHER THE LCD NEEDS TO BE CLEARED OR NOT
long esteira=0; // total de voltas percorrido
long velocidade;

//*****************************************************************************
void setup()
{
Serial.begin(57600); // GET VALUES USING SERIAL MONITOR
Serial.println("TACHOMETER"); // STARTUP TEXT
while (digitalRead(2)); //aguarda momento propicio para iniciar
while (!digitalRead(2));
oldtime = millis();
attachInterrupt(digitalPinToInterrupt(2), RPMCount, RISING); // ADD A HIGH PRIORITY ACTION ( AN INTERRUPT) WHEN THE SENSOR GOES FROM LOW TO HIGH
}


//******************************************************************************

void loop()
{
if(bandeira) // vê se deu mais uma volta
{
bandeira=0;
rps= 1000/(millis() - oldtime); // tempo em milisegundos
oldtime = millis();

rpm= rps*60;
velocidade=(rpm*perimetro)*60; // metros por hora

Serial.print(rpm,DEC);
Serial.println(" RPM");
Serial.print("Volt.Eix.Esteira:");
Serial.println(esteira);
Serial.print("Dist.Perc.: ");
Serial.println(esteira*perimetro);
Serial.print("Velocidade: ");
if(velocidade<1000)
{
Serial.print(velocidade);
Serial.println(" Metros/h");
}
if(velocidade>1000)
{
Serial.print(float(velocidade/1000),2);
Serial.println(" Km/h");
}

}
}


//********************************************************************************************
void RPMCount() // EVERYTIME WHEN THE SENSOR GOES FROM LOW TO HIGH , THIS FUNCTION WILL BE INVOKED
{
bandeira=1;
esteira ++;
}
////////////////////////////////////////////////////////////// END OF THE PROGRAM ///////////////////////////////////////////////////////////////////////
[/code]

Obrigado. Estive afastado por problemas de saude, mas pretendo retomar o projeto. Vou testar. Muito Obrigado!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço