Arduino ile 41F hall sensör okuma sorunu

Kahraman

Yeni Üye
Katılım
14 Ekim 2024
Mesajlar
8
merabalar formda yeniyim 48 volt elektirikli bisiklet için ( hız /tahmini kalan km/batarya kapasitesi/toplam yapılan mesafe) gösterge paneli geliştirmeye çalışıyorum. Fakat Anlık hız ekranda sabit 4.86 olarak duruyor bir türlü hall sensörden gelen bilgiye göre hesaplamasını yapamadım kodu tam olarak paylaşıyorum yardımcı olursanız sevinirim herkese kolay gelsin

C++:
#include <EEPROM.h>      // Toplam km'yi saklamak için

#include <LiquidCrystal.h>  // LCD ekranı kontrol etmek için



LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // LCD pin bağlantıları



const int buttonPin = 6;  // Ekran geçiş butonu

const int resetPin = 7;   // Toplam km sıfırlama butonu

const int ledPin = 8;     // Far kontrol butonu

const int hallSensorPin = 9; // Hall sensörü pini

const int batteryPin = A0; // Batarya voltajı A0 pininden okunacak



float wheelCircumference = 1.35; // Tekerlek çapı (135 cm = 1.35 m)

unsigned long totalDistance = 0; // Toplam mesafe

float currentSpeed = 0;          // Anlık hız

int batteryPercentage = 100;     // Batarya yüzdesi (örnek veri)

bool screenToggle = false;       // Ekran durumu (false: birinci ekran, true: ikinci ekran)



volatile unsigned long pulseCount = 0;  // Hall sensöründen gelen sinyaller

unsigned long lastPulseTime = 0;        // Son sinyal zamanı

unsigned long lastUpdateTime = 0;       // Zaman güncellemesi için

unsigned long lastDisplayUpdate = 0;    // Ekran güncelleme zamanı

bool firstScreenUpdated = false;        // İlk ekran güncellendi mi

bool secondScreenUpdated = false;       // İkinci ekran güncellendi mi



void setup() {

  pinMode(buttonPin, INPUT_PULLUP);   // Ekran geçiş butonu

  pinMode(resetPin, INPUT_PULLUP);    // Toplam km sıfırlama butonu

  pinMode(ledPin, OUTPUT);            // Far kontrol pin

  pinMode(hallSensorPin, INPUT_PULLUP);  // Hall sensörü pini



  attachInterrupt(digitalPinToInterrupt(hallSensorPin), countPulse, FALLING); // Hall sensörünü kesmeye bağla



  lcd.begin(16, 2);  // 16x2 LCD ekran

  lcd.clear();



  // EEPROM'dan son mesafeyi yükleyelim

  totalDistance = EEPROM.read(0) | (EEPROM.read(1) << 8); // EEPROM'dan toplam mesafeyi geri yükle



  lcd.setCursor(0, 0);

  lcd.print("Hazir...");

  delay(2000); // Başlangıçta mesaj

}



void loop() {

  // Zaman ve hız güncelleme her 1 saniyede bir

  if (millis() - lastUpdateTime > 1000) {

    currentSpeed = calculateSpeed();  // Anlık hızı hesapla

    batteryPercentage = calculateBatteryPercentage();  // Batarya yüzdesini güncelle

    lastUpdateTime = millis();



    // Ekranı 1 saniyede bir güncelle

    if (!screenToggle) {

      displayFirstScreen();

    } else {

      displaySecondScreen();

    }

  }



  // Ekran geçiş butonuna basıldığında

  if (digitalRead(buttonPin) == LOW) {

    delay(200);  // Buton basışını dengele

    screenToggle = !screenToggle;  // Ekran değiştir

  }



  // Toplam mesafe sıfırlama butonuna basıldığında

  if (digitalRead(resetPin) == LOW) {

    delay(200);

    totalDistance = 0;

    EEPROM.write(0, totalDistance & 0xFF);       // İlk 8 bit

    EEPROM.write(1, (totalDistance >> 8) & 0xFF); // İkinci 8 bit

  }



  // Far kontrol butonu

  if (digitalRead(ledPin) == LOW) {

    digitalWrite(ledPin, !digitalRead(ledPin)); // Far aç/kapat

  }

}



void displayFirstScreen() {

  lcd.clear(); // Ekranı temizle

  lcd.setCursor(0, 0);

  lcd.print("Hiz: ");     // Anlık hız

  lcd.setCursor(6, 0);

  lcd.print(currentSpeed);



  lcd.setCursor(0, 1);

  lcd.print("Mesafe");    // Sabit metin



  lcd.setCursor(9, 1);

  lcd.print(calculateRemainingDistance()); // Kalan mesafe

}



void displaySecondScreen() {

  lcd.clear(); // Ekranı temizle

  lcd.setCursor(0, 0);

  lcd.print("Pil: ");

  lcd.setCursor(5, 0);

  lcd.print(batteryPercentage);  // Pil kapasitesi



  lcd.setCursor(0, 1);

  lcd.print("T.mesafe");  // Toplam mesafe



  lcd.setCursor(9, 1);

  lcd.print(totalDistance);  // EEPROM'dan gelen toplam mesafe

}



void countPulse() {

  pulseCount++;  // Hall sensöründen gelen her sinyali say

}



float calculateSpeed() {

  unsigned long timeNow = millis();

  float timeDifference = (timeNow - lastPulseTime) / 1000.0; // Saniyeye çevir

  lastPulseTime = timeNow;



  // Tekerlek çevresi ile hız hesapla (m/s)

  float speed = (wheelCircumference / timeDifference) * 3.6; // km/h'ye çevir

  return speed;

}



int calculateRemainingDistance() {

  // Pil kapasitesine göre kalan mesafeyi hesapla (Maksimum 35 km)

  return (batteryPercentage * 0.35); // %1 için 0.35 km

}



int calculateBatteryPercentage() {

  int analogValue = analogRead(batteryPin);  // A0 pininden voltajı oku

  float batteryVoltage = analogValue * (5.0 / 1023.0);  // 0-1023 arasındaki değeri voltaja çevir (Arduino 5V referansı)



  // Batarya voltajını %0 ile %100 arasında bir değere dönüştür

  // Batarya %100'deyken 3.37V ve %0'dayken 2.76V

  if (batteryVoltage > 3.37) batteryVoltage = 3.37;

  if (batteryVoltage < 2.76) batteryVoltage = 2.76;

 

  return map(batteryVoltage * 100, 276, 337, 0, 100);  // Voltajı %'ye dönüştür

}
 
Last edited by a moderator:
merabalar formda yeniyim 48 volt elektirikli bisiklet için ( hız /tahmini kalan km/batarya kapasitesi/toplam yapılan mesafe) gösterge paneli geliştirmeye çalışıyorum. Fakat Anlık hız ekranda sabit 4.86 olarak duruyor bir türlü hall sensörden gelen bilgiye göre hesaplamasını yapamadım kodu tam olarak paylaşıyorum yardımcı olursanız sevinirim herkese kolay gelsin



#include <EEPROM.h> // Toplam km'yi saklamak için
#include <LiquidCrystal.h> // LCD ekranı kontrol etmek için

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD pin bağlantıları

const int buttonPin = 6; // Ekran geçiş butonu
const int resetPin = 7; // Toplam km sıfırlama butonu
const int ledPin = 8; // Far kontrol butonu
const int hallSensorPin = 9; // Hall sensörü pini
const int batteryPin = A0; // Batarya voltajı A0 pininden okunacak

float wheelCircumference = 1.35; // Tekerlek çapı (135 cm = 1.35 m)
unsigned long totalDistance = 0; // Toplam mesafe
float currentSpeed = 0; // Anlık hız
int batteryPercentage = 100; // Batarya yüzdesi (örnek veri)
bool screenToggle = false; // Ekran durumu (false: birinci ekran, true: ikinci ekran)

volatile unsigned long pulseCount = 0; // Hall sensöründen gelen sinyaller
unsigned long lastPulseTime = 0; // Son sinyal zamanı
unsigned long lastUpdateTime = 0; // Zaman güncellemesi için
unsigned long lastDisplayUpdate = 0; // Ekran güncelleme zamanı
bool firstScreenUpdated = false; // İlk ekran güncellendi mi
bool secondScreenUpdated = false; // İkinci ekran güncellendi mi

void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Ekran geçiş butonu
pinMode(resetPin, INPUT_PULLUP); // Toplam km sıfırlama butonu
pinMode(ledPin, OUTPUT); // Far kontrol pin
pinMode(hallSensorPin, INPUT_PULLUP); // Hall sensörü pini

attachInterrupt(digitalPinToInterrupt(hallSensorPin), countPulse, FALLING); // Hall sensörünü kesmeye bağla

lcd.begin(16, 2); // 16x2 LCD ekran
lcd.clear();

// EEPROM'dan son mesafeyi yükleyelim
totalDistance = EEPROM.read(0) | (EEPROM.read(1) << 8); // EEPROM'dan toplam mesafeyi geri yükle

lcd.setCursor(0, 0);
lcd.print("Hazir...");
delay(2000); // Başlangıçta mesaj
}

void loop() {
// Zaman ve hız güncelleme her 1 saniyede bir
if (millis() - lastUpdateTime > 1000) {
currentSpeed = calculateSpeed(); // Anlık hızı hesapla
batteryPercentage = calculateBatteryPercentage(); // Batarya yüzdesini güncelle
lastUpdateTime = millis();

// Ekranı 1 saniyede bir güncelle
if (!screenToggle) {
displayFirstScreen();
} else {
displaySecondScreen();
}
}

// Ekran geçiş butonuna basıldığında
if (digitalRead(buttonPin) == LOW) {
delay(200); // Buton basışını dengele
screenToggle = !screenToggle; // Ekran değiştir
}

// Toplam mesafe sıfırlama butonuna basıldığında
if (digitalRead(resetPin) == LOW) {
delay(200);
totalDistance = 0;
EEPROM.write(0, totalDistance & 0xFF); // İlk 8 bit
EEPROM.write(1, (totalDistance >> 8) & 0xFF); // İkinci 8 bit
}

// Far kontrol butonu
if (digitalRead(ledPin) == LOW) {
digitalWrite(ledPin, !digitalRead(ledPin)); // Far aç/kapat
}
}

void displayFirstScreen() {
lcd.clear(); // Ekranı temizle
lcd.setCursor(0, 0);
lcd.print("Hiz: "); // Anlık hız
lcd.setCursor(6, 0);
lcd.print(currentSpeed);

lcd.setCursor(0, 1);
lcd.print("Mesafe"); // Sabit metin

lcd.setCursor(9, 1);
lcd.print(calculateRemainingDistance()); // Kalan mesafe
}

void displaySecondScreen() {
lcd.clear(); // Ekranı temizle
lcd.setCursor(0, 0);
lcd.print("Pil: ");
lcd.setCursor(5, 0);
lcd.print(batteryPercentage); // Pil kapasitesi

lcd.setCursor(0, 1);
lcd.print("T.mesafe"); // Toplam mesafe

lcd.setCursor(9, 1);
lcd.print(totalDistance); // EEPROM'dan gelen toplam mesafe
}

void countPulse() {
pulseCount++; // Hall sensöründen gelen her sinyali say
}

float calculateSpeed() {
unsigned long timeNow = millis();
float timeDifference = (timeNow - lastPulseTime) / 1000.0; // Saniyeye çevir
lastPulseTime = timeNow;

// Tekerlek çevresi ile hız hesapla (m/s)
float speed = (wheelCircumference / timeDifference) * 3.6; // km/h'ye çevir
return speed;
}

int calculateRemainingDistance() {
// Pil kapasitesine göre kalan mesafeyi hesapla (Maksimum 35 km)
return (batteryPercentage * 0.35); // %1 için 0.35 km
}

int calculateBatteryPercentage() {
int analogValue = analogRead(batteryPin); // A0 pininden voltajı oku
float batteryVoltage = analogValue * (5.0 / 1023.0); // 0-1023 arasındaki değeri voltaja çevir (Arduino 5V referansı)

// Batarya voltajını %0 ile %100 arasında bir değere dönüştür
// Batarya %100'deyken 3.37V ve %0'dayken 2.76V
if (batteryVoltage > 3.37) batteryVoltage = 3.37;
if (batteryVoltage < 2.76) batteryVoltage = 2.76;

return map(batteryVoltage * 100, 276, 337, 0, 100); // Voltajı %'ye dönüştür
}
Kodu inceleyebilecek vaktim yok malesef ama şumu önerebilirim öncelikle Sistemi parçalara bölüp test edin mesela öncelikle hal sensörü gerçekten okuyabiliyor musunuz 3 tane ledi hal sensörlerin durumuna göre yakarak test edebilirsiniz
 
Foruma hoş geldiniz.
Kodu yorumlamak isteyenler için kolaylık olması açısından "forumun kod ekleme" özelliğini kullandım. Sizlerde kod içeren mesajlarınızda bu özelliği kullanırsanız, size yardım etmek isteyenlerin işini kolaylaştırmış olursunuz.

C:
#include <EEPROM.h> // Toplam km'yi saklamak için
#include <LiquidCrystal.h> // LCD ekranı kontrol etmek için

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD pin bağlantıları

const int buttonPin = 6; // Ekran geçiş butonu
const int resetPin = 7; // Toplam km sıfırlama butonu
const int ledPin = 8; // Far kontrol butonu
const int hallSensorPin = 9; // Hall sensörü pini
const int batteryPin = A0; // Batarya voltajı A0 pininden okunacak

float wheelCircumference = 1.35; // Tekerlek çapı (135 cm = 1.35 m)
unsigned long totalDistance = 0; // Toplam mesafe
float currentSpeed = 0; // Anlık hız
int batteryPercentage = 100; // Batarya yüzdesi (örnek veri)
bool screenToggle = false; // Ekran durumu (false: birinci ekran, true: ikinci ekran)

volatile unsigned long pulseCount = 0; // Hall sensöründen gelen sinyaller
unsigned long lastPulseTime = 0; // Son sinyal zamanı
unsigned long lastUpdateTime = 0; // Zaman güncellemesi için
unsigned long lastDisplayUpdate = 0; // Ekran güncelleme zamanı
bool firstScreenUpdated = false; // İlk ekran güncellendi mi
bool secondScreenUpdated = false; // İkinci ekran güncellendi mi

void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Ekran geçiş butonu
pinMode(resetPin, INPUT_PULLUP); // Toplam km sıfırlama butonu
pinMode(ledPin, OUTPUT); // Far kontrol pin
pinMode(hallSensorPin, INPUT_PULLUP); // Hall sensörü pini

attachInterrupt(digitalPinToInterrupt(hallSensorPin), countPulse, FALLING); // Hall sensörünü kesmeye bağla

lcd.begin(16, 2); // 16x2 LCD ekran
lcd.clear();

// EEPROM'dan son mesafeyi yükleyelim
totalDistance = EEPROM.read(0) | (EEPROM.read(1) << 8); // EEPROM'dan toplam mesafeyi geri yükle

lcd.setCursor(0, 0);
lcd.print("Hazir...");
delay(2000); // Başlangıçta mesaj
}

void loop() {
// Zaman ve hız güncelleme her 1 saniyede bir
if (millis() - lastUpdateTime > 1000) {
currentSpeed = calculateSpeed(); // Anlık hızı hesapla
batteryPercentage = calculateBatteryPercentage(); // Batarya yüzdesini güncelle
lastUpdateTime = millis();

// Ekranı 1 saniyede bir güncelle
if (!screenToggle) {
displayFirstScreen();
} else {
displaySecondScreen();
}
}

// Ekran geçiş butonuna basıldığında
if (digitalRead(buttonPin) == LOW) {
delay(200); // Buton basışını dengele
screenToggle = !screenToggle; // Ekran değiştir
}

// Toplam mesafe sıfırlama butonuna basıldığında
if (digitalRead(resetPin) == LOW) {
delay(200);
totalDistance = 0;
EEPROM.write(0, totalDistance & 0xFF); // İlk 8 bit
EEPROM.write(1, (totalDistance >> 8) & 0xFF); // İkinci 8 bit
}

// Far kontrol butonu
if (digitalRead(ledPin) == LOW) {
digitalWrite(ledPin, !digitalRead(ledPin)); // Far aç/kapat
}
}

void displayFirstScreen() {
lcd.clear(); // Ekranı temizle
lcd.setCursor(0, 0);
lcd.print("Hiz: "); // Anlık hız
lcd.setCursor(6, 0);
lcd.print(currentSpeed);

lcd.setCursor(0, 1);
lcd.print("Mesafe"); // Sabit metin

lcd.setCursor(9, 1);
lcd.print(calculateRemainingDistance()); // Kalan mesafe
}

void displaySecondScreen() {
lcd.clear(); // Ekranı temizle
lcd.setCursor(0, 0);
lcd.print("Pil: ");
lcd.setCursor(5, 0);
lcd.print(batteryPercentage); // Pil kapasitesi

lcd.setCursor(0, 1);
lcd.print("T.mesafe"); // Toplam mesafe

lcd.setCursor(9, 1);
lcd.print(totalDistance); // EEPROM'dan gelen toplam mesafe
}

void countPulse() {
pulseCount++; // Hall sensöründen gelen her sinyali say
}

float calculateSpeed() {
unsigned long timeNow = millis();
float timeDifference = (timeNow - lastPulseTime) / 1000.0; // Saniyeye çevir
lastPulseTime = timeNow;

// Tekerlek çevresi ile hız hesapla (m/s)
float speed = (wheelCircumference / timeDifference) * 3.6; // km/h'ye çevir
return speed;
}

int calculateRemainingDistance() {
// Pil kapasitesine göre kalan mesafeyi hesapla (Maksimum 35 km)
return (batteryPercentage * 0.35); // %1 için 0.35 km
}

int calculateBatteryPercentage() {
int analogValue = analogRead(batteryPin); // A0 pininden voltajı oku
float batteryVoltage = analogValue * (5.0 / 1023.0); // 0-1023 arasındaki değeri voltaja çevir (Arduino 5V referansı)

// Batarya voltajını %0 ile %100 arasında bir değere dönüştür
// Batarya %100'deyken 3.37V ve %0'dayken 2.76V
if (batteryVoltage > 3.37) batteryVoltage = 3.37;
if (batteryVoltage < 2.76) batteryVoltage = 2.76;

return map(batteryVoltage * 100, 276, 337, 0, 100); // Voltajı %'ye dönüştür
}
 
Hall sensörü kesmeye bağladıktan sonra hiç bir yerde kullanmamışsın. Ne okuma, nede okunanı hesaplama gibi bir kod bloğu göremedim.
 
İlginize çok teşekkür ederim arduino ya sinyal almak için hall sensörünü bisikletin ön tekerleğe yaptığım bi düzenek üzerinden alıyorum gelen bilgide herhangi bi sorun yok onunda sağlamasını şöyle yaptım farklı bir hız ölçebilen arduino kodu yüklediğimde aynı düzenekle hız göstergesi çalışıyor.
 
Hall sensör bağlantınız doğruysa, kesmede
C:
void countPulse() {
pulseCount++; // <--- HIZI ÖLÇTÜĞÜNÜZ DEĞİŞKENİ BAŞKA BİR YERDE KULLANMIYORSUNUZ
}


4.86 görmenizin nedeni aşağıdaki fonksiyonu her 1000 milisaniyede bir çağırmanız.
timeDifference değeri hep 1 e eşit oluyor. Haliyle aşağıdaki km/h hesaplama yaptığınız satır sonucu 4.86 çıkıyor.


C:
float calculateSpeed() {
unsigned long timeNow = millis();
float timeDifference = (timeNow - lastPulseTime) / 1000.0; // Saniyeye çevir
lastPulseTime = timeNow;

// Tekerlek çevresi ile hız hesapla (m/s)
float speed = (wheelCircumference / timeDifference) * 3.6; // km/h'ye çevir
return speed;
}
 
İlginize çok teşekkür ederim arduino ya sinyal almak için hall sensörünü bisikletin ön tekerleğe yaptığım bi düzenek üzerinden alıyorum gelen bilgide herhangi bi sorun yok onunda sağlamasını şöyle yaptım farklı bir hız ölçebilen arduino kodu yüklediğimde aynı düzenekle hız göstergesi çalışıyor.
Test ettiğiniz arduino kodundaki ilgili kısımları bu projeye taşıyabilirsiniz.
 
Gokrtl ustam kesme satırından sonra countPulse geçen satırlarda hesaplaması gerekmiyormu ?
 
Yukarıdaki mesajda bu sorunuzun cevabı var.

2024-10-14_22-02.png
 
Test ettiğiniz arduino kodundaki ilgili kısımları bu projeye taşıyabilirsiniz.
frmman o kod da extra komutlar var son çare yine onu ayıklayıp buna entegre etmeye calısıcam . ama bu kodda yaptıgım hata cok zor bişey değilse diğer kodla vakit kaybetmek istemedim :)
 
Diğer çalışıyor dediğiniz kodu paylaşın. Onun üzerinden yönlendirme yapılabilir.

Veya:

Mevcut kodlarınızı çok fazla değiştirmeden yapmak için;
+ pulseCount değerini calculateSpeed() fonksiyonu içerindeki hesaplamaya dahil etmeniz ve hesaplama sonrasında sıfırlama yöntemi kullanılabilir. Teker döndükçe pulsecount tekrar artmaya devam edecek, 1000ms içerisinde teker kaç tur atmışsa bu değer kullanılarak hız hesabı yapılacak.

- Bu yöntemin dezavantajı: Teker bir turda bir puls üretecek şekilde (sadece tekerde bir adet mıknatıs varsa) olduğu için, 1000ms ölçüm için bekleme süresi yeterli olmaz. Düşük hızlarda ölçüm yapamazsınız. Ölçüm yapıldığı durumlarda ise tekrarlanabilir tutarlı ölçümler yapamazsınız.

Önerilen yöntem: İki puls arasındaki süreyi ölçüp hız hesabını buna göre yapacak şekilde bir yapı kurgulamak / yazmak gerekir. Kendiniz kodlama yapabiliyorsanız bu yöntem üzerinden ilerleyebilirsiniz.
 
Son düzenleme:
Elektrikli bisikletinin kendi motoru muhtemelen BLDC motordur, kendi içinde zaten sensörleri ve bu sensörlerin çıkış kabloları vardır. 3 adet hall sensörü bu tip motorlarda zaten var. Bu sensör çıkışları ekran için kullanılabilir.
Onun için merak ettim, neden ek bir hall sensörü takma ihtiyacınız oldu?
 
Elektrikli bisikletinin kendi motoru muhtemelen BLDC motordur, kendi içinde zaten sensörleri ve bu sensörlerin çıkış kabloları vardır. 3 adet hall sensörü bu tip motorlarda zaten var. Bu sensör çıkışları ekran için kullanılabilir.
Onun için merak ettim, neden ek bir hall sensörü takma ihtiyacınız oldu?
Ukalalık gibi olmasın bazı bldc motorlar ters emk ile ölçüm yapıyor. Arkadaşların motorlarında hal sensör bulunmayabilir.
 
Bir turda tek sensör bilgisi olduğu için; sensörden gelen iki pals arasınındaki zamanı ölçüp, değerlendirmek daha doğru sonuçlar verecektir.
Arduino 2 ve 3 nolu pinlerdeki kesme, diğer kesmelere göre daha önceliklidir.
 
Son düzenleme:
Diğer çalışıyor dediğiniz kodu paylaşın. Onun üzerinden yönlendirme yapılabilir.

Veya:

Mevcut kodlarınızı çok fazla değiştirmeden yapmak için;
+ pulseCount değerini calculateSpeed() fonksiyonu içerindeki hesaplamaya dahil etmeniz ve hesaplama sonrasında sıfırlama yöntemi kullanılabilir. Teker döndükçe pulsecount tekrar artmaya devam edecek, 1000ms içerisinde teker kaç tur atmışsa bu değer kullanılarak hız hesabı yapılacak.

- Bu yöntemin dezavantajı: Teker bir turda bir puls üretecek şekilde (sadece tekerde bir adet mıknatıs varsa) olduğu için, 1000ms ölçüm için bekleme süresi yeterli olmaz. Düşük hızlarda ölçüm yapamazsınız. Ölçüm yapıldığı durumlarda ise tekrarlanabilir tutarlı ölçümler yapamazsınız.

Önerilen yöntem: İki puls arasındaki süreyi ölçüp hız hesabını buna göre yapacak şekilde bir yapı kurgulamak / yazmak gerekir. Kendiniz kodlama yapabiliyorsanız bu yöntem üzerinden ilerleyebilirsiniz.
Yardımların için teşekkür ederim ustam programalama işinde çok yeniyim çatpat bildiklerimle yapay zekanın yardımıyla bişeyler yapma istedim ama sanırım benim için çok erken şimdilik batarya kapasitesini ve mevcut kapasiteyle kaç km yol gideceğini hesaplıcak şekilde kod u ayarladım kodlama işine daha hakim oldugumda geliştiricem işallah ve niyetim seninde tavsiye ettiğin gibi 2 pulse arasında geçen süreyle ve tekerin tam bir turla kat ettiği yol üzerinden hesaplatıp ekrana yazmaktı ama yapay zekayla bi ortak noktada bir türlü buluşamadık :) tekrar teşekkür ederim yardım ve tavsiyeler için iyi formlar
 
Elektrikli bisikletinin kendi motoru muhtemelen BLDC motordur, kendi içinde zaten sensörleri ve bu sensörlerin çıkış kabloları vardır. 3 adet hall sensörü bu tip motorlarda zaten var. Bu sensör çıkışları ekran için kullanılabilir.
Onun için merak ettim, neden ek bir hall sensörü takma ihtiyacınız oldu?
evet bisikletin motorunda sensörleri mevcut yanlız tekerin bir turunda ortalama 40 ile 45 arası puls gönderiyor buda arduinoda sorun çıkarabilir yüksek süratlarda atlama yapabilir veya okuma hızı yetişmeye bilir diye düşündüm o yüzden tek sensör kullanıp daha kolay sayabileceğini düşündüm hatalı seçim olabilir :)
 
Ukalalık gibi olmasın bazı bldc motorlar ters emk ile ölçüm yapıyor. Arkadaşların motorlarında hal sensör bulunmayabilir.
İlgine tesekkür ederim motorda hal sensöri mevcut. tekerdeki sensörlerden çok fazla puls geleceğinden hata olusabilir diye düşündüm bu yüzden tek sensör kullanmayı sectim hatalı bi seçim olabilir arduino konusunda acemiyim yanlış seçim olabilir :)
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,977
Mesajlar
119,195
Üyeler
2,834
Son üye
Tulpar

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top