MikolajWaz Lipiec 27, 2016 Udostępnij Lipiec 27, 2016 Witam Mam pytanie: Dlaczego w programach które piszesz w tym artykule nie dostajesz wiersza typu: pinMode (A5, INPUT); Arduino jak sprawdzaniem poprawnie działa zarówno z dodaniem tego wiersza jak i bez niego, dlaczego tak się dzieje?? Dla przykładu kiedy się pominie wiersz typu: pinMode (diodaLed, OUTPUT); To już arduino (dioda do tego pinu poprawnie podłączona) niedziała. Pozdrawiam Mikołaj - Wrocław
marek1707 Lipiec 27, 2016 Udostępnij Lipiec 27, 2016 Bo wejścia procesora Arduino są domyślnie w trybie INPUT po włączeniu zasilania. Tak jest bezpieczniej dla całego otoczenia, bo procesor nie wymusza żadnych sygnałów (i dzięki temu nie powoduje konfliktów) na pinach, które mogłyby być w układzie sterowane przez coś innego.
MikolajWaz Lipiec 27, 2016 Udostępnij Lipiec 27, 2016 Dzięki za odpowiedź. Skąd masz taka wiedzę bo sam chciałbym wiedzieć skąd takich szczegółów się uczyć? Pozdro
4funrc Sierpień 1, 2016 Udostępnij Sierpień 1, 2016 Cześć jestem tu nowy i chcę o coś zapytać. Ostatnio wpadłem na pomysł aby zrobić prosty miernik prędkości wiatru. Znalazłem silniczek od napędu CD, po rozkręceniu go do 1300obr/min nie przekroczył granicy 5V, więc na początek nie ma sie czym przejmować zbyt dużym napięciem na wejściu analogowym. Skleiłem całość, dodatkowo zastosowałem zabezpieczenie, aby w przypadku przeciwnych obrotach silnika nie podać na arduino odwrotnego napięcia. Cóż chciałem zobaczyć cóż arduino mi powie. Jak się okazało klapa (spodziewałem sie tego). Czysto teoretycznie jeśli ten mini silniczek potraktujemy jako prądnicę, która wraz ze wzrostem prędkości obrotowej zwiększa swoje napięcie to teoretycznie w arduino na wejściu analogowym pojawi się napięcie zależne od tych obrotów. Powinno nam to dać możliwość odczytu prędkości obrotowej ów silnika czyli mówiąc w uproszczeniu wiatru. wywołałem odczyt poleceniem analogRead(A2) - na pinie A2 mam wpięty przewód od silniczka. Całość odczytuje za pomocą portu szeregowego. W monitorze szeregowym bez względu na obroty silnika widnieje wartość ok 100. Nie mam pojęcia jak się za to dalej zabrać Jeśli chodzi o prawdziwe mierniki wiatru dla arduino to są one trudno dostępne i drogie. Proszę o pomoc. Pozdrawiam
Chumanista Sierpień 1, 2016 Udostępnij Sierpień 1, 2016 4funrc, a mierzyłeś multimetrem jakie masz tam napięcie?
4funrc Sierpień 2, 2016 Udostępnij Sierpień 2, 2016 4funrc, a mierzyłeś multimetrem jakie masz tam napięcie? Bez obrotów -> 0V przy ruszeniu palcem -> ok 0,11V przy ok 1300obr/min -> ok. 1,5 ~ 1,7V przy ok 3000obr/min -> ok. 4 ~ 5V Teraz tak sobie myślę, że może arduino nie jest w stanie odczytać takich niskich wartości, ale przy doświadczeniach z dzielnikiem napięcia działa, więc nie wiem. Ogólnie rzecz biorąc na arduino mam zrobioną całą stacje pogodową, włącznie z czujnikami deszczu itp itd i chciałem dodać sobie tan prosty wiatromierz. A może występuje zbyt duży spadek napięcia i sygnał nie dociera do arduino? Może lepiej będzie jak np. tam zamiast silnika podłącze jakąś baterie AA i zobacze odczyt na arduino jaki i czy w ogóle występuje spadek napięcia? Pozdrawiam serdecznie
Chumanista Sierpień 2, 2016 Udostępnij Sierpień 2, 2016 4funrc, miałeś zmierzyć na pinach Arduino po podpięciu a nie "w powietrzu".
Treker (Damian Szymański) Sierpień 3, 2016 Udostępnij Sierpień 3, 2016 Bo wejścia procesora Arduino są domyślnie w trybie INPUT po włączeniu zasilania. Tak jest bezpieczniej dla całego otoczenia, bo procesor nie wymusza żadnych sygnałów (i dzięki temu nie powoduje konfliktów) na pinach, które mogłyby być w układzie sterowane przez coś innego. To również po prostu zalecenie Arduino, Twórcy projektu w dokumentacji piszą o tym, że w przypadku odczytywaniu stanów przez ADC nie jest konieczna konfiguracja pinów (jedno wynika z drugiego) Ale dodaję dla formalności, że nie jest to wiedza tajemna. 4funrc, sprawdź też dla pewności, czy te piny ADC nadal działają - np. wykorzystując zwykły dzielnik napięcia. Może jednak pojawiają się szpilki wyższego napięcia, które uszkodziły te wejścia?
Wojciech_M Sierpień 16, 2016 Udostępnij Sierpień 16, 2016 4.5 Da się prościej/ krócej ? #define yellow 9 #define red 8 #define button 7 int potencjometr = 0; String wpisanaLiczba = ""; int dana = 0; int proby = 3; int widelki = 40; void setup() { pinMode(green, OUTPUT); //Przypisanie pinów pinMode(yellow, OUTPUT); pinMode(red, OUTPUT); pinMode(button, INPUT_PULLUP); Serial.begin(9600); //Rozpoczęcie konwersacji } void loop() { if (digitalRead(button) == LOW) { //Czy jest wciśnięty przycisk potencjometr = analogRead(A5); //Odczytanie wskazania potencjometru String potencjometrString = String(potencjometr); Serial.println("Zgadnij liczbe z zakresu 0-1023!"); //Komunikaat while (Serial.available() == 0) {}; //Czekaj do czasu wpisania delay(200); wpisanaLiczba = Serial.readStringUntil('\n'); //Wczytanie liczby dana = wpisanaLiczba.toInt(); Serial.println("Twoja liczba to: " + wpisanaLiczba); //Wypisanie liczby użytkownika while ((proby > 1) && ((dana >= (potencjometr + widelki)) || (dana <= (potencjometr - widelki)))) { //Spróbuj jeszcze raz proby = proby - 1; digitalWrite(yellow, HIGH); if ((dana - potencjometr) < 0) { Serial.println("Za malo"); } else { Serial.println("Za duzo"); } Serial.println("Try again"); delay(2000); digitalWrite(yellow, LOW); while (Serial.available() == 0) {}; wpisanaLiczba = Serial.readStringUntil('\n'); //Wczytanie liczby dana = wpisanaLiczba.toInt(); Serial.println("Twoja liczba to: " + wpisanaLiczba); //Wypisanie liczby użytkownika } if (((dana <= (potencjometr + widelki)) && (dana >= (potencjometr - widelki)))) { //Wygrana Serial.println("You won!"); digitalWrite(green, HIGH); delay(2000); digitalWrite(green, LOW); proby = 3; Serial.println("Dokladnie: " + potencjometrString); } else { //Przegrana Serial.println("Sorry, you lost!"); Serial.println("Poprawna odpowiedz to: " + potencjometrString); digitalWrite(red, HIGH); delay(2000); digitalWrite(red, LOW); proby = 3; } } } 4.6 Czym kod był dłuższy tym, program gorzej działał (wpisałem if, else if, else gdzie else nie miało możliwości zajść Hahahahahha, 2 dni zachodziłem w głowę co jest nie tak) #define left 9 #define middle 8 #define right 7 int rezLeft = 0; int rezRight = 0; int roznica = 0; int czulosc = 30; void setup() { pinMode(left, OUTPUT); pinMode(middle, OUTPUT); pinMode(right, OUTPUT); pinMode(A4, INPUT_PULLUP); pinMode(A5, INPUT_PULLUP); } void loop() { rezLeft = analogRead(A4); rezRight = analogRead(A5); roznica = abs(rezLeft - rezRight); if ((rezLeft > rezRight) && (roznica > czulosc)) { digitalWrite(left, HIGH); delay(500); digitalWrite(left, LOW); } else if ((rezLeft < rezRight) && (roznica > czulosc)) { digitalWrite(right, HIGH); delay(500); digitalWrite(right, LOW); } else { digitalWrite(middle, HIGH); delay(500); digitalWrite(middle, LOW); } }
Treker (Damian Szymański) Sierpień 22, 2016 Udostępnij Sierpień 22, 2016 Da się prościej/ krócej ? Prawie zawsze da się coś skrócić/uprościć, ale czasami nie ma to sensu, bo może tylko zaciemnić program. Tutaj masz napisane wszystko jasno i przejrzyście, jeśli działa poprawnie, to nie ma większego sensu na siłę czegoś skracać - szczególnie, że całość jest stosunkowo krótka
Elsefor Sierpień 31, 2016 Udostępnij Sierpień 31, 2016 Witam, nie rozumiem gdzie popełniłem błąd w próbie rozwiązania zadania 4.4. Proszę o pomoc. int odczytanaWartosc; //Zmienna do przechowywania odczytu ADC int prog; //Próg włączenia światła - ustawiany potencjometrem float napiecie; boolean swiatlo = false; void setup() { pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC prog = analogRead(A4);//Odczytanie wartości z ADC napiecie = odczytanaWartosc * (5.0/1023.0); if (odczytanaWartosc < prog) { //Czy jest ciemniej od ustawionego progu? digitalWrite(8, HIGH);//Włączenie diody if(swiatlo == false){ Serial.println(napiecie); swiatlo = true; } }else{ swiatlo = false; digitalWrite(8, LOW);//Wyłączenie diody } }
Treker (Damian Szymański) Wrzesień 1, 2016 Udostępnij Wrzesień 1, 2016 Elsefor, a co konkretnie się dzieje? Jaki masz problem ? Jak teraz działa program, a czego oczekujesz?
Elsefor Wrzesień 1, 2016 Udostępnij Wrzesień 1, 2016 No chodzi o to, żeby Arduino wysłało tylko raz informację do monitora szeregowego o stanie napięcia, a wysyła cały czas, kilkukrotnie.
Treker (Damian Szymański) Wrzesień 2, 2016 Udostępnij Wrzesień 2, 2016 Elsefor, w takim przypadku najlepiej spróbować sobie pomóc przez dodanie większej ilości miejsc, w której wysyłasz informacja do komputera. Zacznij np. od wyświetlania wartości obu zmierzonych wyjść A4 i A5. Sprawdź później, czy program wchodzi w odpowiednie warunki właśnie wtedy, gdy się tego spodziewasz. Sprawdzaj krok, po kroku. Dla ułatwienia możesz na końcu pętli dodać sobie opóźnienie, aby danych wysyłanych do komputera było mniej - dzięki temu łatwiej będzie analizować Ci, to co pojawi się w terminalu.
daniel7745 Listopad 18, 2016 Udostępnij Listopad 18, 2016 Zastanawia mnie jedna rzecz, dlaczego mój monitor portu szeregowego pokazuje mi tylko 750 kombinacji? Dodam, że korzystam z Arduino Nano i zasilam swoją płytkę stykową z diodami napięciem 3.3 V. To raczej nie ma wpływu na ilość kombinacji. Bo domyślam się że przetwornik jest również 10 bitowy, bo gdyby był 8 to dochodziło by do 256 kombinacji. Jeśli się mylę, poprawcie mnie.
Pomocna odpowiedź
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ę »