Skocz do zawartości

Obrotomierz na Arduino - błąd pomiaru


lukas616

Pomocna odpowiedź

Witam. Chce zrobic obrotomierz do arduino. Napisalem program wszystko podpiete i pojawia sie problem. Przy przesuwaniu magnesem czujnik zlicza raz pojedynczo a raz podwojnie a raz wcale nie zlicza. Przy wiekszej liczbie zliczen blad jest znaczacy. Uzywam czujnika halla a3144 na plytce komparator lm393. Jak naprawic ten blad. W kodzie uzywam funkcji przerywania. 

Link do komentarza
Share on other sites

(edytowany)

Bez pokazania programu się nie obejdzie.

Ten czujnik ma wbudowany przerzutnik Schmidta, więc powinien zmieniać stan w sposób pewny, bez dodatkowych impulsów.

Edytowano przez jand
Link do komentarza
Share on other sites

14 godzin temu, jand napisał:

Bez pokazania programu się nie obejdzie.

Ten czujnik ma wbudowany przerzutnik Schmidta, więc powinien zmieniać stan w sposób pewny, bez dodatkowych impulsów.

Oto kod

#include <OneWire.h>
  #include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);
int predkoscpin = 18;
volatile int impulsydystansu = 0;
float Dystans = 0;

void getFlow3 ()
{  impulsydystansu++;
 
} 

void setup()
{
lcd.init();
lcd.backlight(); 
pinMode(predkoscpin, INPUT);
attachInterrupt(digitalPinToInterrupt(18), getFlow3, FALLING);
  
  void loop ()  {
Dystans = (impulsydystansu);  
lcd.setCursor(0,2);
lcd.print("Dystans");  
lcd.setCursor(12,2);            
lcd.print(Dystans,1);  
lcd.setCursor(16,2);  
lcd.print("km");}

 

Link do komentarza
Share on other sites

W programie nie widzę nic strasznego (rozumiem, że uruchamiasz go na Arduino UNO), wracamy więc do sprzętu.

Nie pokazałeś schematu, ale mam nadzieję iż masz świadomość że czujnik  A3144 ma wyjście z otwartym kolektorem, a więc wymaga opornika podciągającego do zasilania.

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 godzinę temu, jand napisał:

W programie nie widzę nic strasznego (rozumiem, że uruchamiasz go na Arduino UNO), wracamy więc do sprzętu.

Nie pokazałeś schematu, ale mam nadzieję iż masz świadomość że czujnik  A3144 ma wyjście z otwartym kolektorem, a więc wymaga opornika podciągającego do zasilania.

 

Uzywam arduino mega a opornik podciagajacy probowalem ale to nic nie zmienia. Zreszta uzywam takiego czujnika halla( jak w zalaczeniu) wiec tu juz chyba jest fabrycznie montowany rezystor. 

Screenshot_2025-01-18-15-05-56-481_com.android.chrome.jpg

Link do komentarza
Share on other sites

(edytowany)

Podłącz pod ten pin generator np 100 impulsów (np. z innego pinu kontrolera). Będziesz wiedział czy moduł hallotronu jest ok.

Robisz na płytce-stykówce?

Edytowano przez kostuch
Link do komentarza
Share on other sites

Przed chwilą, kostuch napisał:

Podłącz pod ten pin generator np 100 impulsów (np. z innego pinu esp). Będziesz wiedział czy moduł hallotronu jest ok.

Robisz na płytce-stykówce?

Tak na stykówce

Link do komentarza
Share on other sites

@lukas616 Wczoraj chciałem zobaczyć kod , ale był niepełny. Pomyślałem , że to wina telefonu, ale teraz na komputerze jest to samo , wklej cały  kod. 

No i może sam czujnik jest uszkodzony ? Wprowadź to co @kostuch napisał. 

Temat mnie interesuje , ponieważ sam zamierzam zbudować licznik kilometrów do mojego roweru. Oczywiście bardziej w celach edukacyjnych niż praktycznych :).

Link do komentarza
Share on other sites

5 minut temu, Santiago napisał:

@lukas616 Wczoraj chciałem zobaczyć kod , ale był niepełny. Pomyślałem , że to wina telefonu, ale teraz na komputerze jest to samo , wklej cały  kod. 

No i może sam czujnik jest uszkodzony ? Wprowadź to co @kostuch napisał. 

Temat mnie interesuje , ponieważ sam zamierzam zbudować licznik kilometrów do mojego roweru. Oczywiście bardziej w celach edukacyjnych niż praktycznych :).

Oto cały kod programu

#include <ADS1115_WE.h>

#include <DallasTemperature.h>
#include "RTClib.h"

#include <OneWire.h>
#define ONE_WIRE_BUS 13
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
OneWire OneWire(13); //Podłączenie do A5
//DallasTemperature sensors(OneWire); //Przekazania informacji do biblioteki
uint8_t sensor1[8] = {0x28, 0x61, 0x64, 0x0A, 0xBF, 0xC0, 0x42, 0x52};
uint8_t sensor2[8] = { 0x28, 0x63, 0x90, 0x37, 0x00, 0x00, 0x00, 0xFD};

#include <Bounce2.h>
#include "ADS1X15.h"

ADS1115 ADS(0x48);



#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);
int watermeterPin1 = 2;
int watermeterPin2 = 3;
const int predkoscpin = 18;
int PRZYCISK = 4;
int PRZYCISK1 = 5; 
int menu = 1;
 int podmenu = 1; 
float val = 0.0;
int GUZIK3 = 8;
int GUZIK4 = 9;
int ostatniStan = HIGH; //BO PULLUP

Bounce przycisk = Bounce();
Bounce przycisk1 = Bounce();
Bounce przycisk2 = Bounce();
Bounce przycisk3 = Bounce();

boolean hasChanged = true;
boolean hasChanged1 = true;
boolean hasChanged2 = true;
boolean hasChanged3 = true;
bool flaga_alarm = 1;
bool state = 0;





int liczbamenu = 5;
int liczbapodmenu = 8;
unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;
unsigned long roznicaCzasu = 0;
 
volatile int  impulsychwilowe1;
volatile int  impulsychwilowe2;
volatile int  impulsycalkowite1;
volatile int  impulsycalkowite2;
volatile int  impulsycalkowite11;
volatile int  impulsycalkowite22;
volatile int  impulsypredkosci = 0;
volatile int impulsydystansu = 0;
bool miga = false;
float  liter1;
float  liter2;
float liter11;
float liter22;
float literperhour1;
float literperhour2;
float liter_ha;
float predkosc;
float napiecie = 0;
float napieciealternatora = 0;
float pradladowania = 0;
float szerokosc = 0;
float Dystans = 0;
byte sensorInterrupt = 0;
unsigned long currentTime, loopTime;
byte stopnie[8] = { //customChar to nazwa znaku
B00100,
B01010,
B01010,
B00100,
B00000,
B00000,
B00000,
B00000  
};
byte strzalka[8] = {
  0b00000,
  0b00000,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b00000,
  0b00000
};
byte strzalka1[8] = {
  0b10000,
  0b11000,
  0b11100,
  0b11110,
  0b11110,
  0b11100,
  0b11000,
  0b10000
};
byte godzina[8] = {
  0b00010,
  0b00100,
  0b01000,
  0b11001,
  0b01001,
  0b01111,
  0b01001,
  0b01001
};
byte litry[8] = {
  0b10000,
  0b10000,
  0b10000,
  0b10000,
  0b11101,
  0b00010,
  0b00100,
  0b01000
};


 void getFlow1 ()
{ 
   impulsychwilowe1++;
impulsycalkowite1++;
impulsycalkowite11++;}

 void getFlow3 ()
{impulsypredkosci++;
  impulsydystansu++;
 
} 
void getFlow2 ()
{ 
   impulsychwilowe2++;
impulsycalkowite2++;   
impulsycalkowite22++;
} 


void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(6,1);
lcd.print(" WITAJ! "); 
delay(1000);
pinMode(watermeterPin1, INPUT);
pinMode(watermeterPin2, INPUT);   
pinMode(predkoscpin, INPUT);
Serial.begin(9600); 
attachInterrupt(sensorInterrupt, getFlow1, FALLING);
attachInterrupt(digitalPinToInterrupt(3), getFlow2, FALLING);
attachInterrupt(digitalPinToInterrupt(2), getFlow1, FALLING);
attachInterrupt(digitalPinToInterrupt(18), getFlow3, FALLING);
currentTime = millis();
loopTime = currentTime;   
lcd.clear(); 
sensors.begin(); 
przycisk.attach(PRZYCISK,INPUT_PULLUP); // przypisanie przysku 
przycisk.interval(25);           
przycisk1.attach(PRZYCISK1,INPUT_PULLUP); // przypisanie przysku
przycisk1.interval(25);  
lcd.createChar(0, stopnie);
lcd.createChar(1, strzalka);
lcd.createChar(2, strzalka1);
lcd.createChar(3, litry);
lcd.createChar(4, godzina);
Wire.begin();
pinMode(A13, OUTPUT);
 ADS.begin();
 ADS.setGain(16); // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV
 przycisk2.attach(GUZIK3, INPUT_PULLUP);
 przycisk2.interval(25); 
przycisk3.attach(GUZIK4, INPUT_PULLUP);
 przycisk3.interval(20); 

                                         
} 


void loop ()  {

  
  switch(menu) {
    case 1:
      {
       ekran1();
       przycisk2.update();
  int hasChanged2 = przycisk2.fell();
        if (hasChanged2) {lcd.clear();
        menu = 6; }
         
         // spalanie
      }
      break;
    case 2:
      {
       ekran2();   // temperatura silnika i poziom paliwa
      }
      break;
    case 3:
      {
       ekran3();    // napięcie i natężenie
      }
      break;
      case 4:
      {
      ekran4();    // prędkość i dystans
      }
      break;  
      case 5:
      {
      ekran5();    // prędkość i dystans
      }
      break; 
      case 6:
      {
      ekran6(); //temperatura zewnętrzna i zegar
      } 
      break;  
  }
   przycisk.update();    
przycisk1.update();

  hasChanged = przycisk.fell();
  hasChanged1 = przycisk1.fell();
  
  
  if (hasChanged) {
   menu++;
   if (menu > liczbamenu) menu = 1;
  }
  if (hasChanged1) {
   menu--;
   if (menu < 1 ) menu = 5;
  }  
  int paliwo = map(analogRead(A0),0,1023,100,0);
  if (paliwo <= 10) { //Pierwszy zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, LOW); 
      digitalWrite(46, LOW); 
      digitalWrite(47, LOW); 
      digitalWrite(48, LOW); 
      digitalWrite(49, LOW); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW); 
  } else if (paliwo <= 20) { //Drugi zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, LOW); 
      digitalWrite(47, LOW); 
      digitalWrite(48, LOW); 
      digitalWrite(49, LOW); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);       
  } else if (paliwo <= 30) {  //Trzeci zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, LOW); 
      digitalWrite(48, LOW); 
      digitalWrite(49, LOW); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);       
  } else if (paliwo <= 40) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, LOW); 
      digitalWrite(49, LOW); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);    
  } else if (paliwo <= 50) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, LOW); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);   
  } else if (paliwo <= 60) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, HIGH); 
      digitalWrite(50, LOW); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW); 
  } else if (paliwo <= 70) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, HIGH); 
      digitalWrite(50, HIGH); 
      digitalWrite(51, LOW); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);     
  } else if (paliwo <= 80) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, HIGH); 
      digitalWrite(50, HIGH); 
      digitalWrite(51, HIGH); 
      digitalWrite(52, LOW); 
      digitalWrite(53, LOW);  
  } else if (paliwo <= 90) {  //Czwarty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, HIGH); 
      digitalWrite(50, HIGH); 
      digitalWrite(51, HIGH); 
      digitalWrite(52, HIGH); 
      digitalWrite(53, LOW);                         
  } else {  //Pozostałe, czyli piąty zakres
      digitalWrite(44, HIGH); 
      digitalWrite(45, HIGH); 
      digitalWrite(46, HIGH); 
      digitalWrite(47, HIGH); 
      digitalWrite(48, HIGH); 
      digitalWrite(49, HIGH); 
      digitalWrite(50, HIGH); 
      digitalWrite(51, HIGH); 
      digitalWrite(52, HIGH); 
      digitalWrite(53, HIGH);}

if (sensors.getTempCByIndex(0) < 20) { //Pierwszy zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, LOW); 
      digitalWrite(39, LOW); 
      digitalWrite(19, LOW); 
      digitalWrite(17, LOW); 
      digitalWrite(16, LOW); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW); 
  } else if (sensors.getTempCByIndex(0) <= 30) { //Drugi zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, LOW); 
      digitalWrite(19, LOW); 
      digitalWrite(17, LOW); 
      digitalWrite(16, LOW); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);      
  } else if (sensors.getTempCByIndex(0) <= 40) {  //Trzeci zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, LOW); 
      digitalWrite(17, LOW); 
      digitalWrite(16, LOW); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);       
  } else if (sensors.getTempCByIndex(0) <= 50) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, LOW); 
      digitalWrite(16, LOW); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);    
  } else if (sensors.getTempCByIndex(0) <= 60) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, LOW); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);   
  } else if (sensors.getTempCByIndex(0) <= 70) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, HIGH); 
      digitalWrite(15, LOW); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW); 
  } else if (sensors.getTempCByIndex(0) <= 80) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, HIGH); 
      digitalWrite(15, HIGH); 
      digitalWrite(14, LOW); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);     
  } else if (sensors.getTempCByIndex(0) <= 90) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, HIGH); 
      digitalWrite(15, HIGH); 
      digitalWrite(14, HIGH); 
      digitalWrite(7, LOW); 
      digitalWrite(6, LOW);  
  } else if (sensors.getTempCByIndex(0) <= 100) {  //Czwarty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, HIGH); 
      digitalWrite(15, HIGH); 
      digitalWrite(14, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(6, LOW);                         
  } else if (sensors.getTempCByIndex(0) <= 105) {  //Pozostałe, czyli piąty zakres
      digitalWrite(43, HIGH); 
      digitalWrite(41, HIGH); 
      digitalWrite(39, HIGH); 
      digitalWrite(19, HIGH); 
      digitalWrite(17, HIGH); 
      digitalWrite(16, HIGH); 
      digitalWrite(15, HIGH); 
      digitalWrite(14, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(6, HIGH);}    
      
if (sensors.getTempCByIndex(0) >= 95){ 
  if (flaga_alarm == 1) {             
     tone(A13,5000);
     delay(100);
     noTone(A13);
     delay(100);
  } else {
     noTone(A13);
     }                           
   } else                             
   {noTone(A13);   
    flaga_alarm = 1;                 
   } 
  if (digitalRead(9) == LOW) {
  delay(1000);                      
  flaga_alarm = !flaga_alarm;
  }


    
      
    
    
    
}

void ekran1()
{   if (hasChanged) {
       lcd.clear();}
      if (hasChanged1) {
        lcd.clear();}  

  aktualnyCzas = millis();      
  if (aktualnyCzas - zapamietanyCzas >= 1000UL) {
    zapamietanyCzas = aktualnyCzas;
    if(impulsychwilowe1!=0.0)
      {literperhour1 = (impulsychwilowe1*13.125);
      literperhour2 = (impulsychwilowe2*13.125);   
      float literperhour = (literperhour1 - literperhour2);  
      impulsychwilowe1 = 0;
      impulsychwilowe2 = 0; 
      lcd.setCursor(0,1);
      lcd.print("Spal.chwil.");  
      lcd.setCursor(13,1);            
      lcd.print(literperhour);  
      lcd.setCursor(18,1);  
       lcd.print((char)3);
       lcd.setCursor(19,1);  
       lcd.print((char)4);
    }else{
      lcd.setCursor(0,1);
      lcd.print("Spal.chwil.");  
      lcd.setCursor(13,1);            
      lcd.print("0.0 ");  
      lcd.setCursor(18,1);  
       lcd.print((char)3);
       lcd.setCursor(19,1);  
       lcd.print((char)4);
    }
      liter1 = (impulsycalkowite1*13.125);
      liter2 = (impulsycalkowite2*13.125);   
      float liter = (liter1 - liter2);  
      lcd.setCursor(0,2);
      lcd.print("Spal.calk.");  
      lcd.setCursor(13,2);            
      lcd.print(liter,1);  
      lcd.setCursor(18,2);  
      lcd.print("L");
    
    if(szerokosc!=0.0){
         lcd.setCursor(0, 3);
        lcd.print("Spal.rob."); 
        liter11 = (impulsycalkowite11*13.125);
        liter22 = (impulsycalkowite22*13.125);   
        liter_ha = (liter11 - liter22);     
        lcd.setCursor(11,3);
        lcd.print((liter_ha*(10000/((impulsydystansu/2)*szerokosc))),1);  
        lcd.setCursor(16, 3);     
        lcd.print("l/ha");}
        }
        
}

    
    void ekran6()
        { 
          switch(podmenu) {
    case 1:
      {
         lcd.setCursor(0, 0);
         lcd.print((char)1);
         lcd.setCursor(1, 0);
        lcd.print((char)2);
       lcd.setCursor(3, 0);
        lcd.print("Talerzowka");
        lcd.setCursor(3, 1);
        lcd.print("Plug");
        lcd.setCursor(3, 2);
        lcd.print("Agregat");
        lcd.setCursor(3, 3);
        lcd.print("Kultywator");
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 2.8;
        menu = 1; }

      }
      break;
    case 2:
      { lcd.setCursor(0, 1);
         lcd.print((char)1);
         lcd.setCursor(1, 1);
        lcd.print((char)2);
       lcd.setCursor(3, 0);
        lcd.print("Talerzowka");
        lcd.setCursor(3, 1);
        lcd.print("Plug");
        lcd.setCursor(3, 2);
        lcd.print("Agregat");
        lcd.setCursor(3, 3);
        lcd.print("Kultywator"); 
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 1.8;
        menu = 1; } // temperatura silnika i poziom paliwa
      }
      break;
    case 3:
      {lcd.setCursor(0, 2);
         lcd.print((char)1);
         lcd.setCursor(1, 2);
        lcd.print((char)2);
       lcd.setCursor(3, 0);
        lcd.print("Talerzowka");
        lcd.setCursor(3, 1);
        lcd.print("Plug");
        lcd.setCursor(3, 2);
        lcd.print("Agregat");
        lcd.setCursor(3, 3);
        lcd.print("Kultywator");
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 2.8;
        menu = 1; }   // napięcie i natężenie
      }
      break;
      case 4:
      {lcd.setCursor(0, 3);
         lcd.print((char)1);
         lcd.setCursor(1, 3);
        lcd.print((char)2);
      lcd.setCursor(3, 0);
        lcd.print("Talerzowka");
        lcd.setCursor(3, 1);
        lcd.print("Plug");
        lcd.setCursor(3, 2);
        lcd.print("Agregat");
        lcd.setCursor(3, 3);
        lcd.print("Kultywator");
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 3;
        menu = 1; }    // prędkość i dystans
      }
      break;  
        case 5:
      {lcd.setCursor(0, 3);
         lcd.print((char)1);
         lcd.setCursor(1, 3);
        lcd.print((char)2);
       lcd.setCursor(3, 3);
        lcd.print("Kosiarka");
        lcd.setCursor(3, 0);
        lcd.print("Plug");
        lcd.setCursor(3, 1);
        lcd.print("Agregat");
        lcd.setCursor(3, 2);
        lcd.print("Kultywator");
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 2.7;
        menu = 1; }   // napięcie i natężenie
      }
      break;
      case 6:
      {lcd.setCursor(0, 3);
         lcd.print((char)1);
         lcd.setCursor(1, 3);
        lcd.print((char)2);
       lcd.setCursor(3, 2);
        lcd.print("Kosiarka");
        lcd.setCursor(3, 3);
        lcd.print("Opryskiwacz");
        lcd.setCursor(3, 0);
        lcd.print("Agregat");
        lcd.setCursor(3, 1);
        lcd.print("Kultywator");
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 15;
        menu = 1; }
      }
      break;
      case 7:
      { lcd.setCursor(0, 3);
         lcd.print((char)1);
         lcd.setCursor(1, 3);
        lcd.print((char)2);
       lcd.setCursor(3, 1);
        lcd.print("Kosiarka");
        lcd.setCursor(3, 2);
        lcd.print("Opryskiwacz");
        lcd.setCursor(3, 3);
        lcd.print("Zeruj spal.rob");
        lcd.setCursor(3, 0);
        lcd.print("Kultywator"); 
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        szerokosc = 0;
        impulsycalkowite11 = 0;
        impulsycalkowite22 = 0;
        menu = 1; } // temperatura silnika i poziom paliwa
      }
      break;
       case 8:
      { lcd.setCursor(0, 3);
         lcd.print((char)1);
         lcd.setCursor(1, 3);
        lcd.print((char)2);
       lcd.setCursor(3, 0);
        lcd.print("Kosiarka");
        lcd.setCursor(3, 1);
        lcd.print("Opryskiwacz");
        lcd.setCursor(3, 2);
        lcd.print("Zeruj spal.rob");
        lcd.setCursor(3, 3);
        lcd.print("Zeruj spal.calk"); 
        przycisk3.update();
  int hasChanged3 = przycisk3.fell();
        if (hasChanged3) {lcd.clear();
        impulsycalkowite1 = 0;
        impulsycalkowite2 = 0;
        menu = 1; } // temperatura silnika i poziom paliwa
      }
      break;
      
  }
   przycisk.update();    
przycisk1.update();

  hasChanged = przycisk.fell();
  hasChanged1 = przycisk1.fell();
  
  
  if (hasChanged) {
    lcd.clear();
   podmenu++;
   if (podmenu > liczbapodmenu) podmenu = 1;
  }
  if (hasChanged1) {
    lcd.clear();
   podmenu--;
   if (podmenu < 1 ) podmenu = 8;
  }  
       
       przycisk2.update();
  int hasChanged2 = przycisk2.fell();
        if (hasChanged2) {lcd.clear();
        menu = 1; }
        
        
        }

  

  




void ekran2()
{
  if (hasChanged) {
    lcd.clear();}
    if (hasChanged1) {
    lcd.clear();}
    aktualnyCzas = millis();      
 if (aktualnyCzas - zapamietanyCzas >= 1000UL) {
zapamietanyCzas = aktualnyCzas;
    int paliwo = map(analogRead(A0),0,1020,100,0);
    lcd.setCursor(0,1);
lcd.print("Poziom paliwa");
lcd.setCursor(16, 1);
lcd.print(paliwo);
lcd.setCursor(19,1);
lcd.print("%");
sensors.requestTemperatures(); //Pobranie temperatury czujnika
    float temperaturasil = 10 * (sensors.getTempCByIndex(0) + 0.05);  
    int temp = abs(temperaturasil); 
    lcd.setCursor(0,3);
lcd.print("Temp. silnika");
lcd.setCursor(16, 3);
lcd.print(temp/10);
lcd.setCursor(18,3);
lcd.print((char)0);
lcd.setCursor(19,3);
lcd.print("C");  
 }
    
    
}

void ekran3()
{  if (hasChanged) {
    lcd.clear();}
    if (hasChanged1) {
    lcd.clear();}
    aktualnyCzas = millis();      
 if (aktualnyCzas - zapamietanyCzas >= 1000UL) {
zapamietanyCzas = aktualnyCzas;
   napiecie = analogRead(A2)*15.58/797;

pradladowania = ADS.readADC_Differential_0_1()*28.41/32768.0;
    lcd.setCursor(0,1);
lcd.print("Napiecie");
lcd.setCursor(15, 1);
lcd.print(napiecie,2);
lcd.setCursor(19,1);
Serial.print("V");
    lcd.setCursor(0,2);
lcd.print("Prad ladowania");
lcd.setCursor(15, 2);
lcd.print(pradladowania,1);
lcd.setCursor(19,2);
Serial.print("A");
 }

}

void ekran4()
{
  if (hasChanged) {
    lcd.clear();}
    if (hasChanged1) {
    lcd.clear();}
 {aktualnyCzas = millis();      
 if (aktualnyCzas - zapamietanyCzas >= 1000UL) {
zapamietanyCzas = aktualnyCzas;   
if(impulsypredkosci!=0.0)
{float Predkosc = (impulsypredkosci);
impulsypredkosci = 0.0;
lcd.setCursor(0,1);
lcd.print("Predkosc");  
lcd.setCursor(12,1);            
lcd.print(Predkosc,1);  
lcd.setCursor(16,1);  
lcd.print("km/h");
}else{
lcd.setCursor(0,1);
lcd.print("Predkosc");  
lcd.setCursor(12,1);            
lcd.print("0.0 ");  
lcd.setCursor(16,1);  
lcd.print("km/h");   }  
 }}
{
Dystans = (impulsydystansu);  
lcd.setCursor(0,2);
lcd.print("Dystans");  
lcd.setCursor(12,2);            
lcd.print(Dystans,1);  
lcd.setCursor(16,2);  
lcd.print("km");
int stan = digitalRead(GUZIK3);

 if (stan == LOW) {miga =!miga;}

 {
  lcd.setCursor(0,2);
lcd.print("Dystans");  
lcd.setCursor(12,2);            
lcd.print(Dystans,1);  
lcd.setCursor(16,2);  
lcd.print("km");
if (miga){delay(100);
lcd.setCursor(0,2);
lcd.print("Dystans");  
lcd.setCursor(12,2);            
lcd.print("    ");  
lcd.setCursor(16,2);  
lcd.print("km");
delay(100);


 stan = digitalRead(GUZIK4);
 if(ostatniStan == HIGH &&  stan == LOW) {
impulsydystansu = 0.00;
}
 }
}}
 }




void ekran5()
  {
if (hasChanged) {
    lcd.clear();}
    if (hasChanged1) {
    lcd.clear();}
    {aktualnyCzas = millis();      
 if (aktualnyCzas - zapamietanyCzas >= 2000UL) {
zapamietanyCzas = aktualnyCzas; 
    sensors.requestTemperatures(); }//Pobranie temperatury czujnika
    float temperaturazew = 10 * (sensors.getTempCByIndex(1) + 0.05);  
    float temperatura = abs(temperaturazew); 
    lcd.setCursor(2,0);
  lcd.print("Temperatura zew.");
  lcd.setCursor(8,2);
  lcd.print(temperatura/10,1); 
  lcd.setCursor(13,2);
lcd.print((char)0);
lcd.setCursor(14,2);
lcd.print("C");   //Wyswietlenie informacji
 }
    
  
  }
  

 

Link do komentarza
Share on other sites

6 minut temu, Santiago napisał:

@lukas616 Wczoraj chciałem zobaczyć kod , ale był niepełny. Pomyślałem , że to wina telefonu, ale teraz na komputerze jest to samo , wklej cały  kod. 

No i może sam czujnik jest uszkodzony ? Wprowadź to co @kostuch napisał. 

Temat mnie interesuje , ponieważ sam zamierzam zbudować licznik kilometrów do mojego roweru. Oczywiście bardziej w celach edukacyjnych niż praktycznych :).

Raczej wątpię że uszkodzony bo mam 2 czujniki przepływu na zasadzie czujnika halla i w nich jest podobnie z tym że każdy obrót dodaje 4 do programu:)

Link do komentarza
Share on other sites

35 minut temu, kostuch napisał:

Podłącz pod ten pin generator np 100 impulsów (np. z innego pinu kontrolera). Będziesz wiedział czy moduł hallotronu jest ok.

Robisz na płytce-stykówce?

A jak wygenerować 100 impulsów z innego pinu arduinno?

Link do komentarza
Share on other sites

@lukas616 No tak,  nie chce mi się analizować kodu, ponieważ na początku napisałeś ' używam komparatora lm393' , pokaż schemat bo na sto procent tam tkwi błąd. Rzuciłem okiem na dane techniczne i jest tak napisane na stronie Botlandu

'Warto dokładnie przeanalizować dostępne opcje, ponieważ nawet małe odchylenia od wymaganych wartości mogą znacznie wpłynąć na pracę całego układu.'

Link do komentarza
Share on other sites

15 minut temu, Santiago napisał:

@lukas616 No tak,  nie chce mi się analizować kodu, ponieważ na początku napisałeś ' używam komparatora lm393' , pokaż schemat bo na sto procent tam tkwi błąd. Rzuciłem okiem na dane techniczne i jest tak napisane na stronie Botlandu

'Warto dokładnie przeanalizować dostępne opcje, ponieważ nawet małe odchylenia od wymaganych wartości mogą znacznie wpłynąć na pracę całego układu.'

Nie chodzilo mi ze uzywam komparatora tylko ze mam czujnik na plytce z komparatorem. Zreszta zdjecie wrzucilem jak wyglada ten czujnik. To ze jest komparator czy nie to mnie najmniej obchodzi. Chce po prostu zczytywac obroty z kola wiec najwaznjejszym elementem jest czujnik halla

Link do komentarza
Share on other sites

19 minut temu, Santiago napisał:

@lukas616 No tak,  nie chce mi się analizować kodu, ponieważ na początku napisałeś ' używam komparatora lm393' , pokaż schemat bo na sto procent tam tkwi błąd. Rzuciłem okiem na dane techniczne i jest tak napisane na stronie Botlandu

'Warto dokładnie przeanalizować dostępne opcje, ponieważ nawet małe odchylenia od wymaganych wartości mogą znacznie wpłynąć na pracę całego układu.'

Schemat podlaczenia? Bardzo prosty. Vcc do vcc na plytce stykowej i do vcc arduino, gnd do gnd plytki i gnd arduino a D0 do pinu 18

Link do komentarza
Share on other sites

1 godzinę temu, lukas616 napisał:

każdy obrót dodaje 4 do programu:)

Jeśli na wale silnika masz tarczkę magnetyczną, przy której jest zainstalowany czujnik, to musisz wiedzieć że w tarczce jest zwykle kilka magnesów,  więc każdy obrót generuje kilka impulsów.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.