Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Stepper Pomodoro to licznik czasu pracy na biurku, który pomaga zarządzać codzienną listą zadań, dzieląc każdy okres pracy na 30-minutowe segmenty. Jednak w przeciwieństwie do zwykłego timera Pomodoro, nie wzbudza niepokoju, pokazując ilość pozostałego czasu. Zamiast tego wyświetla w przybliżeniu czas, przez który z trzech pokręteł tyka. Niepokazywanie dokładnego czasu pozwala skupić się na zadaniu, a nie na ciągłym sprawdzaniu pozostałego czasu. Ten Pomodoro jest idealny dla tych, którzy potrzebują lekkiej i dyskretnej struktury do zarządzania zadaniami.
Narzędzia
• lutownica
• Narzędzia do ściągania izolacji
• Wycinarka laserowa (lub szlifierka w zależności od tego, jak chcesz stworzyć tarcze timera)
• Wiertarka (użyłem wiertarki do wybijania otworów wystarczająco dużych dla tarcz)
Materiały
• 1 Arduino Uno
• 1 płytka do krojenia chleba o połowie wielkości
• 3 mostki H (użyłem DRV8833, osłona silnika zaoszczędziła mi trochę czasu i bólu głowy)
• 3 silniki krokowe (użyłem silników krokowych NEMA 17)
• 1 przycisk
• 1 rezystor 220-1 kΩ (dowolny w zakresie jest dobry)
• zasilacz AC/DC (użyłem 12V, chyba za duży na taką ilość stepperów)
• Rozdzielacz zasilania
• Przewód USB A-B
• Druty do krojenia chleba
• Lutowane
• Materiały na pojemnik timera
• Akryl na tarcze
• Gwoździe lub metalowe kołki pełniące rolę nieruchomego ramienia timera
Krok 1: Krok 1: Lutowanie i podłączanie obwodu na zewnątrz pojemnika
W tym kroku zacząłem od przylutowania wszystkich moich mostków H (jeśli kupisz osłonę silnika, nie musisz ich lutować. Gdy masz już mostek H dla każdego steppera, możesz sprawdzić, jak są podłączone twoje stepery.
NEMA 17 to tak zwane bipolarne silniki krokowe, co oznacza, że mają dwa (a nie jeden) zestaw cewek w silniku, które zmieniają polaryzację, aby umożliwić precyzyjny ruch silnika. Steppery bipolarne mają zwykle cztery przewody, a stepery polarne sześć, co nieco komplikuje instrukcje online. Możesz jednak podłączyć multimetr do dwóch przewodów i sprawdzić, czy są połączone, czy nie. Steppery NEMA 17 mają kolejność przewodów w kolejności kolorów CZERWONY, ŻÓŁTY, SZARY, ZIELONY, przy czym czerwony i szary to pierwsza para biegunów, a żółty i zielony to druga para biegunów. Jeśli w dowolnym momencie stepper zacznie drgać, a nie wykonać oczekiwany ruch, istnieje prawdopodobieństwo, że twoje przewody w jakiś sposób nie są prawidłowo spolaryzowane do bliźniaka lub jeden jest rozłączony. Każdy krok jest sterowany za pomocą czterech pinów wyjściowych, które łączą się z mostkami DRV8833 H. Kolejność okablowania wejścia do DRV8833 to: IN1, IN2, Zasilanie, Uziemienie, IN3, IN4. Dla celów wyjściowych NEMA łączy się po prostu ze środkowymi czterema z sześciu pinów w kolejności: CZERWONY, SZARY, ŻÓŁTY, ZIELONY. Teraz podłączmy zasilanie. Mam swoje NEMA na portach cyfrowych 2–13.
Aby to zasilić, kupiłem zasilacz 12V AC/DC z rozdzielaczem, aby móc zasilać zarówno Arduino, jak i wszystkie stepery. OSTRZEŻENIE: Nie podłączaj przewodów zasilających i uziemiających z Arduino już zasilanego z portu do płytki stykowej otrzymującej bezpośrednie zasilanie z AC/DC. Usmaży twoją deskę. Z zasilacza 12V podłączonego do ściany jedna część rozdzielacza poszła prosto do portu Arduino, a druga do dodatniego i ujemnego płytki chleba.
Wreszcie nadszedł czas, aby podłączyć przycisk. Jedna strona przycisku będzie wymagała zarówno zasilania (z wpiętym naszym rezystorem), jak i przylutowanego pinu wyjściowego (można to również zrobić z płytki stykowej). Drugi pin będzie naszą ziemią. Te trzy przewody należy podłączyć do: zasilania z rezystorem do 5 V, wyjścia do A0 i uziemienia do masy, wszystko na samej płytce Arduino Uno.
Stąd powinniśmy być w stanie spróbować kontrolować steppery za pomocą tego podstawowego kodu testu krokowego, który można znaleźć tutaj. To wyjaśnienie na Arduino.cc zawiera również dokładniejsze wyjaśnienie bi/unipolarnych stepperów, jeśli tego potrzebujesz. Następnie przejdźmy do kodu Pomodoro!
Krok 2: Krok 2: Prześlij kod i dostosuj go do swoich potrzeb
Poniżej znajduje się kod mojego Pomodoro z przyciskiem, aby dostosować go do swojej konfiguracji, wykonaj następujące kroki:
1. Ustaw, ile kroków na obrót ma twój osobisty stepper (NEMA 17 ma 200 i jest wymieniony w stałej liczbie całkowitej zwanej stepsPerRevolution).
2. Ustaw, gdzie przycisk jest wprowadzany w stałej liczbie całkowitej dzwoniącego buttonPin.
3. Ustaw, skąd twoje arduino ma wyprowadzać dane, aby sterować krokami (te części mogą się najbardziej różnić między typami mostków H, ponieważ wiele z nich ma różne biblioteki, z których korzystają).
4. Ustaw prędkość krokową w obrotach na minutę w.setSpeed (mam swoje ustawione na 1 obr./min podczas obracania zgodnie z ruchem wskazówek zegara i 30 obr./min podczas obracania w lewo).
5. Ustaw, ile razy każdy z Twoich stepperów ma się obrócić, zanim ruszy (moje stepery liczą dziesięć minut, więc obracają się dziesięć razy z prędkością 1 obr./min).
6 Ustaw, jak długo ma się obracać do tyłu.
#włączać
const int stepsPerRevolution = 200; // ustawienie stałej liczby kroków w każdym pełnym obrocie moich silników krokowych
const int buttonPin = A0; // ustawianie stałej mojego wejścia przycisku
Stepper firstStepper(stepsPerRevolution, 2, 3, 4, 5); // zainicjuj bibliotekę krokową na określonych pinach
Krok drugiStepper(kroki na obrót, 6, 7, 8, 9); Krok trzeciStepper(krokiPerRevolution, 10, 11, 12, 13); Stepper firstStepperBack(stepsPerRevolution, 2, 3, 4, 5); // ponownie zainicjuj bibliotekę krokową na tych pinach, aby móc zresetować rpm w przypadku powiadomienia, że czas upłynął Stepper secondStepperBack(stepsPerRevolution, 6, 7, 8, 9); Krok trzeciStepperBack(krokiPerRevolution, 10, 11, 12, 13);
int minutLicznik = 0; // int liczenie pełnych obrotów stepperów
int stan licznika = NISKI; // aktualny stan timera pomodoro (HIGH = on, LOW = off/reset) int buttonState; // aktualny odczyt z pinu wejściowego int lastButtonState = HIGH; // poprzedni odczyt z pinu wejściowego
// poniższe zmienne są unsigned long, ponieważ czas mierzony w milisekundach, // szybko stanie się większą liczbą niż można przechowywać w int. unsigned long lastDebounceTime = 0; // ostatni raz przełączany pin wyjściowy unsigned long debounceDelay = 50; // czas odbicia; zwiększyć, jeśli wyjście migocze
pusta konfiguracja () {
pinMode(buttonPin, INPUT_PULLUP); // ustaw stałą przycisku jako wejście
pierwszystepper.setSpeed(1); // ustaw prędkość na 1 rpm dla odliczania 10 minut na sekundę krokowąStepper.setSpeed(1); trzeciStepper.setSpeed(1); pierwszyStepperBack.setSpeed(30); // ustaw prędkość na 30 obr./min, aby ostrzec, że czas upłynął po zakończeniu przez Pomodoro secondStepperBack.setSpeed(30); trzeciStepperBack.setSpeed(30);
Serial.początek(9600); // uruchom monitor szeregowy z szybkością transmisji 9600 ba
}
pusta pętla () {
// odczytaj stan przełącznika do zmiennej lokalnej: int reading = digitalRead(buttonPin);
// sprawdź, czy właśnie nacisnąłeś przycisk
// (tj. wejście przeszło z LOW na HIGH) i czekałeś // wystarczająco długo od ostatniego naciśnięcia, aby zignorować wszelkie szumy:
// Jeśli przełącznik zmienił się z powodu hałasu lub naciskania:
if (odczyt != lastButtonState) { // zresetuj licznik odbicia lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // niezależnie od tego, jaki jest odczyt, jest tam dłużej // niż opóźnienie debounce, więc weź to jako aktualny stan bieżący:
// jeśli zmienił się stan przycisku:
if (odczyt != stan_przycisku) { stan_przycisku = czytanie;
// przełącz aktywację timera tylko wtedy, gdy nowy stan przycisku wskazuje, że został naciśnięty
// naciśnij raz, aby włączyć, naciśnij ponownie, aby wyłączyć, jeśli (buttonState == LOW) { timerState = !timerState; Serial.print("Stan zegara to "); Serial.println(stan timera); } } }
if (stan timera == WYSOKI) {
Serial.println("Licznik czasu Pomodoro został uruchomiony"); if (minutesCounter < 11) { //jeśli bieżąca druga wartość jest inna niż poprzednia to firstStepper.step(stepsPerRevolution); // włącz stepper 200 kroków/1 min obrotówLicznik++; Serial.print("Licznik minut to "); Serial.println(Licznik minut); }
if (11 <= licznik minut && licznik minut < 21) { //jeśli bieżąca druga wartość jest inna niż poprzednia to secondStepper.step(stepsPerRevolution); // włącz stepper 200 kroków/1 min obrotówLicznik++; Serial.print("Licznik minut to "); Serial.println(Licznik minut); }
if (21 <= licznik minut && licznik minut < 31) { //jeśli bieżąca druga wartość jest inna niż poprzednia, to thirdStepper.step(stepsPerRevolution); // włącz stepper 200 kroków/1 min obrotówLicznik++; Serial.print("Licznik minut to "); Serial.println(Licznik minut); }
if (31 <= minutesCounter && minutesCounter < 1031) { //jeśli aktualna druga wartość jest inna niż poprzednia, to firstStepperBack.step(-1); // cofnij krok do tyłu o 1 krok w kolejności, aby wyglądało na to, że wszystkie działają jednocześnie secondStepperBack.step(-1); trzeciStepperBack.step(-1); minutyLicznik++; Serial.print("Licznik minut to "); Serial.println(Licznik minut); } } else { Serial.println("Zegar Pomodoro jest wyłączony"); } // zapisz odczyt. Następnym razem w pętli, // będzie to lastButtonState: lastButtonState = czytanie; }
Krok 3: Krok 3: Zawieraj steppery i Arduino, jeśli chcesz
Zdecydowałem się stworzyć formę równoległoboczną dla mojego zegara. Ta forma i wybór materiałów czerwonego dębu zostały zainspirowane nowoczesnymi meblami z połowy wieku. Jedną z części, z którą miałem najwięcej trudności, było umieszczenie w stepperach tarczy przez ich iluminatory, aby były widoczne.