• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

fidget cube на esp8266 своими руками

28 августа, 2018

Для изготовления 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 готов. Подробнее в красках можно посмотреть в видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация оповещения о надвигающимся дожде в Home Assistant
  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·