Skocz do zawartości

Mini barman - sprawdzenie i modyfikacja programu


Pomocna odpowiedź

Napisano

Szanowni Państwo,

Mam pytanie, mianowicie co ja robię nie tak... Jestem zielony, a ostatnio mnie naszła ochota na zrobienie czegoś do sobotnich posiadówek z sąsiadem i teściem.
Mianowicie tak podłączyłem elementy:
Pompka 12V sterowaną za pomocą arduino i przekaźnika, do tego mam silnik krokowy 5v ze sterownikiem ULN2003, w którym wykorzystuje piny IN1, IN2, IN3 oraz IN4 (wpięte kolejno w piny 11, 10, 9, 8). W projekcie tym jest wykorzystywany również sensor HC-Sr04 którego zadaniem jest znaleźć kieliszek(wpięty w piny ECHO -3, TRIG -4). Cała operacja ma się zacząć po wciśnięciu przycisku, który idzie na pin -5 z wyjścia NO, a przychodzi do niego zasilanie na COM. Dioda na Pinie 6 jest zapalona cały czas. Gdy kliknie się przycisk start, czujnik HC-Sr04 ma dawać sygnał do silnika krokowego, żeby się poruszał do memntu aż wykryje obiekt, gdy go już wykryje, ma się zatrzymać i uruchomić pompkę na 2 sekundy, po tym czasie niech jedzie dalej i szuka kolejnego kieliszka, gdy osiągnie kąt 180 stopni i nic nie znajdzie, niech wróci do pozycji początkowej i ponownie czeka na wciśnięcie przycisku start. 

Kod:

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

#define TRIG_PIN 7
#define ECHO_PIN 6
#define PUMP_PIN 4
#define RELAY_PIN 3
#define BUTTON_PIN 5
#define LED_PIN 6

const int stepsPerRevolution = 2048; 
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(PUMP_PIN, OUTPUT);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);

  lcd.begin(16, 2);
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Witam pijakow!");
}

void loop() {
  if (digitalRead(BUTTON_PIN) == LOW) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("No to lecim!");

    myStepper.setSpeed(5); 
    for (int pos = 0; pos < 2048; pos += 4) { 
      myStepper.step(4);

      if (detectGlass()) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Nalewam...");
        digitalWrite(RELAY_PIN, HIGH); 
        for (int i = 0; i < 100; i++) {
          lcd.setCursor(0, 1);
          lcd.print(i);
          lcd.print("%");
          delay(20);
        }
        digitalWrite(RELAY_PIN, LOW);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Nalano!");
        delay(2000);
      }
    }

    myStepper.setSpeed(10);
    myStepper.step(-2048); // Powrót do pozycji początkowej

    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("DO DNA!!!");
  }
}

bool detectGlass() {
  long duration, distance;
  int measurements = 5;
  int count = 0;

  for (int i = 0; i < measurements; i++) {
    digitalWrite(TRIG_PIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN, LOW);

    duration = pulseIn(ECHO_PIN, HIGH);
    distance = duration * 0.034 / 2;

    if (distance >= 5 && distance <= 6)
     {
      count++;
    }
    delay(50);
  }

  return count == measurements;
}



Panie i Panowie, domyślam się, że jest to dla Was banalne, aczkolwiek prosiłbym o wyrozumiałość, chciałbym się również w tym trochę podszkolić. Nie zdziwiłbym się jeśli i tu i tu by było naryte. Byłbym wdzięczny za pomoc. 

6 minut temu, farmaceuta napisał:

@osama18m jakie są objawy nie działającego urządzenia? Bo z kodu ciężko wyczytać...

Wydaje się, że chodzi o to…

że nie ma kto nalać.

  • Lubię! 2
8 minut temu, farmaceuta napisał:

@osama18m jakie są objawy nie działającego urządzenia? Bo z kodu ciężko wyczytać...

Problem jest tego typu, że gdy załączam układ przyciskiem, to na wyświetlaczu zmienia się napis, ale ani sensor nie wykrywa nic, ani silnik krokowy się nie obraca i dodatkowo cały układ przygasa i po jakimś czasie wyświetlacz się wyłącza a dioda z przycisku świeci jakby chciała a nie mogła. 

Może chodzić o stabilizator napięcia? W sensie i do silnika krokowego i do przekaźnika do pompki? Czy raczej to nie ma znaczenia? 

@osama18m sprawdzałeś działanie samego silnika?? Kręci się? Nic nie przycina?  

37 minut temu, ethanak napisał:

@farmaceuta to akurat prawidłowa wartość (no, prawie, ale nie chce mi się sprawdzać). Silnik ma przekładnię.

 

Też mi to do głowy przyszło po chwili 😉

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...