Для изготовления fidget cube нам понадобятся:
Esp8266 wemos: http://ali.pub/2i2dgk
Wemos battery shield : http://ali.pub/2q7pvt
Аккумулятор: http://ali.pub/2q7pmh
Макетные платы: http://ali.pub/2q7q6w
Переключатель: http://ali.pub/2q7p6x
Белые квадратные кнопки: http://ali.pub/2q7pb0
Кнопки: http://ali.pub/2q7pcr
Концевики: http://ali.pub/2q7pfh
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Все наверное слышали про spinner, он же fidget spinner. Это гаджет который долго крутится, и якобы снимает стресс. Так же многие из вас слышали про fidget cube – это куб с кнопками также призван снимать стресс… Вы его вертите в руках нажимая на кнопки и тем самым успокаиваетесь.
В этой статье я покажу как сделать самостоятельно такой Куб, да еще и сделать его умным. Чтоб он отслеживал нажатия на кнопки и подсчитывал их. Тем самым можно анализировать насколько Вы нервный человек и как сильно нервничаете в разных ситуациях.
Первое что нам понадобится указано вначале статьи и собственно показано на фото ниже.
Переключатели и кнопки
Все эти концевики переключатели и кнопки можно найти или разобрать со старого сломанного оборудования, либо просто купить в магазине, ссылки на магазин вначале статьи.
Макетная плата pcb
Данных плат 6 14-14 размером, из данных плат будут состоять грани нашего куба.
Esp8266 “мозг куба”
В данном примере я использую wemos d1 mini плата построенная на esp8266
Battery shield
Это модуль для зарядки li-po аккумуляторов и преобразует 3,7v в 5v стабильного питания для wemos платы.
Аккумулятор li-po
Аккумулятор li-po литий-полимерный, с коннектором Xhr-2p 2.54
Все данные компоненты будут располагаться вот таким образом:
Плата Wemos имеет 9 контактов от D0 до D8.
D0 и D4 не могут сбрасываться при загрузке.
D8 по умолчанию отключается, поэтому не удается обнаружить нажатую кнопку с землей.
Важно!! если нажать кнопку подключенную к D3 при загрузке, то плата войдет в программный режим. У меня так и получилось, я подключил к D3 концевики и они всегда подавали сигнал нажатой кнопки, в результате esp8266 не загружалась.
Так провода припаиваются к первой кнопке “СТОРОНА 1”:
То-есть три провода, средний это земля, а два боковых будут припаиваться вместе и подключаться к одному пину esp8266
Сторона 2:
Правда тут не очень понятно) что и куда) Вот еще для примера, тут вроде понятнее)
Тут нужно землю всех кнопок связать между собой, и плюсы всех кнопок тоже связать между собой, должно получиться на выходе 2 провода.
Сторона 3:
Подключается как и сторона 2, но более понятно глазу.
Сторона 4:
В отличии от 2 стороны и от третьей, здесь будут обе кнопки работать. Поэтому в схеме подключения земля будет общая а плюсы разные у кнопок и подключаться будут к разным пинам ардуино.
Сторона 5:
Ну а здесь получается что кнопка будет якобы всегда нажата, и будет размыкаться только тогда когда мы разом на концевики нажмем на все сразу.
В итоге после совмещения сторон получится вот так:
Сам battery shield подключается к wemos вот таким образом:
Схема подключения выглядит таким образом:
Lipo Charge Board 5V -> WeMos 5V
Lipo Charge Board GND -> WeMos GND -> Все минусовые контакты всех сторон
WeMos D1 -> Сторона 2 + pin WeMos D2 -> Сторона 5 + pin WeMos D3 -> Сторона 3
trigger pin WeMos D5 -> Сторона 4
кнопка 1 WeMos D6 -> Сторона 4
кнопка 2 WeMos D7 -> Сторона 1 двумя плюсами
После подключения давайте загрузим скетч: https://yadi.sk/d/Vrk-fbfa3ae5vb
Сам скетч:
#define APSSID "Your AP name" // your network SSID (name) #define APPASS "Your AP password" // your network password #define CHANNELID 0 // your thingspeak channel ID #define WRITEAPIKEY "YOURAPIKEY" // your thingspeak write API key #define DATAMININTERVAL 15 // 15 seconds #include "ThingSpeak.h" // *********************************************************************************************************** // This example selects the correct library to use based on the board selected under the Tools menu in the IDE. // Yun, Ethernet shield, WiFi101 shield, esp8266, and MXR1000 are all supported. // With Yun, the default is that you're using the Ethernet connection. // If you're using a wi-fi 101 or ethernet shield (http://www.arduino.cc/en/Main/ArduinoWiFiShield), uncomment the corresponding line below // *********************************************************************************************************** //#define USE_WIFI101_SHIELD //#define USE_ETHERNET_SHIELD #if !defined(USE_WIFI101_SHIELD) && !defined(USE_ETHERNET_SHIELD) && !defined(ARDUINO_SAMD_MKR1000) && !defined(ARDUINO_AVR_YUN) && !defined(ARDUINO_ARCH_ESP8266) #error "Uncomment the #define for either USE_WIFI101_SHIELD or USE_ETHERNET_SHIELD" #endif #if defined(ARDUINO_AVR_YUN) #include "YunClient.h" YunClient client; #else #if defined(USE_WIFI101_SHIELD) || defined(ARDUINO_SAMD_MKR1000) || defined(ARDUINO_ARCH_ESP8266) // Use WiFi #ifdef ARDUINO_ARCH_ESP8266 #include <ESP8266WiFi.h> #else #include <SPI.h> #include <WiFi101.h> #endif char ssid[] = APSSID; // your network SSID (name) char pass[] = APPASS; // your network password int status = WL_IDLE_STATUS; WiFiClient client; #elif defined(USE_ETHERNET_SHIELD) // Use wired ethernet shield #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; EthernetClient client; #endif #endif unsigned long counter_begin_time; int switch1_counter = 0; int switch2a_counter = 0; int switch2b_counter = 0; int btngrp3_counter = 0; int btngrp4_counter = 0; int btngrp5_counter = 0; int switch1_status = 1; int switch2a_status = 1; int switch2b_status = 1; int btngrp3_status = 1; int btngrp4_status = 1; int btngrp5_status = 1; void setup() { Serial.begin(115200); Serial.println("\n\nInitiating..."); pinMode(D1, INPUT_PULLUP); pinMode(D2, INPUT_PULLUP); pinMode(D3, INPUT_PULLUP); pinMode(D5, INPUT_PULLUP); pinMode(D6, INPUT_PULLUP); pinMode(D7, INPUT_PULLUP); #ifdef ARDUINO_AVR_YUN Bridge.begin(); #else #if defined(ARDUINO_ARCH_ESP8266) || defined(USE_WIFI101_SHIELD) || defined(ARDUINO_SAMD_MKR1000) WiFi.begin(ssid, pass); #else Ethernet.begin(mac); #endif #endif ThingSpeak.begin(client); cleanup_counter(); } void loop() { read_switch_and_button(); int interval = (millis() - counter_begin_time) / 1000; if ( ((interval >= DATAMININTERVAL) || (interval < 0)) && WiFi.enableAP(true) ) { ThingSpeak.setField(1, switch1_counter); ThingSpeak.setField(2, switch2a_counter); ThingSpeak.setField(3, switch2b_counter); ThingSpeak.setField(4, btngrp3_counter); ThingSpeak.setField(5, btngrp4_counter); ThingSpeak.setField(6, btngrp5_counter); ThingSpeak.setField(7, interval); if (ThingSpeak.writeFields(CHANNELID, WRITEAPIKEY) == OK_SUCCESS) { Serial.println("Write success."); // cleanup_counter(); // WiFi.enableAP(false); } else { Serial.println("Write failed."); } } } void cleanup_counter() { counter_begin_time = millis(); switch1_counter = 0; switch2a_counter = 0; switch2b_counter = 0; btngrp3_counter = 0; btngrp4_counter = 0; btngrp5_counter = 0; } void read_switch_and_button() { int tmp = digitalRead(D7); if (tmp != switch1_status) { switch1_counter++; switch1_status = tmp; } tmp = digitalRead(D6); if (tmp != switch2a_status) { switch2a_counter++; switch2a_status = tmp; } tmp = digitalRead(D5); if (tmp != switch2b_status) { switch2b_counter++; switch2b_status = tmp; } tmp = digitalRead(D3); if (tmp != btngrp3_status) { btngrp3_counter++; btngrp3_status = tmp; } tmp = digitalRead(D2); if (tmp != btngrp4_status) { btngrp4_counter++; btngrp4_status = tmp; } tmp = digitalRead(D1); if (tmp != btngrp5_status) { btngrp5_counter++; btngrp5_status = tmp; } }
В этом скетче нас интересуют только следующие поля:
#define APSSID “Имя wi-fi” // Имя вашей wi-fi сети
#define APPASS “Пароль” // Пароль от wi-fi
#define CHANNELID 0 // Id канала в сервисе thingspeak
#define WRITEAPIKEY “YOURAPIKEY” // Writeapikey в сервисе thingspeak
а теперь в кранце где посмотреть id канала в thingspeak.
Для этого заходим на сайт https://thingspeak.com/
Далее создаем свой канал. и когда вы создадите канал и зайдете в него , то можно будет увидеть id канала примерно вот так:
А Writeapikey можно посмотреть в вкладке API keys:
Ну а сами компоненты под кнопки создавать вот так и вот здесь:
На этом собственно все. fidget cube готов. Подробнее в красках можно посмотреть в видео: