Cuprins:
Video: TOYL Task Tracker: 3 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Nu-l urăști doar atunci când intenționezi să lucrezi sau mai rău, dacă ești în mijlocul unei sesiuni de lucru și o notificare vine pe telefon - o „verificare rapidă” devine ore mai târziu. De asemenea, știți cât timp lucrați la anumite sarcini în raport cu timpul pe care l-ați alocat săptămânal pentru muncă?
Introduceți TOYL Task Tracker. Vă permite să opriți telefonul și să vă concentrați asupra muncii, permițându-vă simultan să setați timpul pe care doriți să lucrați săptămânal - să zicem 60 de ore - și sarcinile pe care doriți să le îndepliniți. Când vă așezați pentru o sesiune, aveți o idee despre cât de mult vă mai rămâne pentru munca dvs. generală. Tracker-ul are două moduri: Temporizator, unde ați setat cât timp doriți să petreceți pe sarcină pe săptămână și Cronometru, unde puteți pur și simplu să porniți-opriți cronometrul după selectarea unei sarcini.
Provizii
Circuit
- Adafruit Feather Huzzah
- Adafruit FeatherWing
- Pinii antetului masculin
- Pinii antetului feminin
- Baterie de 500mAh
- Rezistențe 100K ohm x2
- Banda izolatoare
- Sârmă torsadată
- Decapanti de sârmă
- Fan de lipit
Carcasă
- Foaie acrilică opacă 24 "x18"
- Bandă cu două fețe
- Acces la un dispozitiv de tăiat cu laser
- Software de vector
Pasul 1: lipiți circuitul
Lipiți pinii antetului feminin la Huzzah Feather. Acest tutorial este util pentru configurarea hardware Feather Huzzah. Apoi, lipiți pinii antetului masculin pe FeatherWing. Lipirea acestora în acest mod vă permite să vă alăturați și să separați Aripa Penei de Huzzah Pene atunci când este necesar. Acest lucru este deosebit de util atunci când trebuie să adăugați rezistențe la FeatherWing, care este pasul următor. Conectați rezistențe de 100K ohm de la fiecare pin 0 și 2, conectat la 3V.
Configurați hardware-ul Feather Huzzah
Configurați hardware-ul Feather Wing
Pasul 2: Adăugați codul
Acest cod este o adaptare a codului lecției 5 Internetul obiectelor, Permițând timpul, aș dori să înlocuiesc serviciul Preceptitaton cu unul care urmărește sarcinile care sunt adăugate prin applet-ul ToDosit IFTTT. În acest moment, va trebui să introduceți manual un set de sarcini și să utilizați butonul A pentru a le parcurge. În plus, mi-aș fi dorit să fi codat temporizatorul pentru a număra în câteva minute și pentru a opri când trec la următoarea sarcină. O mulțumire imensă lui Becky Stern pentru crearea codului de bază pentru cronometru și ciclism prin sarcini. Dacă sunteți interesat să conectați proiectul la internet, vă recomand cu tărie să parcurgeți acest set de clase.
// Instructabile codul eșantionului clasei Internet of Things // Afișarea circuitului Date Internet // Datele meteo sunt colectate într-un flux // NeoPixels multipli vizualizează starea vremii // // Modificat de Becky Stern 2017 // pe baza Exemplului de abonament Adafruit IO
// Adafruit investește timp și resurse oferind acest cod sursă deschisă.
// Vă rugăm să susțineți Adafruit și hardware open source achiziționând // produse de la Adafruit! // // Scris de Todd Treece pentru Adafruit Industries // Copyright (c) 2016 Adafruit Industries // Licențiat sub licența MIT. // // Tot textul de mai sus trebuie să fie inclus în orice redistribuire.
/ ************************ Adafruit IO Configuration ********************* *********
/ vizitați io.adafruit.com dacă trebuie să vă creați un cont, // sau dacă aveți nevoie de cheia Adafruit IO. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"
/ ******************************** Configurare WIFI **************** ********************** /
#define WIFI_SSID "WifiName"
#define WIFI_PASS "Parola Wifi"
#include „AdafruitIO_WiFi.h”
AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
/ ************************ Programul principal începe aici ********************* ********** /
#include #include #include #include
#include
#include #include #include
#define OLED_RESET 3
Afișaj Adafruit_SSD1306 (128, 32, & Wire, OLED_RESET);
// această constantă nu se va schimba:
butonul const intPinA = 0; // pinii pe care butoanele sunt atașate la butonul const intPinB = 16; // acesta are deja un rezistor pullup, celelalte două au nevoie de un buton const intPinC = 2;
// Variabilele se vor schimba:
buton intAPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonAState = 0; // starea curentă a butonului int lastButtonAState = 0; // starea anterioară a butonului
// Variabilele se vor schimba:
int buttonBPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonBState = 0; // starea curentă a butonului int lastButtonBState = 0; // starea anterioară a butonului
// Variabilele se vor schimba:
int buttonCPushCounter = 0; // contor pentru numărul de apăsări de butoane int buttonCState = 0; // starea curentă a butonului int lastButtonCState = 0; // starea anterioară a butonului
String displayForecast = "necunoscut";
int timerVal = 0;
unsigned long lastStartTime = 0; bool timerEnabled = 0;
AdafruitIO_Feed * precipitation = io.feed ("precipitație"); // configurați feedul „precipitații”
// AdafruitIO_Feed * taskmanager = io.feed ("taskmanager"); // configurați fluxul „taskmanager”
configurare nulă () {
pinMode (buttonPinA, INPUT); pinMode (buttonPinB, INPUT_PULLUP); pinMode (buttonPinC, INPUT);
// SSD1306_SWITCHCAPVCC = generează tensiunea de afișare de la 3.3V intern
display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Adresați 0x3C pentru 128x32
// Afișați conținutul bufferului de afișare inițial pe ecran -
// biblioteca inițializează acest lucru cu un ecran de pornire Adafruit. display.display (); întârziere (2000); // Pauză timp de 2 secunde
// Ștergeți tamponul.
display.clearDisplay ();
// porniți conexiunea serială
Serial.begin (115200);
// conectați-vă la io.adafruit.com
Serial.print („Conectarea la Adafruit IO”); io.connect (); // configurați un handler de mesaje pentru fluxul „precipitații”. // funcția handleMessage (definită mai jos) // va fi apelată ori de câte ori este primit // un mesaj de la adafruit io. precipitații-> onMessage (handleMessage);
// așteptați o conexiune
while (io.status () <AIO_CONNECTED) {Serial.print ("."); întârziere (500); }
// suntem conectați
Serial.println (); Serial.println (io.statusText ());
}
bucla nulă () {
// io.run (); este necesar pentru toate schițele.
// ar trebui să fie întotdeauna prezent în partea de sus a buclei // funcției. menține clientul conectat la // io.adafruit.com și procesează orice date primite. io.run ();
// citiți pinul de intrare al butonului:
buttonAState = digitalRead (buttonPinA); buttonBState = digitalRead (buttonPinB); buttonCState = digitalRead (buttonPinC);
// comparați butonul State cu starea sa anterioară
if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// dacă starea s-a schimbat, creșteți contorul dacă (buttonAState == LOW) {// dacă starea curentă este LOW, atunci butonul a fost apăsat butonulAPushCounter ++; Serial.print ("numărul de butoane A apasă:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// dacă starea curentă este LOW atunci butonul a fost apăsat buttonBPushCounter ++; Serial.print ("numărul de apăsări ale butonului B:"); Serial.println (buttonBPushCounter); Serial.println ("Timer de pornire"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// dacă starea curentă este LOW atunci butonul a fost apăsat buttonCPushCounter ++; Serial.print ("numărul de apăsări ale butonului C:"); Serial.println (buttonCPushCounter); Serial.println („Timp de oprire”); timerEnabled = 0; }} if (timerEnabled == 1) {// creșteți temporizatorul numai când a fost pornit timerVal = (millis () - lastStartTime) / 1000; }
// afișează poziția 1 - prognoză
// if (buttonAPushCounter% 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (ALB); // display.setCursor (0, 0); // display.print ("Prognoza:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("a doua linie"); // display.println („exemplu de conținut”); // display.display (); // // întârziere (2000); //}
// afișează poziția 1 - Sarcina 1
if (buttonAPushCounter% 3 == 0) {display.setTextSize (1); display.setTextColor (ALB); display.clearDisplay (); display.setCursor (0, 0); display.println ("Cercetare - Interviuri"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }
// afișează poziția 2 - Sarcina 2
if (buttonAPushCounter% 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Making Studio - Code"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }
// afișează poziția 3 - Sarcina 3
if (buttonAPushCounter% 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - Sketching"); display.println (); display.print ("Timer:"); display.println (timerVal); display.display (); }
// salvați starea curentă ca ultima stare, // pentru data viitoare prin bucla lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;
}
// această funcție este apelată ori de câte ori un mesaj
// este primit de la Adafruit IO. a fost atașat la // feedul din funcția setup () de mai sus. void handleMessage (date AdafruitIO_Data *) {
String forecast = data-> toString (); // stochează datele meteo primite într-un șir
Serial.print ("primit <-"); Serial.println (prognoză); displayForecast = prognoză; // următoarele șiruri stochează diferitele cuvinte ale raportului meteo IFTTT pe care le-am descoperit până acum String task1 = String („Task 1”); String rain = String ("Ploaie"); String lightrain = String ("Ploaie ușoară"); String rainshower = String („Dus de ploaie”); String AMshowers = String ("AM Showers"); String rainandsnow = String ("Ploaie și zăpadă"); String snow = String („Zăpadă”); String snowshower = String („Zăpadă de duș”); String cloudy = String ("Noros"); String mostlycloudy = String ("Majoritatea înnorat"); String partialcloudy = String ("Parțial înnorat"); String clearsky = String ("Clear"); String fair = String ("Târg"); String sunny = String ("Soare");
// Aceste instrucțiuni if compară variabila meteo primită cu condițiile stocate și controlează NeoPixels în consecință.
// dacă este ploaie în prognoză if (forecast.equalsIgnoreCase (ploaie) || forecast.equalsIgnoreCase (lightrain) || forecast.equalsIgnoreCase (rainshower) || forecast.equalsIgnoreCase (AMshowers)) {Serial.println ("precipitații în prognoza de azi ");
}
// dacă există zăpadă în prognoză if (forecast.equalsIgnoreCase (ninsoare) || forecast.equalsIgnoreCase (rainandsnow) || forecast.equalsIgnoreCase (snowshower)) {Serial.println ("precipitații în prognoza de astăzi");
}
// dacă există soare în prognoză if (forecast.equalsIgnoreCase (clearsky) || forecast.equalsIgnoreCase (corect) || forecast.equalsIgnoreCase (sunny)) {Serial.println ("un fel de soare în prognoza de astăzi");
}
// dacă sunt nori în prognoză if (forecast.equalsIgnoreCase (înnorat) || forecast.equalsIgnoreCase (majoritatea înnorat) || forecast.equalsIgnoreCase (în parte înnorat)) {Serial.println ("cer înnorat în prognoza de astăzi");
}
}
Pasul 3: Creați Container / Shell
Pentru shell, începeți prin a determina ce dimensiune doriți să aibă cadrul dvs. sau puteți descărca fișierul meu. După ce determinați dimensiunea, puteți utiliza MakerCase pentru a crea aspectul pentru fișierul vector.
Rulați fișierul prin tăietorul laser - ar trebui să dureze aproximativ 5 minute. Apoi puneți coaja împreună.
Nu am ținut cont de lățimea materialului, ceea ce face ca butoanele mele să fie greu accesibile. Mai trebuie să găsesc o modalitate de a le atașa. De asemenea, sunt foarte mici, ceea ce le face dificil de lucrat.
Recomandat:
Task Giving Arduino Machine (aka: Making Your Own Bop-it!): 5 pași
Task Giving Arduino Machine (aka: Making Your Own Bop-it!): Pentru studiul pe care îl urmez în prezent, am primit misiunea de a face ceva cu un Arduino. Mi-am făcut rost de un ansamblu standard de materiale de la școală și am gândit ceva care să funcționeze în jurul lor, cu un covor exterior minim
Tracker de filme - Raspberry Pi Powered Theatrical Release Tracker: 15 pași (cu imagini)
Tracker de filme - Tracker de lansare pe scenă cu funcționare Raspberry Pi: Movie Tracker este un tracker de lansare alimentat de Raspberry Pi, în formă de clapetă. Folosește API-ul TMDb pentru a imprima afișul, titlul, data lansării și prezentarea generală a filmelor viitoare din regiunea dvs., într-un interval de timp specificat (de exemplu, lansări de filme în această săptămână) pe
Task Manager - un sistem de gestionare a treburilor casnice: 5 pași (cu imagini)
Manager de sarcini - un sistem de gestionare a treburilor gospodăriei: am vrut să încerc să abordez o problemă reală cu care se confruntă gospodăria noastră (și, îmi imaginez, cea a multor alți cititori), care este modul de a-mi aloca, motiva și recompensa copiii pentru că au ajutat cu treburile casnice. Până acum, am păstrat o foaie laminată
Multi Task Raspberry 1 B (Personal Cloud + Station Meteo): 4 pași
Multi Task Raspberry 1 B (Personal Cloud + Weather Station): Cu ceva timp în urmă mi-am amintit că a existat o rezervă RPiB după ce am cumpărat o versiune mai nouă. Gândindu-mă la confidențialitate atunci când păstrez fișierele de rezervă, am decis să am propriul meu server cloud. Mulțumit de rezultate bune, dar nu mulțumit de risipa de potențial din R
Task Zero: 7 pași (cu imagini)
Task Zero: Trăind într-o societate care prețuiește eficiența ridicată și stresează succesul, se poate să uităm că există viață în afara muncii. Sarcina 0: Prețuiește-ți viața personală. Nu amâna acele sarcini care cultivă