Лічильники послідовників в реальному часі: 8 кроків (із зображеннями)

Лічильники послідовників в реальному часі: 8 кроків (із зображеннями)

Зміст:

Anonim

Привіт! Деякий час тому я побачив цей проект, це досить приголомшливо, і ви повинні перевірити його. Мені сподобалося, але мій канал на YouTube не настільки популярний (принаймні, поки що: D), і я хотів показати інші дані, ніж просто абоненти YT.Bekathwia використовував у своєму проекті youtube API, що робить перегляд subcibers і деяку іншу інформацію дуже простим. А що, якщо я хочу відображати інформацію з інших сторінок (наприклад, інструкції, instagram, або мій власний веб-сайт). Я думав, що з дуже простим і коротким PHP скриптом ми можемо отримати цю інформацію з будь-якого веб-сайту, навіть якщо для нього немає API. Потім за допомогою arduino і ENC28J60 ми можемо отримати цей інформаційний сервер форми. Звичайно, найбільшим недоліком цього є те, що нам потрібен сервер для обробки цього PHP-скрипта, але не хвилюйтеся, я покажу вам деякі безкоштовні хостингу. Тому що я так люблю Instructable, що я вирішив зробити живий лічильник інструктабельних послідовників. Крім того, тому що я завжди хотів зробити яку-небудь дерев'яну обробку, я вирішив зробити так, як для мене власний кадр. У цьому проекті ми будемо використовувати модуль Ethernet ENC28J60, який дуже простий і великий. Найбільша перевага цього модуля полягає в тому, що вам не потрібно змінювати будь-який пароль або ім'я користувача до вашого WI-FI, ви можете просто підключити його і насолоджуватися лічильником. Тому, коли ви змінюєте маршрутизатор або пароль на нього, вам не потрібно турбуватися про перепрограмування вашого arduino.

Це ідеальний проект для початківців не тільки з arduino, але і з деревообробкою і пайкою!

Завтра я додам своє відео на youtube, яке мені так шкода, але зараз у мене немає мікрофона, щоб записувати звук, щоб зробити це завтра. Якщо ви хочете, ви можете підписатися на мій канал YouTube, щоб залишатися в курсі цього та інших моїх відео.

Я тільки що створив свою сторінку facebook, якщо ви хочете бути поінформованим про нові проекти і подивитися, що я роблю, не соромтеся сподобатися:

www.facebook.com/Nikodem-Bartnik-1891157704439330/

Дякую!:)

Постачання:

Крок 1: Що потрібно?

Тобто не так багато речей, які нам знадобляться, щоб працювати, список з посиланнями:

  • Arduino uno (або інший) - тому що я зробив свій кадр трохи маленьким, я повинен використовувати arduino pro mini замість uno. Ви також можете використовувати про міні, це менше і дешевше, але вам потрібно USB-> UART конвертер для завантаження програми на Pro Mini. Ці arduinos не оригінальні, але вони набагато дешевше. Вам також знадобиться 3,3V стабілізатор, тому що arduino pro mini не є одним. Arduino pro mini: GearBest Arduino UNO: GearBest
  • Модуль Ethernet ENC28J60 - це дуже простий і дуже популярний модуль Ethernet, з яким легко працювати з Gearbest
  • ЖК-дисплей 7 сегментів відображає 4 символи (колір не має значення, але тому, що інструктор жовтий, я купив жовтий)
  • Деякі кабелі - можна купити комп'ютерну виту пару і отримати кабелі від неї
  • Кабель Ethernet і телефонний зарядний пристрій - звичайний ететерний кабель і старий зарядний пристрій для смартфонів у кожного є один Gearbest
  • Деякі дерев'яні або фоторамки - це буде корпус для нашого проекту
  • Деякі інструменти

Крок 2: Підключення

Для більшої частини мого проекту я зробив друковану плату (printable circuit borad), але цього разу я подумав, що для починаючих буде набагато простіше зробити її з arduino uno і деякими кабелями. Ви можете підключити його з макетами або припою, якщо хочете, але це не обов'язково. Резистори у вищезгаданій схемі фріцінгу мають 100 Ом. Не забувайте підключати ENC28J60 до 3.3V не до 5V.

Тому що я знайшов мій корпус трохи до малого, щоб відповідати arduino uno Я вирішив використовувати Pro Mini, це менше і дешевше, так що це також великий плюс. Вище можна знайти обидві схеми підключення

Крок 3: PHP скрипт

Можна сказати, що цей сценарій не оптимізований, і я міг би зробити щось краще, наприклад, знайти елемент span по id або DOM. Але я хотів, щоб це було якомога простіше. Так що тут я сподіваюся, що ви зрозумієте це. Я написав деякі коментарі, щоб зробити його більш прозорим. Він просто шукає в джерелі веб-сайту конкретний рядок і шукає його позиції, а потім повертає число послідовників з $% # до числа, щоб полегшити для arduino знайти номер у відповіді HTTP. Вам просто потрібно змінити посилання на одну з ваших інструментів у файлі file_get_contents ().

<? php

<? php

$ html = file_get_contents ('http://www.instructables.com/id/555-Useless-Machine/'); // тут ви можете додати посилання на ваш інструктор, незалежно від того, який $ startposition = strpos ($ html, ")"); // тут ми шукаємо елемент span у джерелі сторінки, який містить наших послідовників $ endposition = strpos ($ html,")", $ startposition + 37); echo" $% # "; // роздруковуємо це як початкову опорну точку echo substr ($ html, $ startposition +37, $ endposition - $ startposition -37); // тут друкуємо наш послідовники number echo "$% #"; // ми роздруковуємо це як кінцеву опорну точку

?>

Крок 4: Кілька слів про хостинг

Багато хто з вас може мати проблеми з тим, де знайти місце для зберігання PHP скрипта. Якщо у вас є веб-сайт, просто поставте його там, якщо ні, продовжуйте читати. Найпростіший і найдешевший (але не найкращий) варіант - безкоштовний хостинг на хостингу. Це не найкращий хостинг у цьому всесвіті, але він безкоштовний і відмінно працює тільки для одного сценарію (навіть для невеликого веб-сайту, я мав свій веб-сайт вже більше року). Великим плюсом є також те, що вони надають безкоштовні субдомени, тому вам не потрібно витрачати гроші на домен. Ось посилання на hostinger:

Посилання на хостера

Це повністю безкоштовне, і вам просто потрібно створити обліковий запис, якщо у вас виникли проблеми, не витрачайте час на звернення до їх довідкового центру і просто розмістіть коментар прямо там (це має бути набагато швидше). Незважаючи на всі недоліки, я вважаю, що цей хостинг є найкращим варіантом для цього проекту.

Крок 5: Код Arduino

Код Arduino читає дані з PHP-скрипта завдяки нашим маркерам, які знають, де починається номер послідовників і де він закінчується. Вона також має дуже простий код для відображення сегмента. Щоб отримати номер, який Ви можете проінформувати, Ви повинні змінити посилання на один з Ваших інструкцій, також не забудьте змінити посилання на Ваш сервер в коді arduino (на початку), а в середині коду arduino потрібно змінити це:

ether.browseUrl (PSTR ("/"), "counter.php", веб-сайт, my_callback)

"counter.php" до вашого імені сценарію php.

Нижче наведено весь код, а також.zip

// Демо використовуйте DHCP і DNS для виконання запиту веб-клієнта.

// 2011-06-08

#включати

#define LED_A A0 ​​# дефініція LED_B A1 # дефініція LED_C A2 # дефініція LED_D 2 # дефініція LED_E 3 # дефініція LED_F 4 # дефініція LED_G 5 // # define LED_DP 7

#define LED_CHAR1 6 #define LED_CHAR2 7 #define LED_CHAR3 8 #define LED_CHAR4 9

Струни послідовників;

// Ethernet-інтерфейс mac address, повинен бути унікальним у статичному байті локальної мережі mymac = {0x74,0x69,0x69,0x2D, ​​0x30,0x31};

байт Ethernet:: буфер 500; статичний таймер uint32_t; // додати www перед доменним ім'ям без субдомену // const char website PROGMEM = "www.nikodembartnik.pl";

// коли ви використовуєте субдомен, не використовуйте www befor ім'я субдомену const char website PROGMEM = "livecounter.esy.es";

// викликається, коли запит клієнта є повним статичним недійсним my_callback (статус байта, слово off, слово len) {Ethernet:: буфер off + 400 = 0; Рядок res = (const char *) Ethernet:: буфер + off; Serial.println (res); int start_position = res.indexOf ("$% #"); String followers_number = res.substring (start_position + 3); followers_number = followers_number.substring (0, followers_number.indexOf ("$% #")); followers_number.trim (); followers = followers_number; Serial.print (номер послідовників); Serial.println ();

//Serial.println ("…"); }

void setup () {

pinMode (LED_A, OUTPUT); pinMode (LED_B, OUTPUT); pinMode (LED_C, OUTPUT); pinMode (LED_D, ВИХІД); pinMode (LED_E, ВИХІД); pinMode (LED_F, OUTPUT); pinMode (LED_G, OUTPUT); pinMode (LED_CHAR1, OUTPUT); pinMode (LED_CHAR2, OUTPUT); pinMode (LED_CHAR3, OUTPUT); Serial.begin (57600);

if (ether.begin (sizeof Ethernet:: buffer, mymac) == 0) Serial.println ("Не вдалося отримати доступ до enc28j60"); if (! ether.dhcpSetup ()) Serial.println (F ("Не вдалося DHCP"));

ether.printIp ("IP:", ether.myip); ether.printIp ("GW:", ether.gwip); ether.printIp ("DNS:", ether.dnsip);

// # if 1 // використовувати DNS для вирішення IP-адреси веб-сайту, якщо (! ether.dnsLookup (website)) Serial.println ("DNS не вдалося"); Serial.println ("# 1"); / * #elif 2 // якщо веб-сайт - це рядок, що містить IP-адресу замість доменного імені, // тоді використовуйте його безпосередньо. Примітка: рядок не може бути в PROGMEM. char websiteIP = "95.211.80.4"; ether.parseIp (ether.hisip, websiteIP); Serial.println ("# 2"); #else // або надають числову IP-адресу замість байта рядка hisip = {95,211,80,4}; ефір.копіяIp (ефір.ісіп, hisip); Serial.println ("# 3"); #endif * / ether.printIp ("SRV:", ether.hisip); }

void loop () {ether.packetLoop (ether.packetReceive ()); if (millis ()> timer) {// оновлюйте кожні 5 хвилин timer = millis () + 1000 * 60 * 5; ether.browseUrl (PSTR ("/"), "counter.php", веб-сайт, my_callback); } для (int a = 0; a <4; a ++) {show_number (a + 1, послідовники. substring (a, a + 1).toInt (), 0); затримка (1); }}

void show_number (int char_number, int номер, int decimal_point) {

// вимкнення всіх сегментів відображення

digitalWrite (LED_A, HIGH); digitalWrite (LED_B, HIGH); digitalWrite (LED_C, HIGH); digitalWrite (LED_D, HIGH); digitalWrite (LED_E, HIGH); digitalWrite (LED_F, HIGH); digitalWrite (LED_G, HIGH);

digitalWrite (LED_CHAR1, LOW); digitalWrite (LED_CHAR2, LOW); digitalWrite (LED_CHAR3, LOW);

// включення світлодіодів

if (число == 0 || номер == 2 || номер == 3 || номер == 5 || номер == 6 || номер == 7 || номер == 8 || номер == 9) { digitalWrite (LED_A, LOW); } if (число == 0 || номер == 1 || номер == 2 || номер == 3 || номер == 4 || номер == 7 || номер == 8 || номер == 9) {digitalWrite (LED_B, LOW); } if (число == 0 || номер == 1 || номер == 3 || номер == 4 || число == 5 || номер == 6 || номер == 7 || номер == 8 | | number == 9) {digitalWrite (LED_C, LOW); } if (номер == 0 || номер == 2 || номер == 3 || номер == 5 || номер == 6 || номер == 8 || номер == 9) {digitalWrite (LED_D, LOW)); } if (число == 0 || номер == 2 || номер == 6 || номер == 8) {digitalWrite (LED_E, LOW); } if (число == 0 || номер == 4 || номер == 5 || номер == 6 || номер == 8 || номер == 9) {digitalWrite (LED_F, LOW); } if (число == 2 || номер == 3 || номер == 4 || номер == 5 || номер == 6 || номер == 8 || номер == 9) {digitalWrite (LED_G, LOW)); } / * if (decimal_point> 0) {LED_DP_PORT & = ~ LED_DP; } * / if (char_number == 1) {digitalWrite (LED_CHAR1, HIGH); } else if (char_number == 2) {digitalWrite (LED_CHAR2, HIGH); } else if (char_number == 3) {digitalWrite (LED_CHAR3, HIGH);

} else if (char_number == 4) {digitalWrite (LED_CHAR4, HIGH);

} }

Крок 6: Деревообробка

Я ніколи нічого не робив у деревині, очікував, що годувальник птахів, але це було так давно. І саме тому я вирішив створити дерев'яний каркас для цього проекту. Додатково зовнішній вигляд сирого дерева, це так красиво! І цей тип деревини відповідає усім:)

Я почав шліфувати весь ліс, який у мене є для цього проекту. Цей каркас не був спроектований будь-яким способом, я просто взяв якийсь ліс і перевірив, наскільки великим він повинен бути, щоб відповідати всім речам всередині. Це дуже просто, тільки 4 бруски вирізані на 45 градусів і склеєні. Потім, на вершині я поставив шматок фанери 4мм, але раніше я розмелював отвір не на виході, я просто жив тут, так невелика кількість деревини, щоб дисплей висвітлювався через нього. Це було так легко зробити з ЧПУ млин, але якщо у вас немає одного, і ви вручну талановитих, ви можете спробувати зробити це з інструментом dremel або щось подібне, але це буде дуже важко я думаю (більше про моєму чпу машину можна прочитати тут). Коли все було готово, я приклеїла фанеру до рамки і поставила в неї дисплей і всю електроніку. Наприкінці я приклею інструкторну смугу на фанеру, виглядає дивно: D

Сильфон GCODE для фрезерування. Ви можете пробити отвір для відображення, якщо хочете. Я використовую фанеру 4мм для неї, а глибина фрезерування - 3.6мм. X = 0 і Y = 0 знаходиться в центрі відображення.

Під час цього невеликого дерев'яного проекту для мене найкориснішим інструментом був дремель, дриль і пила. Крім того, ця пластикова річ, щоб вирізати ідеально під кутом 45 градусів, без них це може бути досить складно

Крок 7. Завершення

Над дисплеєм я додаю цей інструктабельний значок, який я виграв у конкурсі (Thanks Instructable). Тому що я люблю сировину, я вирішив не малювати її нічим і залишити як є. Цей логотип на вершині виглядає так добре:) Я також пробурив маленькі отвори в нижній частині кадру, щоб покласти в нього Ethernet і силові кабелі. Отвір для дисплея настільки щільний, що я не використовував жодного клею або щось подібне, щоб поставити його на місце, arduino і ENC28J60 просто лежить у кадрі.

Крок 8: Висновок

Наприкінці я просто хочу подякувати вам за читання. Не забудьте залишити коментар, слідувати за мною і проголосувати за мій проект! Дуже дякую! Якщо ви маєте будь-яке питання, залиште коментар або напишіть мені повідомлення, і я повторюю якнайшвидше.