Ir ao conteúdo
  • Cadastre-se

Modificar circuito Limitador RPM (Arduíno Nano)


Posts recomendados

6 minutos atrás, .if disse:
44 minutos atrás, ComandateGustavo disse:

o osciloscópio de PC, no coletor na base

kêkêisso mano? 😑

usei o osciloscópio de PC, encostando as pontas de prova no coletor e na base do bc547.

 

7 minutos atrás, .if disse:

Não entendi a medição de amplitude deste osc doidão

nem eu kkkkk

 

8 minutos atrás, .if disse:

não vi sua ponteira

a ponteira é apenas uma ponta de prova comum com fios soldados que vão até o divisor de tensão.

 

8 minutos atrás, .if disse:

não vi o divisor

o divisor é este que deixei em anexo, mas usando ele não tem sinal nenhum ele abaixa muito a tensão de entrada aí pra ter um sinal mais forte tirei ele fora e deixei um resistor de 10K em série com a ponta de prova positiva, a negativa está ligada direto no GND do arduino.

 

9 minutos atrás, .if disse:

não vi o tipo de sinal que aplica na base

é o de onda quadrada mesmo que vem desse site:

https://onlinetonegenerator.com/

divisor.jpg

  • Curtir 1
Link para o post
Compartilhar em outros sites
  • Membro VIP
42 minutos atrás, ComandateGustavo disse:

onda quadrada

Quadrada não é ...Parece retangular ou o site tá zoado. Mas consegue perceber coerência no valor de freq pelo menos?

 

44 minutos atrás, ComandateGustavo disse:

o divisor é este que deixei em anexo, mas usando ele não tem sinal nenhum ele abaixa muito a tensão de entrada aí pra ter um sinal mais forte tirei ele fora e deixei um resistor de 10K

De fato div/100 mata o sinal do pc. Ao colocar 10K você fez div/2. Pra calibrar certin você devia ter um sinal de amplitude e freq 100% conhecida, p.ex. um pisca led do arduino que tem 5Vp. Isso te ajudaria na questão...

53 minutos atrás, ComandateGustavo disse:

nem eu kkkkk

Já a freq disso envolve conhecimento mediano do hw do mc (não ensino).

 

47 minutos atrás, ComandateGustavo disse:

o osciloscópio de PC, no coletor na base

 ... frase sem sentido... e só tinha 1 sinal desenhado...

54 minutos atrás, ComandateGustavo disse:

usei o osciloscópio de PC, encostando as pontas de prova no coletor e na base do bc547.

... ficou "menos escuro".

Link para o post
Compartilhar em outros sites
52 minutos atrás, .if disse:

Quadrada não é ...Parece retangular ou o site tá zoado. Mas consegue perceber coerência no valor de freq pelo menos?

sim tem coerência mas só até uns 500Hz acima disso já fica muito errado, em 500Hz mesmo ele marca 425Hz e eu acho que essa parte meio arredondada da onda é interferencia...

 

57 minutos atrás, .if disse:

um pisca led do arduino que tem 5Vp. Isso te ajudaria na questão...

estava pensando, ontem chegou o outro arduino uno que eu comprei, este parece original, mas tô achando que é pirata kkkkkkk

E se eu fizer um pisca led nesse arduino novo pra ele gerar uma onda quadrada e conectar a saida deste arduino novo no pino de entrada do arduino com o frequencimetro? Creio que daria pra colocar o osciloscopio de pc ali também pra ver o circuito funcionando...

 

o que acha?

 

1 hora atrás, .if disse:

(não ensino)

segredo hehe

 

1 hora atrás, .if disse:

e só tinha 1 sinal desenhado

testei um de cada vez, não usei o segundo canal.

 

 

  • Curtir 1
Link para o post
Compartilhar em outros sites
  • Membro VIP
44 minutos atrás, ComandateGustavo disse:

um pisca led nesse arduino novo pra ele gerar uma onda quadrada e conectar a saida deste arduino novo no pino de entrada do arduino com o frequencimetro? Creio que daria pra colocar o osciloscopio de pc ali também pra ver o circuito funcionando...

Sim. Mas vai ter que saber certinho qual frequencia da piscada. Vai ter que confiar no seu taco. E nem vou dar pitaco kk.

 

Uma alternativa pra calibração é...

Precision-Time-Base_For_Microcontroller_

https://www.robomart.com/blog/precision-time-base-for-microcontroller-circuits/

Onde você tem várias saídas de freq conhecida e bem estável e confiável.

 

49 minutos atrás, ComandateGustavo disse:

sim tem coerência mas só até uns 500Hz acima disso já fica muito errado, em 500Hz mesmo ele marca 425Hz e eu acho que essa parte meio arredondada da onda é interferencia

A parte arredondada é normal e devido aos capacitores de entrada e tal.

Como nosso relacionamento já amadureceu e virou muitas páginas, já quase quero te xingar mas vou me conter.. por enquanto... (kk brinc claro).. teste com outros osc de placa de som. Este pode estar zoado mesmo. Deve ter centenas deles. Ve também se existe programa frequencímetro pra placa de som.

Link para o post
Compartilhar em outros sites
1 hora atrás, .if disse:

Onde você tem várias saídas de freq conhecida e bem estável e confiável.

é interessante, mas aí tenho que comprar o CI provávelmente pela internet esperar chegar, comprar os componentes e pode ser que o outro arduíno já resolva a questão, mas vamos deixar como um plano B, caso o arduino gerando frequências pro outro não dê certo.

 

1 hora atrás, .if disse:

já quase quero te xingar

ué porque?

 

1 hora atrás, .if disse:

Ve também se existe programa frequencímetro pra placa de som.

vou pesquisar mais osciloscópio e frequencimetro vamos ver se tem mais na net.

 

1 hora atrás, .if disse:

Sim. Mas vai ter que saber certinho qual frequencia da piscada. Vai ter que confiar no seu taco. E nem vou dar pitaco kk.

hum deve ter código de gerador de onda quadrada para arduino na  internet, vou pesquisar mais pra saber

Link para o post
Compartilhar em outros sites
  • Membro VIP
1 hora atrás, ComandateGustavo disse:

deve ter código de gerador de onda quadrada para arduino

O + pobre...

loop()
{
digitalwrite(3,hight);
delay(x);
digitalwrite(3,low);
delay(x);
} 

😁

Ouvi dizer que tem uma função frutinha tal milis que pode ser conectada à sua inquietação. Mas eu (eu) prefiro por a mão na massa no hw do timer do mc. P.ex.

ATmega328%20-%20Timer1.JPG

https://sites.google.com/site/qeewiki/books/avr-guide/timers-on-the-atmega328

programe-o e ...

for(;;) PORTB=TCNT0;//pronto... seu cd4040 anabolizado

 

O 60Hz da rede também serve pra aferição.  Tem rádio relógio que usa como base de tempo.

 

Link para o post
Compartilhar em outros sites
2 horas atrás, .if disse:

O 60Hz da rede também serve pra aferição.  Tem rádio relógio que usa como base de tempo.

não sabia que alguns rádio relógio usam o 60Hz, parece interessante pra essa função porque eu já vi a tensão da rede variar bastante, mas a frequência não muda então pro rádio serve, só que pra eu usar no arduino fica complicado porque quando pega interferência automáticamente já aparece 60Hz no lcd então não saberia se está certo ou com interferência...

 

2 horas atrás, .if disse:

programe-o e ...


for(;;) PORTB=TCNT0;//pronto... seu cd4040 anabolizado

voce diz pra abrir o site baixar aquele código colocar essa linha de comando e cada um dos pinos vai se comportar como os pinos do CD 4040?

 

2 horas atrás, .if disse:

loop() { digitalwrite(3,hight); delay(x); digitalwrite(3,low); delay(x); }

essa aí é aquele blink led não é?

Vou tentar fazer o seguinte, colocar função para ligar e desligar uma saída, depois colocar um botão para ligar e desligar a mesma saída em uma frequência mais alta e ver como se comporta o sistema, vai que dá certo.

 

Depois que chegarmos no acordo para resolver essa questão de frequência vou criar um novo tópico focado no limitador de giro, porque até agora estamos focados no teste do frequencimetro de arduino kkkkkk mas que também faz parte afinal é a base do sistema

Link para o post
Compartilhar em outros sites
  • Membro VIP
8 horas atrás, ComandateGustavo disse:

frequência não muda então pro [RELÓGIO DO] rádio relógio serve, só que pra eu usar no arduino fica complicado

Não é pra usar no arduíno.. foi só pra você saber o que não sabia: a estabilidade da freq da rede.

 

8 horas atrás, ComandateGustavo disse:

voce diz pra abrir o site baixar aquele código colocar essa linha de comando e cada um dos pinos vai se comportar como os pinos do CD 4040?

Não necessariamente... de novo foi só pra você saber. E naquele cód não tem o que incluí. Também foi só demonstração.

 

8 horas atrás, ComandateGustavo disse:

essa aí é aquele blink led não é?

É um blink led probrezinho que digitei sem ctrl-c ctrl-v. Se fizer isso e achar que vai funcionar, receba um cascudo virtual.

 

8 horas atrás, ComandateGustavo disse:

colocar função para ligar e desligar uma saída, depois colocar um botão para ligar e desligar a mesma saída em uma frequência mais alta e ver como se comporta o sistema, vai que dá certo.

Aí sim hein...

unsigned char x;
loop()
{
digitalwrite(3,hight);
delay(x);
digitalwrite(3,low);
delay(x);
if (digitalread(5)==0) x++;
} 

 

8 horas atrás, ComandateGustavo disse:

criar um novo tópico focado no limitador de giro

A qualquer momento um de nós - preferencialmente você - vai levar um cascudo virtual do moderador mesmo devido à muitas páginas viradas. Então nem precisa. Já tá tudo foo dido mesmo kk. Mas sim, já deve ter gente com o saco cheio disso... além de mim kk (brinc) Dica: publique dúvidas concisas e somente depois de fazer experimentos práticos até a exaustão e sem sucesso. Desenhos e fotos são importantes. Além de ilustrar e facilitar a análise, meio que quebram o cansaço visual dos textos enormes... como este kk

abç 

  • Obrigado 1
Link para o post
Compartilhar em outros sites
4 horas atrás, .if disse:

Aí sim hein...


unsigned char x;
loop()
{
digitalwrite(3,hight);
delay(x);
digitalwrite(3,low);
delay(x);
if (digitalread(5)==0) x++;
} 

eu ia fazer isto, mas descobri que o arduino já tem uma função para gerar onda quadrada automáticamente, a função tone, você escreve:  tone (gerador, 1000) e no pino programado ele vai gerar a onda com a frequência que quiser, nesse caso 1000 mas pode ser qualquer uma, testei aqui e funcionou, o osciloscópio de PC conseguiu captar o sinal mas ficou variando muito, aí resolvi colocar no alto-falante e parece bem estável o sinal, vou continuar caçando outro frequêncimetro ou osciloscópio de pc pra confirmar...

 

Por hora estava tentando programar para essa função tone gerar a frequência quando o pino 3 estiver em HIGH, mas confesso que estou apanhando feio tá sempre dando algum erro, está assim no arduíno que vai transmitir a frequência:

 

Citação

int gerador = 2;
int botao = 3;

void setup() {

pinMode(LED_BUILTIN, OUTPUT);
pinMode(botao, INPUT);
}

void loop() {
  
  if (digitalRead (botao == HIGH)){
digitalWrite(LED_BUILTIN, HIGH);
tone (gerador, 1000);
}
}

else{

digitalWrite(LED_BUILTIN, LOW);
digitalWrite(gerador, LOW);
}

 

 

2 horas atrás, Thiago Miotto disse:

Pelo que entendi, em frequências altas começa distorcer. Em baixas a leitura é correta. Confere?

@Thiago Miotto  em breve vou criar outro tópico pra resolver isso, quanto ao arduino que lê as frequências ele tem uma certa precisão de 40hz até 120hz depois disso fica bem distorcido, o código é este:

 

Citação

// --- Bibliotecas Auxiliares ---
#include <LiquidCrystal_I2C.h> //inclui biblioteca lcd
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// --- Mapeamento de Hardware ---
#define inFreq   2  //entrada para medir a frequência no pino digital 2


// --- Variáveis Globais ---
long freq, counter;
int pulseCount;
boolean pulse;


// --- Configurações Iniciais ---
void setup() 
{
  
  pinMode(inFreq,INPUT);    //Configura como entrada
  
  lcd.init();
  lcd.setCursor(2,0);      //Posiciona cursor na coluna 3, linha 1
  lcd.print("Frequencia");  //Escreve no display
  
  pulse = 0x01;             //Seta variável de controle
  
} //end setup


// --- Loop Infinito ---
void loop() 
{
  lcd.setBacklight(HIGH);
  counter = millis();      //counter recebe o valor do tempo em ms
  
  if(digitalRead(inFreq))  //Entrada de frequência em nível alto?
  {                        //Sim...
  
    if(pulse) pulseCount++;  //incrementa pulseCount se variável de controle for verdadeira
     
    pulse = 0x00;            //limpa variável de controle

  }
  else                     //Não...
  {
    pulse = 0x01;          //Seta variável de controle
  }


  if(counter%200 == 0x00)  //Passaram-se 200 ms?
  {                        //Sim...
    freq = pulseCount*5;   //Atualiza frequência (200 x 5 = 1000ms)
    lcd.setCursor(5,1);   //Posiciona cursor na coluna 6, linha 2
    lcd.print(freq);      //Imprime valor atual da frequência
    lcd.print("Hz");      //Imprime "Hz"
    
    pulseCount = 0x00;     //Reinicia contador
  }
  
  
} //end loop

 

  • Curtir 1
Link para o post
Compartilhar em outros sites
  • Membro VIP
42 minutos atrás, ComandateGustavo disse:

tone (gerador, 1000) e no pino programado ele vai gerar a onda com a frequência que quiser, nesse caso 1000 mas pode ser qualquer uma,

... tipo a x...

void loop() {
if (digitalRead (botao == HIGH)) x+=10; //de 10 em 10 (herts?)
tone (gerador, x);
}

😁

 

46 minutos atrás, ComandateGustavo disse:

uma certa precisão de 40hz até 120hz depois disso fica bem distorcido

Penso que é porque o sw zoneia a leitura. Leia machamente direto do periférico contador. Essencialmente você deve habilitar a entrada do contador no pino do mc...

 Registro TCCR0

CS02 CS01 CS00 Descrição
1    1    1    Clock vindo de I/O – borda de subida

...

http://www.arnerobotics.com.br/eletronica/Configurando_corretamente_regsAVR_pt2.htm

e a cada segundo

{frequencia=TCNT0; TCNT0=0;}

🙃

Link para o post
Compartilhar em outros sites

Acima de 120 hz, eu aposto que o erro ocorre pois a velocidade dos pulsos acaba superando a velocidade de leitura do arduíno em algum momento.

 

Por um acaso a diferença é exponencial? ( Pequena de 120 a 200, vai aumentando de 200 a 300 e fica bem grande acima de 300

Link para o post
Compartilhar em outros sites
1 hora atrás, .if disse:

tipo a x...

fiz a substituição do código igual você mostrou mas dá erro:

Citação

 

void loop() {

if (digitalRead (botao == HIGH)) 1000+=10; //de 10 em 10 (herts?)
tone (gerador, 1000);
digitalWrite(LED_BUILTIN, HIGH);

 

tô boiando ai... 😳

 

1 hora atrás, .if disse:

Penso que é porque o sw zoneia a leitura. Leia machamente direto do periférico contador. Essencialmente você deve habilitar a entrada do contador no pino do mc...


 Registro TCCR0

CS02 CS01 CS00 Descrição
1    1    1    Clock vindo de I/O – borda de subida

...

http://www.arnerobotics.com.br/eletronica/Configurando_corretamente_regsAVR_pt2.htm

e a cada segundo


{frequencia=TCNT0; TCNT0=0;}

🙃

Quem é SW? e depois de: "Essencialmente você deve habilitar a entrada do contador no pino do mc" não entendi mais nada kkkk o contador do MC é o contador do ATmega? 🤔

3 minutos atrás, Thiago Miotto disse:

Por um acaso a diferença é exponencial? ( Pequena de 120 a 200, vai aumentando de 200 a 300 e fica bem grande acima de 300

@Thiago Miotto É pequena de 40 até uns 120Hz acima disso fica muito ruim, com 1000Hz ele mostra 600Hz variando bastante...

 

vendo a função de tone está escrito que o arduino não consegue gerar frequências abaixo de 31Hz, creio que deve ser por um motivo similar, na verdade acho que o erro acima de 100Hz não vai ser problema, chuto que a frequência que sai do módulo de ignição não deve passar de 100Hz no RPM máximo, o problema é que o motor em marcha lenta não sei qual é a frequência dele aí pode dar erro... em ultimo caso voltamos a ideia inicial de usar o sensor Hall como base...

 

Mas tem como melhorar um pouco a precisão do frequêncimetro?

  • Curtir 1
Link para o post
Compartilhar em outros sites
  • Membro VIP
52 minutos atrás, ComandateGustavo disse:

if (digitalRead (botao == HIGH)) 1000+=10;

Fala sério... onde você leu 1000? é x fíi. x é uma variável que o próprio nome diz que no caso vai variar o valor da freq... São conceitos da linguagem c que infelizmente fica beeeemmm fora do escopo do tópico e nem devo te ensinar ok?

 

Sw é software. Essencialmente é a parte soft (mole ou virtual) do sistema em contraste com hw (hardware - dura ou real) que tento a minha maneira incutir nas futuras mentes brilhantes como a sua. A ideia é harmonizar sw com hw pra dar o melhor rendimento do sistema.

52 minutos atrás, ComandateGustavo disse:

você deve habilitar a entrada do contador no pino do mc

... foi só um exemplo disso.

Infelizmente não tenho palavras de nível mais elevado pra te conduzir a contento, ok? Mas vá com calma. p.ex. com o tempo você vai descobrir que

52 minutos atrás, ComandateGustavo disse:

a função de tone está escrito que o arduino não consegue gerar frequências abaixo de 31Hz

é limitação da função e não do arduino cujos limites estão apenas na sua imaginação e criatividade.

abç

Táh péraí... quebrar seu galho...
 

#define botao 5 //p.ex. seu botão na entrada 5
unsigned int x=10;

void loop() {
if (digitalRead(botao) == HIGH) x+=10; //de 10 em 10 (herts?)
tone (gerador, x);
if (x>5000) x=10;
}

pode dar ctrl-c ctrl-v. Mas tente entender cada linha ok?

😁

Link para o post
Compartilhar em outros sites
1 hora atrás, .if disse:

Fala sério... onde você leu 1000? é x fíi. x é uma variável que o próprio nome diz que no caso vai variar o valor da freq..

sim é X e eu achei que era para substituir o X pela frequência que eu queria, no caso 1000Hz

 

1 hora atrás, .if disse:

Sw é software. Essencialmente é a parte soft (mole ou virtual) do sistema em contraste com hw (hardware - dura ou real) que tento a minha maneira incutir nas futuras mentes brilhantes como a sua. A ideia é harmonizar sw com hw pra dar o melhor rendimento do sistema.

Ahn sim Hardware e Software já sabia desses conceitos, não sabia a Abreviação kkkkkk

 

1 hora atrás, .if disse:

pode dar ctrl-c ctrl-v. Mas tente entender cada linha ok?

Certo, pra não ficar um texto longo a cada vez que apertar o botão ele vai aumentar de 10 em 10Hz a frequência de saída é isso?

 

20 minutos atrás, Thiago Miotto disse:

Tenta fazer o código com a parada do nointerrupt, talvez melhore

É um comando que mesmo usando a função delay ele não para  e isso pode ajudar porque posso parar tudo no arduino menos o gerador de onda quadrada e o visor de lcd, isso faz o arduino "parar tudo e ficar focado naquela função específica" é isso?

  • Curtir 1
Link para o post
Compartilhar em outros sites
5 horas atrás, ComandateGustavo disse:

É um comando que mesmo usando a função delay ele não para  e isso pode ajudar porque posso parar tudo no arduino menos o gerador de onda quadrada e o visor de lcd, isso faz o arduino "parar tudo e ficar focado naquela função específica" é isso?

Sim, mas não  é só pra isso, acho que ele prioriza o processamento lá


Olha   essa explicação: arduino.cc/reference/pt/language/functions/external-interrupts/attachinterrupt/

Não testei, mas acho que seria assim:

// --- Bibliotecas Auxiliares ---
#include <LiquidCrystal_I2C.h> //inclui biblioteca lcd
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// --- Mapeamento de Hardware ---
#define inFreq   2  //entrada para medir a frequência no pino digital 2


// --- Variáveis Globais ---
long freq, counter;
int pulseCount;
boolean pulse;


// --- Configurações Iniciais ---
void setup() 
{
  
  pinMode(inFreq,INPUT);    //Configura como entrada
  
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(inFreq), pulsos, HIGH);  
  
  
  lcd.init();
  lcd.setCursor(2,0);      //Posiciona cursor na coluna 3, linha 1
  lcd.print("Frequencia");  //Escreve no display
  
  pulse = 0x01;             //Seta variável de controle
  
} //end setup


// --- Loop Infinito ---
void loop() 
{
  
    lcd.setCursor(5,1);   //Posiciona cursor na coluna 6, linha 2
    lcd.print(freq*5);      //Imprime valor atual da frequência
    lcd.print("Hz");      //Imprime "Hz"
  freq=0;
  delay(200);
  
  
  
} //end loop
  
void pulsos ()
{
freq++;   
  
}

 

Link para o post
Compartilhar em outros sites
1 hora atrás, Thiago Miotto disse:

Sim, mas não  é só pra isso, acho que ele prioriza o processamento lá


Olha   essa explicação: arduino.cc/reference/pt/language/functions/external-interrupts/attachinterrupt/

Não testei, mas acho que seria assim:



// --- Bibliotecas Auxiliares ---
#include <LiquidCrystal_I2C.h> //inclui biblioteca lcd
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// --- Mapeamento de Hardware ---
#define inFreq   2  //entrada para medir a frequência no pino digital 2


// --- Variáveis Globais ---
long freq, counter;
int pulseCount;
boolean pulse;


// --- Configurações Iniciais ---
void setup() 
{
  
  pinMode(inFreq,INPUT);    //Configura como entrada
  
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(inFreq), pulsos, HIGH);  
  
  
  lcd.init();
  lcd.setCursor(2,0);      //Posiciona cursor na coluna 3, linha 1
  lcd.print("Frequencia");  //Escreve no display
  
  pulse = 0x01;             //Seta variável de controle
  
} //end setup


// --- Loop Infinito ---
void loop() 
{
  
    lcd.setCursor(5,1);   //Posiciona cursor na coluna 6, linha 2
    lcd.print(freq*5);      //Imprime valor atual da frequência
    lcd.print("Hz");      //Imprime "Hz"
  freq=0;
  delay(200);
  
  
  
} //end loop
  
void pulsos ()
{
freq++;   
  
}

 

eu li o link que me passou e parece ser isso mesmo, principalmente para ler codificador rotativo ou monitorar entradas de dados pelo usuário.

 

Seu código deu erro:

exit status 1
'interruptPin' was not declared in this scope

 

aí coloquei: #define interruptPin 3

ele fez a compilação e não deu erro.

@Thiago Miotto consegui fazer funcionar mandei o código pro arduino novo só que ele ficou louco tá medindo tudo errado dá uma olhada nas imagens

 

Citação

#include <LiquidCrystal_I2C.h> //inclui biblioteca lcd
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// --- Mapeamento de Hardware ---
#define inFreq   2  //entrada para medir a frequência no pino digital 2
#define interruptPin 3

// --- Variáveis Globais ---
long freq, counter;
int pulseCount;
boolean pulse;


// --- Configurações Iniciais ---
void setup() 
{
  
  pinMode(inFreq,INPUT);    //Configura como entrada
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(inFreq), pulsos, HIGH);  
  
  
  lcd.init();
  lcd.setCursor(2,0);      //Posiciona cursor na coluna 3, linha 1
  lcd.print("Frequencia");  //Escreve no display
  
  pulse = 0x01;             //Seta variável de controle
  
} //end setup


// --- Loop Infinito ---
void loop() 
{
    lcd.setBacklight(HIGH);
    lcd.setCursor(5,1);   //Posiciona cursor na coluna 6, linha 2
    lcd.print(freq*5);      //Imprime valor atual da frequência
    lcd.print("Hz");      //Imprime "Hz"
  freq=0;
  delay(200);
  
  
  
} //end loop
  
void pulsos ()
{
freq++;   
  
}
 

 

WhatsApp Image 2021-01-22 at 06.01.09.jpeg

WhatsApp Image 2021-01-22 at 06.00.45.jpeg

Link para o post
Compartilhar em outros sites
7 horas atrás, Thiago Miotto disse:

Tenta substituir o HIGH, por RISING.
O interruppin tu pode apagar tudo, pois ele não é usado

certo o novo código ficou assim:

 

Citação

#include <LiquidCrystal_I2C.h> //inclui biblioteca lcd
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// --- Mapeamento de Hardware ---
#define inFreq   2  //entrada para medir a frequência no pino digital 2


// --- Variáveis Globais ---
long freq, counter;
int pulseCount;
boolean pulse;


// --- Configurações Iniciais ---
void setup() 
{
  
  pinMode(inFreq,INPUT);    //Configura como entrada
  attachInterrupt(digitalPinToInterrupt(inFreq), pulsos, RISING);  
  
  
  lcd.init();
  lcd.setCursor(2,0);      //Posiciona cursor na coluna 3, linha 1
  lcd.print("Frequencia");  //Escreve no display
  
  pulse = 0x01;             //Seta variável de controle
  
} //end setup


// --- Loop Infinito ---
void loop() 
{
    lcd.setBacklight(HIGH);
    lcd.setCursor(5,1);   //Posiciona cursor na coluna 6, linha 2
    lcd.print(freq*5);      //Imprime valor atual da frequência
    lcd.print("Hz");      //Imprime "Hz"
  freq=0;
  delay(200);
  
  
  
} //end loop
  
void pulsos ()
{
freq++;   
  
}

 

 

melhorou bem em frequências mais altas, mas em baixas piorou bastante... Curiosamente fiz essas medições com onda senoidal, se clicar em onda quadrada no site fica mais estranho ainda...

Será que frequencimetro em arduino serve apenas para aprendizado e não deve ser usado na prática? Aparentemente está bem estranho isso aqui...

WhatsApp Image 2021-01-22 at 22.36.57.jpeg

WhatsApp Image 2021-01-22 at 22.38.12.jpeg

Link para o post
Compartilhar em outros sites
34 minutos atrás, ComandateGustavo disse:

fica mais estranho ainda...

Tipo o que. Coloca a relação quanto tu colocou em onda quadrada, quanto saiu no leitor. Aí podemos ver se há alguma relação.

Tenta trocar o tipo do infreq para INPUT_PULLUP

 

pinMode(inFreq,INPUT_PULLUP);    //Configura como entrada




@.if, será que um resistor muito fora da marcação original pode zoar a onda e fazer a leitura ficar "louca" em alguns casos, principalmente em menores, ou em maiores frequências?

Link para o post
Compartilhar em outros sites
5 horas atrás, Thiago Miotto disse:

Tenta trocar o tipo do infreq para INPUT_PULLUP

@Thiago Miotto fiz isso como disse, e testei no gerador de frequência do site e também pelo programa, mas está estranho não estou confiando muito no meu PC pra fazer esse tipo de coisa, vou tentar usar a função TONE no arduino e usar o outro arduino para ler a frequência, pode não ser 100%, mas vamos ter certeza que é uma onda quadrada mesmo.

 

E se este teste for inconclusivo também eu vejo se monto o circuito que o @.if passou na pagina anterior

WhatsApp Image 2021-01-23 at 04.47.29.jpeg

WhatsApp Image 2021-01-23 at 04.48.09.jpeg

WhatsApp Image 2021-01-23 at 04.50.08.jpeg

WhatsApp Image 2021-01-23 at 04.50.45.jpeg

Link para o post
Compartilhar em outros sites

@Thiago Miotto criei o código para um arduino mandar as frequências para o outro ler e mostrar no LCD e testei com osciloscópio de PC, apesar de não ser muito confiável o pc mostrou exatamente as frequências que programei, printei uma das frequências e o código é esse:

 

Citação

#define saida 2

void setup() {
  // put your setup code here, to run once:
  

}

void loop() {
  // put your main code here, to run repeatedly:
  tone(saida, 40, 5000);
  delay(5000);
  tone(saida, 60, 5000);
  delay(5000);
  tone(saida, 100, 5000);
  delay(5000);
  tone(saida, 150, 5000);
  delay(5000);
  tone(saida, 300, 5000);
  delay(5000);
  tone(saida, 800, 5000);
  delay(5000);
  tone(saida, 1000, 5000);
  delay(5000);
  tone(saida, 1500, 5000);
  delay(5000);
  tone(saida, 4000, 5000);
  delay(5000);

}

mas o arduino receptor está mais doido ainda tirei uma foto dele, qualquer uma das frequências dá mais de 30 mil hertz 😳

 

 

 

frequencia1.jpeg

freq1.jpg

 

Pra piorar a ponta do conector P2 (bem porcaria) soltou dentro do conector de audio do PC... acho que não tem como tirar ele dali sem trocar o conector da placa-mãe né?

Link para o post
Compartilhar em outros sites
20 minutos atrás, ComandateGustavo disse:

Pra piorar a ponta do conector P2 (bem porcaria) soltou dentro do conector de audio do PC... acho que não tem como tirar ele dali sem trocar o conector da placa-mãe né?

não ficou nadinha pra fora? Que consiga alavancar com uma faca de ponta

Se não der, perdido por perdido, tenta usar uma agulha se tiver em casa

E no seu código antigo, como ficou a leitura?

Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!