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 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
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)
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 !!!
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por