Lukaszm Grudzień 11, 2016 Udostępnij Grudzień 11, 2016 Chodzi o baterię 9V, za mała wydajność prądowa (i mała pojemność). 1
MaciejBurchardt Grudzień 12, 2016 Udostępnij Grudzień 12, 2016 Zadanie 8.1 #define firstMotorPWM 10 #define firstMotorDirectionPinOne 2 #define firstMotorDirectionPinTwo 3 #define secondMotorPWM 11 #define secondMotorDirectionPinOne 4 #define secondMotorDirectionPinTwo 5 void setup() { pinMode(firstMotorPWM, OUTPUT); pinMode(firstMotorDirectionPinOne, OUTPUT); pinMode(firstMotorDirectionPinTwo, OUTPUT); pinMode(secondMotorPWM, OUTPUT); pinMode(secondMotorDirectionPinOne, OUTPUT); pinMode(secondMotorDirectionPinTwo, OUTPUT); digitalWrite(firstMotorPWM, HIGH); digitalWrite(secondMotorPWM, HIGH); } void loop() { motorsAhead(); delay(3000); motorsDifferentDirections(); delay(3000); motorsBack(); delay(3000); } void motorsAhead() { digitalWrite(firstMotorDirectionPinOne, LOW); digitalWrite(firstMotorDirectionPinTwo, HIGH); digitalWrite(secondMotorDirectionPinOne, LOW); digitalWrite(secondMotorDirectionPinTwo, HIGH); } void motorsDifferentDirections() { digitalWrite(firstMotorDirectionPinOne, HIGH); digitalWrite(firstMotorDirectionPinTwo, LOW); digitalWrite(secondMotorDirectionPinOne, LOW); digitalWrite(secondMotorDirectionPinTwo, HIGH); } void motorsBack() { digitalWrite(firstMotorDirectionPinOne, HIGH); digitalWrite(firstMotorDirectionPinTwo, LOW); digitalWrite(secondMotorDirectionPinOne, HIGH); digitalWrite(secondMotorDirectionPinTwo, LOW); }
Treker (Damian Szymański) Grudzień 15, 2016 Udostępnij Grudzień 15, 2016 MaciejBurchardt, dodaj komentarze do kodu - inaczej za jakiś czas będziesz sam się zastanawiał, co robi dany fragment kodu To naprawdę dobra praktyka!
MaciejBurchardt Grudzień 16, 2016 Udostępnij Grudzień 16, 2016 Uncle Bob twierdzi, że prawie każdy komentarz w kodzie powinien zmusić nas do refleksji, czy nie da się go usunąć. Nie korzystam z komentarzy celowo, w zamian staram się tworzyć krótkie i czytelne funkcje (zupełnie osobną kwestią jest czy mi się to udaje - jeśli nie to chętnie przyjmę każdą krytykę). Brak komentarzy jest u mnie świadomy i powołuję się tutaj na rozdział na rozdział 4 książki "Czysty Kod" Roberta C. Martina
Lukaszm Grudzień 16, 2016 Udostępnij Grudzień 16, 2016 powołuję się tutaj na rozdział na rozdział 4 książki "Czysty Kod" Roberta C. Martina Super. A udało Ci się dotrzeć do rozdziału opisującego jak nazywać funkcje? Najczęstszą konwencją jest że nazwa funkcji zawiera czasownik, u Ciebie nic takiego nie widać.
MaciejBurchardt Grudzień 16, 2016 Udostępnij Grudzień 16, 2016 Udało i dzięki za zwrócenie uwagi, poprawię się
Sodar Styczeń 1, 2017 Udostępnij Styczeń 1, 2017 Witam. Wykonuję pewien projekt związany z kontrolą prędkości silnika DC. Wykorzystuję silnik DC od starej drukarki i układ oparty na mostku L398N (coś takiego - http://cdn3.bigcommerce.com/s-vt19phz/product_images/uploaded_images/l298n-motor-driver-from-tronixlabs-australia.png ). Mostek zasilany osobno 12V. Motor startuje przy PWM ok 130. Problem że generuje takie "warczenie", dośc nieprzyjemne. Oczywiście przy pwm 255 znika. Przy niskich obrotach widać że jego praca jest bardzo nierówna. Jak można się tego pozbyć? Można zastosować kondensator jako filtr? Silnik pobiera ok 120mA - 200mA przy 12V i pwm 255. Kod: #include <Wire.h> #include <LiquidCrystal_I2C.h> // pobrany lib od I2C #define enA 6 #define in1 9 #define in2 8 #define conFast 3 #define conSlow 2 // LCD na 0x3F LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6 ,7, 3, POSITIVE); // speed int spd; int ctrl; void spdup(); void spddown(); void setup() { spd = 0; ctrl = 0; // wyswietlacz lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("Motor PWM - "); lcd.print(ctrl); lcd.setCursor(0,1); lcd.print("Zadane - "); lcd.print(spd); // silniki pinMode(enA, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // sterowanie (przerwania) pinMode(conFast, INPUT_PULLUP); pinMode(conSlow, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(conFast), spdup, RISING); attachInterrupt(digitalPinToInterrupt(conSlow), spddown, RISING); } void loop() { // wyswietlenie lcd.clear(); lcd.setCursor(0,0); lcd.print("Motor PWM - "); lcd.print(ctrl); lcd.setCursor(0,1); lcd.print("Zadane - "); lcd.print(spd); // sprawdzenie czy za wolno if(ctrl < spd){ for (ctrl; ctrl < spd; ctrl++) { analogWrite(enA, ctrl); delay(50); } } else { delay(25); } // sprawdzenie czy za szybko if(ctrl > spd){ for (ctrl; ctrl > spd; --ctrl) { analogWrite(enA, ctrl); delay(50); } } else { delay(25); } //koniec } void spdup() { if(spd <= 255){ spd = spd + 15; } else { } } void spddown() { if(spd >= 15){ spd = spd - 15; } else { } }
Sodar Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 Częstotliwości bazowe Arduino. Nie zmieniałem ich, zresztą widać to w kodzie. Wiem że jest to ok 490Hz. Czytałem że można je zmieniać ale wolę się na razie tym nie bawić, za cienki na razie jestem . Jeszcze mam dodatkowe pytanie, związane z pomiarem prędkości silnika. Mam czujnik FC-03 taki jak tutaj http://i58.tinypic.com/sotohu.jpg . Rozumiem że skoro czujnik bazuje na podczerwieni to muszę w tarczce wyciąć dziury (mam jakąś tarczke od drukarki ale jest tylko malowana)? Ma on wyjścia D0 i A0 oprócz zasilania. Gdy natrafi na dziurę podaje sygnał HIGH na porcie D0 tak?
Lukaszm Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 Jedynym znanym mi sposobem pozbycia się dźwięku wynikającego ze stosowania PWM jest zwiększenie częstotliwości przebiegu ponad częstotliwości słyszalne przed człowieka. Pomijam tutaj to czy zastosowany mostek będzie zadowolony z takiej częstotliwości. Edit: a to co słyszysz to właśnie częstotliwość PWM + pewnie harmoniczne
Sodar Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 A zastosowanie kondensatora nie powinno nieco wygładzić fali? Wrażenia dźwiękowe to akurat mało mnie interesują. Ważniejsze aby silnik kręcił się stabilnie i pomiar z czujnika się nie sypał. Szczerze mówiąc myślałem że przy 490Hz to już nie bedzie odczuwalne dla niezbyt małego silnika. Dzwięk brzmi raczej jak 50-100Hz, troche to dziwne.
marek1707 Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 No tak, prawie 500Hz to już miłe buczenio-piszczenie. Może masz jakiś problem z zasilaniem? Jakieś tętnienia 50Hz na szynie zasilania mostka lub niestabilność zasilacza? Z czego to napędzasz? Duży kondensator na wyjściu mostka jest wykluczony, zapomnij.
Lukaszm Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 Możliwe, ale spróbuj oszacować jakiej pojemności kondensatora potrzebowalbyś żeby dał odpowiedni efekt.
Sodar Styczeń 2, 2017 Udostępnij Styczeń 2, 2017 Na razie zasilam z zasilacza testowego Aps3005s, ustawiony na równo 12V. Na zasilaczu bezpośrednio silnik chodzi równo. Po zamontowaniu urzadzenia będzie wykorzystany zasilacz impulsowy 12V 2,3A od dekodera cyfrowego polsatu . Czytałem że przy większych silnikach pomaga czasem obniżenia częstotliwości aż się trafi na odpowiednią, może tego spróbuję,
cy5 Styczeń 3, 2017 Udostępnij Styczeń 3, 2017 Fajne fajne, podobają mi się takie zabawy z takimi zabawkami
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ę »