Skocz do zawartości

Rogal

Użytkownicy
  • Zawartość

    8
  • Rejestracja

  • Ostatnio

Reputacja

8 Neutralna

O Rogal

  • Ranga
    2/10
  • Urodziny 27.07.1989

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Warszawa
  • Zainteresowania
    lotnictwo
  • Zawód
    pilot samolotu

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Cześć, Sorry, że odpowiadam tak późno ale czytam forum w miarę własnych postępów. Zacznijmy od pojemności kondensatorów. Kondensator o pojemności 1uF jest bardziej pojemny od 10 nF. 1 uF to 10^-6F a 10nF to 10^-8F. "u" to mikro (10^-6) a "n" to nano (10^-9). Drugą sprawą jest kwestia rezystora. Chodzi o generowanie sygnału o bardzo konkretnej częstotliwości tak aby sygnał podstawowy podawany na buzzer zmieniał się w słyszalnej dla ludzi częstotliwości. Wystarczy to podstawić do wzoru z poprzedniej lekcji. f = 1 / (2,2 * C * R) = 1 / (2,2 * 1uF * 100kR) =~4,5 Hz tj. zmiana tonu buzzera następuje prawie 5 razy na sekundę. Pytanie do projektanta układu czy dobierał rezystor do kondensatora czy kondensator do rezystora ponieważ możemy dowolnie zmieniać (w zakresie dostępnych części) obydwie te wartości. W sumie ciekawi mnie czy większy kondensator ma tu wpływ na np. lepszą stabilność działania układu. Duży rezystor ma dodatkową zaletę ograniczającą pobór prądu układu... pytanie jak nisko można zejść z pojemnością kondensatora (i jak wysoko z rezystancją opornika) aby to wszystko dalej działało. Twoja modyfikacja wprowadziła zmiany tonu buzzera ponad 4500 razy na sekundę - to dokładnie taka sama częstotliwość co sygnału podstawowego. Nie wiem jak dokładnie układ powinien zachować się w tej sytuacji ale tak częste zmiany tonu na pewno nie są do wychwycenia przez człowieka.
  2. Jak podłączasz koszyk do płytki stykowej? Jeżeli za pomocą przewodów koszyka to wkładając jedną baterie do koszyka na dwie nie zamykasz obwodu (jest przerwa bo baterie w koszyku są połączone szeregowo) dlatego w tej konfiguracji nie da się jej sprawdzić. Musisz albo wsadzić tam dwie baterie albo poszukać koszyka na jedną albo przyłożyć przewody bezpośrednio do zacisków tej konkretnej baterii. Rezystor 10 kR wydaje się trochę za duży bo z prawa Ohma: U/R = I czyli ~1,5 / 10 000 = 0,00015 A = 0,15 mA. To za mały prąd aby zaobserwować spadek napięcia pod obciążeniem. Najmniejszy rezystor jaki miałem pod ręką to 100 R i w jego przypadku prąd płynący przez niego powinien wynieść ok 15 mA - nie dużo ale dało się odróżnić baterie rozładowaną od dobrej. Dobra nie zanotowała żadnego spadku a rozładowanej napięcie spadło o ok. 0,1 V. Taka bateria powinna móc dać ponad 15 mA także pewnie warto zastosować mniejszy rezystor i wtedy wyniki będą bardziej spektakularne ale to lepiej żeby ktoś inny się wypowiedział. Miernik możesz przyłożyć np. do zacisków baterii albo do nóżek rezystora.
  3. Cześć, Póki co mogę się podzielić zadaniami domowymi 6.1 oraz 6.2. Nieśmiało poeksperymentowałem z millis(). /* * Kurs Arduino poziom II * Wyświetlacze 7-segmentowe * Zadania domowe 6.1 oraz 6.2 */ #define SEG_C 2 //Definicje pinów segmentów wyświetlaczy #define SEG_E 3 #define SEG_D 4 #define SEG_G 5 #define SEG_A 6 #define SEG_F 7 #define SEG_B 8 #define Minus 9 //Definicje pinów przycisków #define Plus 10 #define Reset 11 #define mryganie 500 //Okres mrygania kodu błędu int i = 0; //Zmienna "i" służy do określenia wyświetlanej cyfry w pętli głównej int j = 0; //Zmienna "j" służy do resetowania czasu po upłynięciu okresu jednego mrygnięcia unsigned long poprzedniCzas = 0; //Zmienna "poprzedniCzas" zapisuje aktualny czas z komendy millis() przed mrygnięciem kodu błędu void setup() { pinMode(SEG_A, OUTPUT); //Deklaracja pinów wyświetlacza jako wyjścia pinMode(SEG_B, OUTPUT); pinMode(SEG_C, OUTPUT); pinMode(SEG_D, OUTPUT); pinMode(SEG_E, OUTPUT); pinMode(SEG_F, OUTPUT); pinMode(SEG_G, OUTPUT); pinMode(Minus, INPUT_PULLUP); //Deklaracja pinów przycisków jako podciągnięte wejścia pinMode(Plus, INPUT_PULLUP); pinMode(Reset, INPUT_PULLUP); } void loop() { if(digitalRead(Plus) == LOW){ //Jeżeli przycisk "Plus" wciśnięty (zwarty z masą) to zwiększ "i" o jeden i odczekaj aby wyeliminować efekt wielokrotnego wciśnięcia przycisku i++; delay(200); } else if(digitalRead(Minus) == LOW){ //Po wciśnięciu minusa zmniejsz "i" o jeden i--; delay(200); } else if(digitalRead(Reset) == LOW){ //Przycisk "Reset" nadaje zmiennej "i" wartość 0 i = 0; delay(200); } if(i > 9){ //Dwie instrukcje warunkowe ograniczające i do zakresy od -1 do 10 i = 10; } if(i < -1){ i = -1; } wyswietlacz(i); //Wyświetlenie cyfry } void wyswietlacz(int cyfra){ //Funkcja zamieniająca wartość "i" na wyświetlenie konkretnych diod. Cyfra jest zmienną wewnątrz tej funkcje przyjmującą wartość "i" if((cyfra > 9 || cyfra < 0) && j == 0){ //Jeżeli cyfra nie mieści się w zakresie wyświetlania wyświatlacza i zmienna "j" wskazuje początek nowego/pierwszego mrygnięcia to zapisz aktualny czas do zmiennej poprzedniCzas = millis(); } if(poprzedniCzas < millis() - mryganie){ //Jeżeli okres mrygnięcia minął to zresetuj zmienną "j" co spowoduje rozpoczęcie kolejnego mrygnięcia j = 0; } if(cyfra > 9 || cyfra < 0){ //Kolejne sprawdzenie czy zakres cyfry poza zakresem wyświetlacza i... if(poprzedniCzas > millis() - (mryganie/2)){ //jeżeli tak to włącz diody sygnalizujące kod błędu o ile nie mineło więcej niż pół okresu mrygnięcia, zwiększ zmienną "j" tak aby nie nadpisywał się czas w zmiennej "poprzedniCzas" j++; digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); } else{ //Jeżeli natomiast minęło pół okresu mrygnięcia to wyłącz diody digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); } } else{ //Jeżeli cyfra mieści się w zakresie wyświetlacza to przygotuj zmienną "j" na początek okresu mrygnięcia kodu błędu na wypadek gdyby cyfra przestała się mieścić w następnym obiegu j = 0; } switch(cyfra){ //Instrukcja zamiany konkretnej cyfry na włączenie konkretnych diod tak aby całość była wyświetlana jako ta cyfra case 0: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, LOW); break; case 1: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 2: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, LOW); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 3: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, HIGH); break; case 4: digitalWrite(SEG_A, LOW); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 5: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 6: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, LOW); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 7: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, LOW); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, LOW); digitalWrite(SEG_G, LOW); break; case 8: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, HIGH); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; case 9: digitalWrite(SEG_A, HIGH); digitalWrite(SEG_B, HIGH); digitalWrite(SEG_C, HIGH); digitalWrite(SEG_D, HIGH); digitalWrite(SEG_E, LOW); digitalWrite(SEG_F, HIGH); digitalWrite(SEG_G, HIGH); break; } }
  4. Cześć. Zauważyłem, że buzzer jeżeli ma po sobie instrukcje delay to wydaje inny dźwięk niż gdy pracuje w czasie normalnego obiegu pętli. Dość dobrze to widać gdy zada mu się określony czas pracy i da delaya np. mniejszego o połowę. Wtedy przez połowę czasu brzmi normalnie a przez drugą połowę trochę bardziej trzeszczy. Czy to jest normalne? A może ja coś źle robię? tone(Buzzer, 700, 4000); delay(2000); Problem nie powtarza się na krótszych programach niż ta centralka.
  5. Też o tym myślałem. Problem był taki, że "delay" jest już wykorzystane w innym kontekście jako komenda a nic innego na szybko nie wymyśliłem. Co do komentarzy to nie pomyślałem wcześniej. W sumie to mój pierwszy kod do którego mam szanse kiedyś wrócić
  6. Na E170/190 jako kapitan. Dobry samolot, bardzo elektroniczny
  7. Hej ho, Piotrek, 30 lat. Przerobiłem już elektronikę 1 i 2, arduino 1. Jestem w trakcie kursu lutowania i arduino 2. Technika cyfrowa i kurs budowy robotów kupione czekają na trochę wolnego czasu. Zawodowo zajmuję się lataniem samolotami. Kiedyś chciałem aby elektrotechnika była moim 2 zawodem ale do spółki z pilotowaniem samolotów to są dwa za duże tematy aby zajmować się nimi na raz na poziomie profesjonalnym. Dlatego po zaliczeniu 1 roku elektrotechniki na PW zrezygnowałem na rzecz studiów lotniczych. Teraz powoli wracam jako hobbysta
  8. A ja się pochwalę tym co zrobiłem. Program powinien działać (chyba, nie mam jak sprawdzić) w zasadzie z dowolną ilością LED pod warunkiem zdefiniowania tej ilości w "LEDcount". Pewnie jest sporo błędów ale nie zajmuje się programowaniem na co dzień. Inspiracja: kaukaskie wieżowce #include <Adafruit_NeoPixel.h> #define LEDcount 8 #define background 10 #define diff 150 #define maximum 255 Adafruit_NeoPixel RGBstrip= Adafruit_NeoPixel(LEDcount, A0, NEO_GRB + NEO_KHZ800); #define opoznienie 100 int i = 0; int j = 0; void setup() { RGBstrip.begin(); for(i = 0; i < LEDcount; i++){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, background)); } RGBstrip.show(); } void loop() { for(int i = 0; i < LEDcount; i++){ for(int j = 0; j < 255; j++){ if(i == 0){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum))); RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff))); RGBstrip.setPixelColor(LEDcount-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff))); RGBstrip.setPixelColor(LEDcount-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background))); } else if(i == 1){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum))); RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff))); RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff))); RGBstrip.setPixelColor(LEDcount-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background))); } else if((i > 1) && (i < (LEDcount-2))){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum))); RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff))); RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff))); RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background))); } else if(i == LEDcount - 2){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum))); RGBstrip.setPixelColor(i+1, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff))); RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff))); RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background))); } else if(i == LEDcount - 1){ RGBstrip.setPixelColor(i, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, maximum))); RGBstrip.setPixelColor(0, RGBstrip.Color(0, 0, map(j, 0, 254, background, maximum - diff))); RGBstrip.setPixelColor(i-1, RGBstrip.Color(0, 0, map(j, 0, 254, maximum, maximum - diff))); RGBstrip.setPixelColor(i-2, RGBstrip.Color(0, 0, map(j, 0, 254, maximum - diff, background))); } RGBstrip.show(); delayMicroseconds(opoznienie); } } }
×
×
  • Utwórz nowe...