Skocz do zawartości

Lukasz1979

Użytkownicy
  • Zawartość

    12
  • Rejestracja

  • Ostatnio

Reputacja

6 Neutralna

O Lukasz1979

  • Ranga
    2/10
  1. Dzięki za odpowiedź. No tak, można to było znaleźć.... Ale z drugiej strony jak się coś samemu wykombinuje to lepiej zapada w pamięć (raczej nie miałem złudzeń, że dokonałem epokowego wynalazku - chciałem tylko potwierdzenia, że nie popełniłem jakiegoś powaznego błędu). I2C oczywiście w planach, ale chcę wykonać jedno urządzenie, które będzie już pracować na stale (mam jeszcze jakiegoś chińskiego klona Arduino, który będzie tym zarządzał) i warto wykorzystać posiadany wyświetlacz zamiast zostawiać go w szufladzie. Do kolejnych projektów podejdę już z I2C. Na razie, przed zakupem elementów do 2 części kursu chcę zrobić już coś praktycznego. A czemu uważasz, że granicą jest 6 przycisków? Jeśli spojrzysz na odczyty ADC (widoczne na gifie) to zapas jest jeszcze duży....
  2. Realizując swój pierwszy samodzielny projekt natknąłem się na problem, który (jak mi się wydaje) można rozwiązać z wykorzystaniem ADC oraz rezystorów połączonych w roli dzielników napięcia. Będę wdzięczny, jeśli ktoś bardziej doświadczony "rzuci okiem" na moje wypociny i potwierdzi, czy można tak postępować (ja nie widzę przeciwskazań, ale być może coś mi umyka). Problem - zbyt mała ilość dostępnych wyjść/wejść cyfrowych w projekcie zawierającym wyświetlacz LCD, serwo, sporo diod sygnalizacyjnych i 5 przycisków. Oczywiście wiem (przynajmniej pobieżnie), że można użyć wyświetlacza I2C, klawiatury matrycowej itp. ale na razie chciałbym oprzeć się na już posiadanych elementach (poza tym klawiatura matrycowa i tak zajmuje sporo pinów). Pomysł (być może naiwny ale taki przyszedł mi do głowy) - zamiast "marnować" piny na przyciski, postanowiłem połączyć przyciski z rezystorami służacymi jako dzielniki napięcia w taki sposób (rysowane w Cuircuits/Tinkercad): Dzięki różnym wartościom rezystorów (stopniowane co ok. 330R) na ADC możemy otrzymać inny odczyt przy każdym przycisku. Rezystor 10k stale "podciąga" wejście A0 d0 5V dla zabezpieczenia przed zakłóceniami, kiedy żaden przycisk nie jest wciśnięty. W celu testowym zbudowałem układ na płytce łączac szeregowo rezystory 1k i 330R: i napisałem krótki program próbny: #include <LiquidCrystal.h> LiquidCrystal lcd(1, 2, 3, 4, 5, 6); int odczyt=0; int odczytzmapowany=0; void setup() { lcd.begin(16, 2); //Deklaracja typu lcd.setCursor(0, 0); //Ustawienie kursora lcd.print("TEST KLAWIATURY"); //Wyświetlenie tekstu lcd.setCursor(0, 1); //Ustawienie kursora lcd.print("1 PINOWEJ"); //Wyświetlenie tekstu delay(2000); lcd.clear(); } void loop() { odczyt=analogRead(A0); while(odczyt>200){odczyt=analogRead(A0);} odczyt=analogRead(A0); odczytzmapowany=map(odczyt,30,145,1,5); lcd.setCursor(0, 0); lcd.print("NACISNIETO ");lcd.print(odczytzmapowany); lcd.setCursor(0, 10); lcd.print("ODCZYT ADC ");lcd.print(odczyt); delay(1000); lcd.clear(); } Poniżej efekt: Być może warto byłoby zwiększyć "rozrzut" rezystorów dla większej pewności, że nie dojdzie do błędów odczytu, ale wydaje mi się, że układ działa poprawnie. Czy są jakieś poważniejsze przeszkody techniczne dla stosowania w praktyce takiego rozwiązania?
  3. Cześć! Mam dokładnie te same wrażenia co Ty, Po pierwsze: Po drugie: kabelki w kursie elektroniki są rzeczywiście kiepskie. Końcówki odpadają i są oblepione klejem, który blokuje przewodzenie. Straciłem do nich cierpliwość po kilku próbach. Na szczęscie mam też DuPonty z kursu Arduino (tamte są bardzo dobre). Pozdrawiam!
  4. Witam, Rozpocząłem budowę swojego pierwszego projektu, ale muszę wrócić do rozdziału o serwomechanizmach. Zaobserwowałem, że serwo, nawet jeśli ustawię je w stałej pozycji (już w sekcji "setup") przez cały czas "pomrukuje" próbując korygować pozycję (chyba, ruch nie jest widoczny). Czasem, jeśli przyłożę do ramienia bardzo niewielką siłę i "pomogę" mu w ten sposób ustawić położenie docelowe to uspokaja się na kilka minut, po czym znowu wraca do korekt. Moje pytanie jest proste - czy to normalne? Czy można to zignorować? Z pewnością przyspiesza to zużycie baterii ale przypuszczam, że wynika to z zasady działania (utrzymywanie pozycji w zależności od współczynnika wypełnienia sygnału.... Z góry dziękuję za komentarze.
  5. Witam, Można prosić o wyjaśnienie, w jakim celu w kodzie znajdują się linijki zaznaczone na czerwono? Wydaje mi się, że jeśli nie zmieniamy stanu wyjść cyfrowych to można je usunąć.... Ale już kilka razy coś mi się wydawało a niekoniecznie miałem rację - stąd prośba o wyjaśnienie. Pozdrawiam, Łukasz.
  6. Tak dla jasności - pisząc "brakowało" w żadnym wypadku nie chciałem umniejszać wartości kursu ani krytykować zawartości. Po prostu nie mogłem przeskoczyć tego zagadnienia (próbowałem eksperymentować z samym Serial.read() ale otrzymane wartości zdecydowanie nie były właściwe.... Dziękuję za link, zapoznam się
  7. Serdeczne dzięki. Serial.parseInt() rozwiązało mój problem na tę chwilę. Kolejne etapy będę realizował sukcesywnie - tu chyba brakowało tej informacji w kursie (niezbędnej do wykonania zadania). Na szczęście jest forum!
  8. Jako "świeżaka" zastanawia mnie jedno.... Jeżeli korzystam z funkcji Serial.readStringUntil('\n') to (jeśli dobrze rozumiem) odczyt mogę przypisać jedynie do zmiennej typu String (tekstowej) - w innym wypadku już na etapie kompilacji pojawia się problem. Jakiej funkcji użyć, żeby odczytać z portu szeregowego wartość cyfrową (int lub byte)? Próbowałem wykonać "zadanie domowe" z grą (zadanie 4.5) i na samym początku "poległem" przy próbie porównywania wartości odczytanej z potencjometru oraz wartości odebranej z terminala (nawet jeśli były takie same program traktował je jako różne - przypuszczam, że wynikało to z różnego typu zmiennych i wartość np. 10 odczytaną z potencjometru (jako int) nie była dla mikrokontrolera tożsama z wartością "10" odczytaną z terminala jako String). Będę wdzięczny za komentarz...
  9. Dzięki za wyjaśnienia. Podane linki rzeczywiście sporo rozjaśniły.... Przyznaję, analizowałem jedynie skrajne stany, bez pośrednich. Już wiem, czemu zagadnienie nie jest takie oczywiste, jak mogłoby się wydawać.
  10. Świetny kurs. Jako ktoś ZUPEŁNIE zielony w temacie jestem w stanie ogarnąć przykłady i tworzyć już pierwsze własne, proste projekty. Drobna uwaga matematyczna (proszę o korektę jeśli się mylę) - jeśli tworzymy nasz pierwszy prosty woltomierz to dzielić powiniśmy nie przez ilość stanów a przez wartość maksymalną. Dzieje się tak, ponieważ przetwornik ADC tak naprawdę przetwarza zakres wartości analogowych na wartość cyfrową (nie może przetwarzać każdego stanu bo jest ich nieskończenie wiele, jak to w świecie analogowym). Jeśli mamy 1024 stany to dysponujemy jedynie 1023 zakresami. Prosty dowód: jeśli dzielimy przez 1024.00 (jak w przykładzie) przy odczycie wartości z potencjometru 1023 (czyli maksymalnym) oraz napięciu 5V otrzymujemy V=5.00*(1023/1024)=4,995 V. Przy dzieleniu przez 1023 wynik wynosi dokładnie 5.00V. Przyznaję, różnica symboliczna ale im słabszy (o mniejszej rozdzielczości) przetwornik tym większe ma to znaczenie. Pozdrowienia i raz jeszcze dziękuję za kurs!
×
×
  • Utwórz nowe...