Skocz do zawartości

Mini barman - sprawdzenie i modyfikacja programu


osama18m

Pomocna odpowiedź

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. 

Link do komentarza
Share on other sites

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? 

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

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.