Skocz do zawartości

Sterowanie przekaźnikiem w zależności od pomiaru analogowego


PAJ123

Pomocna odpowiedź


int odczytanaWartosc = 0;//Odczytana wartość z ADC
float napiecie = 0;//Wartość przeliczona na napięcie w V
 
void setup() {
  Serial.begin(9600);//Uruchomienie komunikacji przez USART
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
}
 
void loop() {
  odczytanaWartosc = analogRead(A5);//Odczytujemy wartość napięcia
  napiecie = odczytanaWartosc * (5.0/1024.0); //Przeliczenie wartości na napięcie
  Serial.println(napiecie);//Wysyłamy zmierzone napięcie
  Serial.println(odczytanaWartosc);//Wysyłamy zmierzoną wartość
  if(odczytanaWartosc == 542)
  {
    digitalWrite(12, HIGH); // przekaźnik 1 
    delay(2000);//Czekamy, aby wygodniej odczytywać wyniki 
  }
  if(odczytanaWartosc > 542)
  { 
    digitalWrite(12, LOW); // przekaźnik 1 
    delay(2000);//Czekamy, aby wygodniej odczytywać wyniki
  }
  delay(2000);
  digitalWrite(13, HIGH); // przekaźnik 2
  delay(2000);
  digitalWrite(13, LOW); // przekaźnik 2
  }
 

Witam, napisałem program z funkcją if ale nie działa. powiecie mi co robię nie tak?

Z góry dziękuje za pomoc.

Program wygląda następująco:

Chciałem włączyć przekaźnik 1 gdy odczytanaWartość będzie równa 542 a wyłączyć gdy będzie większa od 542 (Niestety na wyjściu jest cały czas stan wysoki - niezależnie od wartości na A5.
 

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

Serial.println(odczytanaWartosc);//Wysyłamy zmierzoną wartość
  if(odczytanaWartosc == 542)
  {
    digitalWrite(12, HIGH); // przekaźnik 1 
    delay(2000);//Czekamy, aby wygodniej odczytywać wyniki 
  }

Przecież mam - w terminalu pokazuje mi wartość

Link do komentarza
Share on other sites

Dzięki, już sprawdziłem i faktycznie tak jest. Teraz mam kolejne pytanie. Chcę żeby zmienna z wejścia A5 sterowała częstotliwością załączania przekaźnika a mianowicie:

  • Przy wartości 252 - przekaźnik uruchamia się na 1s z 10s przerwą (zapętlone)
  • Przy wartości 596 - przekaźnik uruchamia się na 1s co 1s.

Pytanie jakie instrukcje muszę użyć? żeby płynnie sterować częstotliwością załączania się przekaźnika?

Link do komentarza
Share on other sites

"Chcę żeby zmienna z wejścia A5.."

Durniów z nas robisz? Przecież raz już to pytanie (tylko z innymi liczbami) zadawałeś. Dostałeś odpowiedź i wsadziłeś głowę w piasek nie racząc nawet odpisać. Tamto przekroczyło Twoje możliwości poznawcze i oczekujesz, że ktoś to za Ciebie po prostu zrobi? Bo jak rozumiem odpowiedź typu: "masz użyć mnożenia i dodawania" nie satysfakcjonuje?

Link do komentarza
Share on other sites

To może zainteresuj się kursem programowania - np. https://forbot.pl/blog/kurs-arduino-podstawy-programowania-spis-tresci-kursu-id5290? Inaczej będzie to kolejny wątek z programowaniem deklaratywnym - tylko dlaczego mamy za Ciebie pisać programy? Jeśli chcesz żeby ten program działał, to go po prostu napisz. A jak nie umiesz to się najpierw naucz. Natomiast jeśli i to jest za trudne, to po prostu zmień hobby.

Edytowano przez Elvis
Link do komentarza
Share on other sites

Dzięki za miłe przyjęcie, już sobie poradziłem.

Czasem niewiele trzeba żeby odnaleźć potrzebne instrukcje - jak widać na forum nie ma szans na to. Tak więc przejrzałem różne projekty i znalazłem instrukcje które mnie interesowały.

Gotowy program:


int odczytanaWartosc = 0;//Odczytana wartość z ADC
int czas1 = 10000;
int zmienna = 0;
float zmienna1 = 0;
float czas2 = 0;
float dodana = 26.1;//Dodana wartość
float wynik = 0; 
void setup() {
  Serial.begin(9600);//Uruchomienie komunikacji przez USART
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  digitalWrite(12, HIGH);
  digitalWrite(13, LOW);
}
 
void loop() {
  odczytanaWartosc = analogRead(A5);//Odczytujemy wartość napięcia
  Serial.println(odczytanaWartosc);//Wysyłamy zmierzoną wartość
  zmienna = odczytanaWartosc - 252;
  zmienna1 = zmienna * dodana;
  czas2 = czas1 - zmienna1;
  if(odczytanaWartosc > 596)
  {
   czas2 = 1000;
  } 
  if(odczytanaWartosc > 252)
  {
    digitalWrite(12, LOW); // przekaźnik 1 
    delay(1000); 
    digitalWrite(12, HIGH); // przekaźnik 1
    delay(czas2); 
  } 
   Serial.println(czas2);//Wysyłamy zmierzoną wartość
  }

 

Link do komentarza
Share on other sites

@PAJ123, rozumiem Twoje rozgoryczenie, ale nie ma co się zniechęcać. Po prostu zadając pytanie warto pokazać jakieś swoje próby, wtedy naprawdę każdy chętnie pomaga. Jak się zadaje ogólne pytania to ciężko o konkretną odpowiedź, bo tak właściwie tylko Ty wiesz co robisz i gdzie utknąłeś. Nie ma żadnych "funkcji", które rozwiązują Twój problem. Ciężko więc jakoś sensownie pomóc w takim przypadku (oprócz odesłania do kursów...). 

Link do komentarza
Share on other sites

Jeśli dobrze rozumiem to sterujesz tutaj przekaźnikiem, który sam z siebie odseparowuje "niebezpieczne" sygnały od mikrokontrolera. Co dokładnie chcesz więc odseparować? O jakich częstotliwościach pracy mowa? Tak samo jak poprzednio - bez szczegółów ciężko coś doradzać.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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