Ir para conteúdo
View in the app

A better way to browse. Learn more.

EletrônicaBR.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Navegação Limpa e Sem Anúncios! (Cadastre-se)

O melhor fórum técnico do mundo está de cara nova e de portas abertas! Estamos de cara nova e com ferramentas ainda mais poderosas para a sua bancada. Faça o seu cadastro de forma rápida e simples para acessar o maior e mais atualizado acervo de Esquemas Elétricos, BIOS e Firmwares da internet.

Aqui, o conhecimento vale muito: através do nosso sistema de créditos, membros participativos ganham acesso totalmente gratuito aos downloads. Venha trocar experiências com os melhores especialistas do mercado!

👉 Técnico sem o EletrônicaBR não é um técnico completo!

 

RPM por pulso de bobina, ESP32

Featured Replies

Postado

Estou desenvolvendo um sensor de rpm e marcador de combustível para o meu carro usando esp32, este usa os pulsos negativos da bobina para fazer a medição de rpm e um medidor de tensão que mede a tensão depois de passar pela boia de combustível, porem estou tendo problemas com o código. Se alguém puder me ajudar com isso agradeço.

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço 0x27, 16 colunas, 2 linhas

const int ignitionPin = 2; // Pino de leitura do pulso da bobina de ignição
const int fuelSensorPin = A0; // Pino de leitura do sensor de combustível

volatile int rpmCount = 0;
int rpm = 0;
float fuelVoltage = 0.0;
float fuelLevel = 0.0;

unsigned long lastMillis = 0;

void setup() {
  Serial.begin(115200);
  
  attachInterrupt(digitalPinToInterrupt(ignitionPin), countRPM, FALLING);

  lcd.begin(16, 2);  // Inicializa o LCD
  lcd.init();
  lcd.backlight();
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - lastMillis >= 1000) {
    rpm = rpmCount * 60 / 2; // Calcular RPM
    fuelVoltage = analogRead(fuelSensorPin) * (5.0 / 1023.0); // Converter leitura analógica para tensão
    fuelLevel = map(fuelVoltage, 0.0, 5.0, 0.0, 100.0); // Mapear tensão para porcentagem de combustível

    Serial.print("RPM: ");
    Serial.println(rpm);

    Serial.print("FUEL: ");
    Serial.print(fuelLevel);
    Serial.println("%");

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("RPM: ");
    lcd.print(rpm);
    lcd.setCursor(0, 1);
    lcd.print("FUEL: ");
    lcd.print(fuelLevel);
    lcd.print("%");

    rpmCount = 0; // Resetar contagem de RPM
    lastMillis = currentMillis;
  }
}

void countRPM() {
  rpmCount++;
}

Editado: por gustavo boçon

  • gustavo boçon alterou o título para RPM por pulso de bobina, ESP32
  • 1 mês depois...
Postado
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

const int ignitionPin = 2;
const int fuelSensorPin = A0;
const unsigned long updateInterval = 1000; // Atualização a cada 1000 ms (1 segundo)
const unsigned long debounceInterval = 10; // Intervalo de debounce para a contagem de RPM

volatile int rpmCount = 0;
int rpm = 0;
float fuelLevel = 0.0;

unsigned long lastMillis = 0;
unsigned long lastRPMInterrupt = 0;

void setup() {
  Serial.begin(115200);
  pinMode(ignitionPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(ignitionPin), countRPM, FALLING);

  lcd.begin();
  lcd.backlight();
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - lastMillis >= updateInterval) {
    calculateAndDisplay();
    lastMillis = currentMillis;
  }
}

void calculateAndDisplay() {
    rpm = rpmCount * 60 / 2; // Calcular RPM
    rpmCount = 0; // Resetar contagem de RPM

    float fuelVoltage = analogRead(fuelSensorPin) * (5.0 / 1023.0);
    fuelLevel = map(fuelVoltage, 0, 5.0, 0, 100); // Mapear tensão para porcentagem de combustível

    // Enviar para Serial
    Serial.print("RPM: ");
    Serial.println(rpm);
    Serial.print("FUEL: ");
    Serial.print(fuelLevel);
    Serial.println("%");

    // Atualizar LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("RPM: ");
    lcd.print(rpm);
    lcd.setCursor(0, 1);
    lcd.print("FUEL: ");
    lcd.print(fuelLevel);
    lcd.print("%");
}

void countRPM() {
  unsigned long currentMillis = millis();
  if (currentMillis - lastRPMInterrupt > debounceInterval) {
    rpmCount++;
    lastRPMInterrupt = currentMillis;
  }
}

amigo se puder ser mais especifico vai ajudar mais 

  • 2 anos depois...
Postado
En 13/2/2024 a las 13:01, gustavo boçon dijo:

Estou desenvolvendo um sensor de rpm e marcador de combustível para o meu carro usando esp32, este usa os pulsos negativos da bobina para fazer a medição de rpm e um medidor de tensão que mede a tensão depois de passar pela boia de combustível, porem estou tendo problemas com o código. Se alguém puder me ajudar com isso agradeço.

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço 0x27, 16 colunas, 2 linhas

const int ignitionPin = 2; // Pino de leitura do pulso da bobina de ignição
const int fuelSensorPin = A0; // Pino de leitura do sensor de combustível

volatile int rpmCount = 0;
int rpm = 0;
float fuelVoltage = 0.0;
float fuelLevel = 0.0;

unsigned long lastMillis = 0;

void setup() {
  Serial.begin(115200);
  
  attachInterrupt(digitalPinToInterrupt(ignitionPin), countRPM, FALLING);

  lcd.begin(16, 2);  // Inicializa o LCD
  lcd.init();
  lcd.backlight();
}

void loop() {
  unsigned long currentMillis = millis();

  if (currentMillis - lastMillis >= 1000) {
    rpm = rpmCount * 60 / 2; // Calcular RPM
    fuelVoltage = analogRead(fuelSensorPin) * (5.0 / 1023.0); // Converter leitura analógica para tensão
    fuelLevel = map(fuelVoltage, 0.0, 5.0, 0.0, 100.0); // Mapear tensão para porcentagem de combustível

    Serial.print("RPM: ");
    Serial.println(rpm);

    Serial.print("FUEL: ");
    Serial.print(fuelLevel);
    Serial.println("%");

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("RPM: ");
    lcd.print(rpm);
    lcd.setCursor(0, 1);
    lcd.print("FUEL: ");
    lcd.print(fuelLevel);
    lcd.print("%");

    rpmCount = 0; // Resetar contagem de RPM
    lastMillis = currentMillis;
  }
}

void countRPM() {
  rpmCount++;
}

Qué problemas estás teniendo? Más a nivel electrónico por los pulsos o señales , o más a nivel de lógica del programa?

Participe agora da conversa!

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, faça login para postar com sua conta.

Visitante
Responder

Account

Navigation

Pesquisar

Pesquisar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.