Skocz do zawartości
Komentator

Kurs Arduino - #4 - Przetwornik ADC

Pomocna odpowiedź

Witam wszystkich 🙂

Na wstępie chciałbym zaznaczyć, że jestem kompletnym świeżakiem zarówno na forum jak i w arduino.

Mam pytanie odnośnie lekcji z przetwornikiem. Układ podłączony tak jak było to zalecane, program też się zgadza (sprawdzone, tego jestem pewien na 100%). Problem tkwi w odczycie napięcia, które zdaje się w ogóle nie reagować na zmiany na potencjometrze. Cały czas wyrzuca jakieś randomowe wartości (z przedziału 0-5). Podobnie sytuacja wygląda w układzie z fotorezystorem. 

Czy ktoś ma jakiś pomysł?

Udostępnij ten post


Link to post
Share on other sites

@bw512 , witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.
54 minuty temu, bw512 napisał:

Mam pytanie odnośnie lekcji z przetwornikiem. Układ podłączony tak jak było to zalecane, program też się zgadza (sprawdzone, tego jestem pewien na 100%). Problem tkwi w odczycie napięcia, które zdaje się w ogóle nie reagować na zmiany na potencjometrze. Cały czas wyrzuca jakieś randomowe wartości (z przedziału 0-5). Podobnie sytuacja wygląda w układzie z fotorezystorem. 

Czy ktoś ma jakiś pomysł?

Albo nie wgrywasz odpowiedniego programu, albo źle coś podłączyłeś - innej opcji nie ma. Nie pokazałeś swojego podłączenia, ani programu, więc ciężko coś doradzić bez szklanej kuli 🔮 Na tym forum udzielam się od ponad 10 lat, więc na słowo już nie uwierzę, że masz podłączenie lub program identycznie jak w kursie - wielu już takich było 😉

Udostępnij ten post


Link to post
Share on other sites

Cześć;

Chciałbym Was prosić o pomoc z zadaniem 4.5. Z programowaniem nie miałem zbyt wiele doświadczenia. Poprzeglądałem trochę internet i w głowie stworzyła mi się jakaś wizia tego programu, ale wizja nie bardzo działa.

Możecie coś podpowiedzieć? Co powinienem poprawić ewentualnie czy to co stworzyłem zmierza w dobrym kierunku czy lepiej skasować i zacząć od nowa?😂

#define zielona 8
#define zolta 9
#define czerwona 10
#define przycisk 7

int i=0;
String odczytanaWartosc = ""; //wartosc wpisana przez użytkownika
int odczytanaWartosc_int = 0; //wartosc wpisana przez użytkownika
int wartoscPot = 0; //wartosc odczytana z potencjometru

void setup() {
  Serial.begin(9600);

  pinMode(zielona, OUTPUT);
  pinMode(zolta, OUTPUT);
  pinMode(czerwona, OUTPUT);
  pinMode(przycisk,INPUT_PULLUP);
  
  digitalWrite(zielona, LOW);
  digitalWrite(zolta, LOW);
  digitalWrite(czerwona, LOW);
  
}

void loop() {
  if (digitalRead(7) == LOW){ //jeśli przycisk wcisniety
   
    Serial.println("Podaj liczbe:"); 
    
	 for (i=1; i <= 3; i++){ //wykonujemy 3 proby
       
       odczytanaWartosc = Serial.readStringUntil('\n'); // odczyt wartości i zamianan na INT
       odczytanaWartosc_int = odczytanaWartosc.toInt();    
        
       if (Serial.available()>0){ //jeśli wprowadzone dane sa wieksze od 0
              wartoscPot = analogRead(A5); //odczytujemy wartość z potencjometru
            if (odczytanaWartosc_int == wartoscPot || odczytanaWartosc_int <= wartoscPot+50 && odczytanaWartosc_int >= wartoscPot-50){
              digitalWrite(zielona, HIGH);
              digitalWrite(zolta, LOW);
              digitalWrite(czerwona, LOW);
              Serial.println("Gratulacje, wygrales");
              break; //przerywamy for w przypadku trafienia
              
           }else {
              digitalWrite(zielona, LOW);
              digitalWrite(zolta, HIGH);
              digitalWrite(czerwona, LOW);
              Serial.println("Zla liczba");//jeśli dobrz rozumiem wracm na początek pętli for
           }   
          }
         Serial.println("Przegrałes, sprobuj ponownie"); 
      }
  
  }
 }

 

Udostępnij ten post


Link to post
Share on other sites

@Maszynyodsrodka, wygląda ładnie, idziesz w dobrym kierunku 😉 Powodzenia w dalszych eksperymentach! W razie problemów możesz zawsze podejrzeć jak z zadaniem poradziły sobie inne osoby (w tym temacie znajdziesz sporo przykładowych programów).

Udostępnij ten post


Link to post
Share on other sites

Witam. Rozwiązałem zadanie 4.6 i nawet działa. Jest jednak pewno ale... Wszystko działa tak jak powinno jednak jedna z diod świeci bardzo bardzo słabo, sprawdziłem prąd jakim jest zasilana podczas świecenia i jest to 0,08mA. Rezystory wszędzie jednakowe, skrypt wydaje się ok. W czym może tkwić problem? Zamieszczam nieco chaotyczne zdjęcie połączeń i skrypt. 

#define redLedL 8
#define yellowLedL 9
#define greenLed 10
#define yellowLedR 11
#define redLedR 12

int fotoRez1 = 0;
int fotoRez2 = 0;
byte value = 100;

void setup() {
  pinMode(redLedL, OUTPUT);
  pinMode(yellowLedL, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(redLedR, OUTPUT);
  pinMode(redLedR, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  fotoRez1 = analogRead(A5);
  fotoRez2 = analogRead(A4);
  
  Serial.print("Fotorezystor 1: ");
  Serial.println(fotoRez1);
  Serial.print("Fotorezystor 2: ");
  Serial.println(fotoRez2);
  
  if (abs(fotoRez1 - fotoRez2) <= 50) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, HIGH);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);
  }
  else if (fotoRez1 > fotoRez2 + value) {
    digitalWrite(redLedL, HIGH);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);  
  }
  else if (fotoRez1 > fotoRez2) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, HIGH);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, LOW);
  }
    else if (fotoRez2 > fotoRez1) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, HIGH);
    digitalWrite(redLedR, LOW);
  }
  else if (fotoRez2 > fotoRez1 + value) {
    digitalWrite(redLedL, LOW);
    digitalWrite(yellowLedL, LOW);
    digitalWrite(greenLed, LOW);
    digitalWrite(yellowLedR, LOW);
    digitalWrite(redLedR, HIGH);
  }
  delay(1000);
}

IMG_20190202_144514384.thumb.jpg.2a274c73939fdd2954735c62f11ee058.jpg

Mowa o prawej żółtej diodzie, pin 11 na Arduino.

Udostępnij ten post


Link to post
Share on other sites

@TheProrok29 zostaw podłączenie takie jak masz i wgraj zwykły program, który miga diodą na pinie numer 11. Będziesz wiedział, czy to problem sprzętowy (uszkodzone Arduino, błędne połączenie), czy coś z programem. Daj znać jaki efekt 🙂

Udostępnij ten post


Link to post
Share on other sites

ZAD 4.5

Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc?

int wartoscADC=0;
int liczba;
int i=0;

void setup() {
  // put your setup code here, to run once:
    pinMode(2,INPUT_PULLUP);
    Serial.begin(9600);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);

    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
    
    if(digitalRead(2)==LOW)
    {
      wartoscADC=analogRead(A5);
    }
      if(wartoscADC>0)
      {
        
        Serial.println(liczba);
        
        Serial.println("Podaj liczbe: ");
        

        while(Serial.available()==0){}

        
        
        if(Serial.available()>0)
        {
            liczba=Serial.parseInt();
    
            if(liczba>(wartoscADC-50) && liczba<(wartoscADC+50))
            {
              Serial.println("WYGRALES");
              digitalWrite(8,LOW);
              digitalWrite(9,LOW);
              digitalWrite(10,HIGH);
              while(liczba>(wartoscADC-50) && liczba<(wartoscADC+50)){}
            }
            else
              {
                  i=i+1;
                  if(i<3)
                    {
                      Serial.println("ZLE,ALE MASZ JESZCZE SZANSE: ");
                      Serial.println(3-i);
                      digitalWrite(9,HIGH);
                      delay(2000);
                      digitalWrite(9,LOW);
      
                     }
                  else
                  {
                    digitalWrite(8,HIGH);
                    Serial.println("PRZEGRALES");
                    while(i=3){}
                  }
              }
        }
      }
}

 

Udostępnij ten post


Link to post
Share on other sites

Cześć, potrzebuję pomocy bo nie wiem jak zatrzymać program do czasu aż wejdą jakieś dane i chodzi o to by zatrzymywał przy każdym przejściu przez pętle void loop(). To mój kod do zad 4.5 (jeszcze niedokończony).

int podanaWartosc = 2;
int odczytanaWartosc = 0;
void setup() {
pinMode(4, INPUT_PULLUP);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
Serial.begin(9600);
}

void loop() {
  Serial.println("Proszę przekręcić potencjmoter i podać liczbę od 1 do 5");
  while(Serial.available() == 0) {}
  Serial.println(podanaWartosc);
    podanaWartosc = Serial.parseInt();
    Serial.println(podanaWartosc);
while(digitalRead(4) ==  HIGH) {
  odczytanaWartosc = analogRead(A5);
  odczytanaWartosc = map(odczytanaWartosc, 0, 1023, 1, 5);
}
if(podanaWartosc == odczytanaWartosc) {
  digitalWrite(5,HIGH);
  Serial.println("Gratuluję!");
}
}

po pierwszym wpisaniu liczby wszystko jest okej ale potem jak wraca program do początku to przeskakuje pętle while(Serial.available() ==0) {}.

Udostępnij ten post


Link to post
Share on other sites

Witam wszystkich na forum, jest to mój pierwszy post. Otóż w poradniku mam problem z zadaniem z fotorezystorem. Na wstępie napiszę, że program na arduino dla pewności wgrałem przekopiowany z kursu. Problem wygląda następująco. W kursie na schemiacie do fotorezystora i rezystora podłączony jest + i - i u mnie taki układ nie działa. Ale po odłączeniu tych przewodów zaczyna działać(po całkowitym zakryciu fotorezystora dioda miga, nie świeci ciągle) . Dlaczego tak się dzieje? Dołączam rysunek. 

 

Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną.

ard_3_4-650x419.png ard_3_4-650x4191.png

51979937_794764554233755_4749712544900317184_n.jpg 52510858_340333823246303_8893451834794967040_n.jpg

Udostępnij ten post


Link to post
Share on other sites

@25pawel, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 9.02.2019 o 11:42, 25pawel napisał:

Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc?

To powinno dać Ci do myślenia, że albo nie czyścisz zmiennej lub robisz to w złym momencie. Zacznijmy jednak od czegoś innego. Jak masz ustawiony monitor portu szeregowego? Czy do wysyłanych danych doklejasz jakieś znaki końca linii?

@Karliko to samo pytanie, co wyżej - czy doklejasz do wysyłanych danych jakież znaki końca linii?

@CharlesX, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

Dnia 11.02.2019 o 18:16, CharlesX napisał:

Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną.

Twoja "działająca" wersja jest na 100% zła, tutaj nie ma co dyskutować. Coś tam działa, bo przypadkiem zbiera jakieś "elektrośmieci" z powietrza. Spójrz jeszcze raz na swój układ i na schemat z kursu. Nie pokazałeś zdjęcia całej swojej płytki, ale według mnie układ masz podłączony inaczej (nie widać zasilania). Po trzecie nie masz chyba naszego zestawu, więc problemem może być np. zły fotorezystor lub rezystor (który ma jakieś dziwne kolorki) lub jakiś inny element. Nie mam pojęcia czym dokładnie dysponujesz, więc ciężko zdalnie pomóc.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@Karliko wiem, że Ty nic nie dopisujesz - pytam o ustawienia terminala, bo może tam masz wybraną taką opcję, która mogłaby powodować właśnie podobne błędy 🙂

Udostępnij ten post


Link to post
Share on other sites

@Treker Mam takie okienko z wyborem:

-brak zakończenia linii

-nowa linia -- to mam ustawione w domyśle

-powrót karetki

-zarówno NL jak i CR

 

Udostępnij ten post


Link to post
Share on other sites

@Karliko czyli przy wysyłaniu dodajesz znaki nowej linii. Ustaw na "Brak zakończenia linii" i sprawdź jeszcze raz działanie programu 🙂

Udostępnij ten post


Link to post
Share on other sites

@Treker Wszystko teraz działa, dziękuję 🙂 a mógłbyś napisać co robią pozostałe opcje? Bo na stronie Arduino nic nie znalazłem.

Udostępnij ten post


Link to post
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...