Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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.
 

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ść

I co? Bo wiesz, my tego terminala nie widzimy... Często zdarza się pomiar dokładnie 542? Bo to może być trudne w realnym świecie, przynajmniej tym tutaj. I wtedy rzeczywiście wyjście 12 nie jest ustawiane?

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?

"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?

(edytowany)

przeliczone już mam teraz pytanie jakich funkcji użyć ?

Pisaliście że tamte pytania powinny znaleźć się w nowym temacie.

Edytowano przez PAJ123
(edytowany)

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

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ść
  }

 

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

Spoko przywykłem. Na takich forach tak jest. Teraz mam pytanie - szukam do tego projektu układu ktory mi odseparuje galwanicznie sygnał 0-5v macie jakieś pomysły?

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

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