Kazalo:

TOYL Task Tracker: 3 koraki (s slikami)
TOYL Task Tracker: 3 koraki (s slikami)

Video: TOYL Task Tracker: 3 koraki (s slikami)

Video: TOYL Task Tracker: 3 koraki (s slikami)
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Julij
Anonim
Image
Image
TOYL sledilnik opravil
TOYL sledilnik opravil
TOYL sledilnik opravil
TOYL sledilnik opravil

Ali ne sovražite, ko nameravate delati ali še huje, ste sredi delovne seje in na telefon pride obvestilo-"hitra kontrola" postane ura kasneje. Ali tudi veste, koliko časa delate na določenih opravilih glede na čas, ki ste ga tedensko namenili za delo?

Vnesite TOYL Task Tracker. Omogoča vam, da izklopite telefon in se osredotočite na delo, hkrati pa vam omogoča, da nastavite čas, ki bi ga radi delali na teden, recimo 60 ur, in opravila, ki jih želite opraviti. Ko se usedete na sejo, dobite predstavo o tem, koliko časa vam je ostalo za celotno delo. Sledilnik ima dva načina: časovnik, kjer ste vnaprej določili, koliko časa želite porabiti za opravilo na teden, in štoparico, kjer lahko preprosto izklopite časovnik po izbiri opravila.

Zaloge

Vezje

  • Adafruit Feather Huzzah
  • Adafruit FeatherWing
  • Moški zatiči glave
  • Ženski zatiči glave
  • 500 mAh baterija
  • 100K ohmski upori x2
  • Izolacijski trak
  • Nasedla žica
  • Odstranjevalci žice
  • Spajkalni ventilator

Ohišje

  • Neprozorna akrilna plošča 24 "x18"
  • Dvostranski trak
  • Dostop do laserskega rezalnika
  • Vektorska programska oprema

1. korak: Spajkajte svoje vezje

Spajkajte svoje vezje
Spajkajte svoje vezje
Spajkajte svoje vezje
Spajkajte svoje vezje
Spajkajte svoje vezje
Spajkajte svoje vezje

Pripnite zatiče za glavo glave na Feather Huzzah. Ta vadnica je uporabna za nastavitev strojne opreme Feather Huzzah. Nato zataknite zatiče moške glave na FeatherWing. Spajkanje na ta način vam omogoča, da se po potrebi povežete in ločite krilo perja od peresa Huzzah. To je še posebej priročno, ko morate v FeatherWing dodati upore, kar je naslednji korak. Priključite upore 100K ohmov iz vsakega zatiča 0 in 2, priključenih na 3V.

Nastavite strojno opremo Feather Huzzah

Nastavite strojno opremo Feather Wing

2. korak: Dodajte kodo

Dodajte svojo kodo
Dodajte svojo kodo
Dodajte svojo kodo
Dodajte svojo kodo

Ta koda je adaptacija kode 5. interneta stvari, ki dopušča čas, zato bi želel zamenjati storitev Preceptitaton s tisto, ki sledi nalogam, ki so dodane prek programa ToDosit IFTTT. Trenutno bi morali ročno vnesti nabor nalog in za njihovo premikanje uporabiti gumb A. Poleg tega bi želel kodirati časovnik za štetje v minutah in ustaviti pri preklopu na naslednjo nalogo. Najlepša hvala Becky Stern za ustvarjanje osnovne kode za merilnik časa in kolesarjenje po opravilih. Če vas zanima povezovanje projekta z internetom, toplo priporočam, da opravite ta sklop predavanj.

// Vzorčna koda razreda stvari po navodilih za internet stvari // Krog prikazuje internetne podatke // Podatki o vremenu se zbirajo v viru // Več NeoPixel vizualizira vremenske razmere // // Spremenila Becky Stern 2017 // na podlagi primera naročnine Adafruit IO

// Adafruit vlaga čas in sredstva za to odprtokodno kodo.

// Prosimo, podprite Adafruit in odprtokodno strojno opremo z nakupom // izdelkov pri Adafruit! // // Napisal Todd Treece za Adafruit Industries // Avtorske pravice (c) 2016 Adafruit Industries // Licencirano pod licenco MIT. // // Vse zgornje besedilo mora biti vključeno v kakršno koli prerazporeditev.

/************************ Adafruit IO konfiguracija ********************** *********

/ obiščite io.adafruit.com, če morate ustvariti račun, // ali če potrebujete svoj ključ Adafruit IO. #define IO_USERNAME "YourUsernameHere" #define IO_KEY "YourIOKeyHere"

/******************************* WIFI konfiguracija **************** **********************/

#define WIFI_SSID "WifiName"

#define WIFI_PASS "Wi -Fi geslo"

#include "AdafruitIO_WiFi.h"

AdafruitIO_WiFi io (IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);

/************************ Glavni program se začne tukaj ********************* **********/

#include #include #include #include

#vključi

#include #include #include

#define OLED_RESET 3

Zaslon Adafruit_SSD1306 (128, 32 in & Wire, OLED_RESET);

// ta konstanta se ne bo spremenila:

const int buttonPinA = 0; // zatiči, na katere so gumbi pritrjeni, const int buttonPinB = 16; // ta že ima vlečni upor, druga dva potrebujeta en const int buttonPinC = 2;

// Spremenljivke se bodo spremenile:

gumb intAPushCounter = 0; // števec števila pritiskov gumbov int buttonAState = 0; // trenutno stanje gumba int lastButtonAState = 0; // prejšnje stanje gumba

// Spremenljivke se bodo spremenile:

gumb intBPushCounter = 0; // števec števila pritiskov gumbov int buttonBState = 0; // trenutno stanje gumba int lastButtonBState = 0; // prejšnje stanje gumba

// Spremenljivke se bodo spremenile:

gumb int CPushCounter = 0; // števec števila pritiskov gumbov int buttonCState = 0; // trenutno stanje gumba int lastButtonCState = 0; // prejšnje stanje gumba

Niz displayForecast = "neznano";

int timerVal = 0;

unsigned long lastStartTime = 0; bool timerEnabled = 0;

AdafruitIO_Feed *padavine = io.feed ("padavine"); // nastavimo vir 'padavin'

// AdafruitIO_Feed *taskmanager = io.feed ("taskmanager"); // nastavimo vir 'taskmanager'

void setup () {

pinMode (buttonPinA, INPUT); pinMode (buttonPinB, INPUT_PULLUP); pinMode (buttonPinC, INPUT);

// SSD1306_SWITCHCAPVCC = ustvari prikazno napetost od 3,3 V interno

display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Naslov 0x3C za 128x32

// Prikaz začetne vsebine vmesnega pomnilnika na zaslonu -

// knjižnica to inicializira z začetnim zaslonom Adafruit. display.display (); zamuda (2000); // Začasno ustavite 2 sekundi

// Počisti vmesni pomnilnik.

display.clearDisplay ();

// zaženite serijsko povezavo

Serial.begin (115200);

// povežite se z io.adafruit.com

Serial.print ("Povezovanje z Adafruit IO"); io.connect (); // nastavimo rokovanje s sporočili za vir „padavine“. // funkcija handleMessage (opredeljena spodaj) // se bo klicala vsakič, ko bo sporočilo // prejeto od adafruit io. padavine-> onMessage (handleMessage);

// počakajte na povezavo

while (io.status () <AIO_CONNECTED) {Serial.print ("."); zamuda (500); }

// smo povezani

Serial.println (); Serial.println (io.statusText ());

}

void loop () {

// io.run (); je potrebno za vse skice.

// vedno mora biti na vrhu vaše zanke // funkcije. Odjemalec je povezan z // io.adafruit.com in obdeluje vse dohodne podatke. io.run ();

// preberite vhodni zatič gumba:

buttonAState = digitalno branje (buttonPinA); buttonBState = digitalRead (buttonPinB); buttonCState = digitalno branje (buttonPinC);

// primerjamo gumbState s prejšnjim stanjem

if (buttonAState! = lastButtonAState || buttonBState! = lastButtonBState || buttonCState! = lastButtonCState) {// če se je stanje spremenilo, povečajte števec if (buttonAState == LOW) {// če je trenutno stanje NIZKO, potem gumb pritisnjen je gumbAPushCounter ++; Serial.print ("število gumbov A pritisne:"); Serial.println (buttonAPushCounter); } if (buttonBState == LOW) {// če je trenutno stanje NIZKO, je bil pritisnjen gumb buttonBPushCounter ++; Serial.print ("število pritiskov gumba B:"); Serial.println (buttonBPushCounter); Serial.println ("Začetni časovnik"); timerEnabled = 1; lastStartTime = millis (); } if (buttonCState == LOW) {// če je trenutno stanje NIZKO, je bil gumb pritisnjen buttonCPushCounter ++; Serial.print ("število pritiskov gumba C:"); Serial.println (buttonCPushCounter); Serial.println ("Časovnik ustavitve"); timerEnabled = 0; }} if (timerEnabled == 1) {// povečanje časovnika le, ko je bil zagnan timerVal = (millis () - lastStartTime)/1000; }

// prikaz položaja 1 - napoved

// if (buttonAPushCounter % 3 == 0) {// display.clearDisplay (); // display.setTextSize (1); // display.setTextColor (BELO); // display.setCursor (0, 0); // display.print ("Napoved:"); // display.println (displayForecast); // display.setCursor (0, 16); // display.println ("druga vrstica"); // display.println ("primer vsebine"); // display.display (); // // zamuda (2000); //}

// prikaz položaja 1 - 1. naloga

if (buttonAPushCounter % 3 == 0) {display.setTextSize (1); display.setTextColor (BELO); display.clearDisplay (); display.setCursor (0, 0); display.println ("Raziskave - intervjuji"); display.println (); display.print ("Časovnik:"); display.println (timerVal); display.display (); }

// prikaz položaja 2 - 2. naloga

if (buttonAPushCounter % 3 == 1) {display.clearDisplay (); display.setCursor (0, 0); display.println ("Making Studio - Koda"); display.println (); display.print ("Časovnik:"); display.println (timerVal); display.display (); }

// prikaz položaja 3 - 3. naloga

if (buttonAPushCounter % 3 == 2) {display.clearDisplay (); display.setCursor (0, 0); display.println ("DSV - skica"); display.println (); display.print ("Časovnik:"); display.println (timerVal); display.display (); }

// shranimo trenutno stanje kot zadnje stanje, // naslednjič skozi zanko lastButtonAState = buttonAState; lastButtonBState = buttonBState; lastButtonCState = buttonCState;

}

// ta funkcija se pokliče vsakič, ko se prikaže sporočilo

// je prejeto od Adafruit IO. bil je priložen // viru v zgornji funkciji setup (). void handleMessage (podatki AdafruitIO_Data *) {

Napoved niza = podatki-> toString (); // shranimo prihajajoče vremenske podatke v niz

Serial.print ("prejeto <-"); Serial.println (napoved); displayForecast = napoved; // naslednji nizi shranjujejo različne besede o vremenskem poročilu IFTTT, ki sem jih do sedaj odkril String task1 = String ("Task 1"); String rain = String ("Dež"); String lightrain = String ("Lahek dež"); String rainshower = String ("Rain Shower"); Niz AMshowers = String ("AM tuši"); String rainandsnow = String ("Dež in sneg"); String snow = String ("Snow"); String snowshower = String ("snežna prha"); Niz oblačno = Niz ("Oblačno"); Niz pretežno oblačno = String ("Pretežno oblačno"); Niz delno oblačno = Niz ("Delno oblačno"); String clearsky = String ("Počisti"); String fair = String ("Fair"); Niz sončen = Niz ("sončno");

// Ti stavki if primerjajo vhodno vremensko spremenljivko s shranjenimi pogoji in ustrezno upravljajo NeoPixels.

// če je v napovedi dež if (weather.equalsIgnoreCase (dež) || prognoza.equalsIgnoreCase (lightrain) || prognoza.equalsIgnoreCase (deževni prh) || prognoza.equalsIgnoreCase (AMshowers)) {Serial.println ("padavine v današnja napoved ");

}

// če je v napovedi sneg if (weather.equalsIgnoreCase (sneg) || weather.equalsIgnoreCase (rainandsnow) || weather.equalsIgnoreCase (snežna prha)) {Serial.println ("padavine v napovedi danes");

}

// če je v napovedi sonce if (weather.equalsIgnoreCase (clearsky) || weather.equalsIgnoreCase (fair) || weather.equalsIgnoreCase (sončno)) {Serial.println ("nekakšno sonce v napovedi danes");

}

// če so v napovedi oblaki if (weather.equalsIgnoreCase (oblačno) || weather.equalsIgnoreCase (pretežno oblačno) || prognoza.equalsIgnoreCase (delno oblačno)) {Serial.println ("oblačno nebo je napovedano danes");

}

}

3. korak: Ustvarite vsebnik / lupino

Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino
Ustvarite vsebnik / lupino

Za lupino začnite tako, da določite, kakšne velikosti želite, da je vaš okvir, ali pa prenesete mojo datoteko. Ko določite velikost, lahko z MakerCaseom ustvarite postavitev vektorske datoteke.

Datoteko zaženite skozi laserski rezalnik - trajalo bi približno 5 minut. Nato sestavite lupino skupaj.

Nisem upošteval širine materiala, zaradi česar so moji gumbi težko dosegljivi. Še vedno moram najti način, kako jih pritrditi. So tudi zelo majhne, zato je težko delati z njimi.

Priporočena: