Оповещения о начале стрима на Twitch.tv с помощью GSM модуля M590

Источник: Оповещения о начале стрима с M590

Аудиоплеер на Arduino

Posted: Февраль 10, 2016 in Arduino

Мою статью опубликовали на сайте Паяльник. Она даже заняла утешительное 4 место и принесла мне 150 рубчиков;)

Взглянем сперва на упаковку. Вид спереди:

DSC_0001_1

И вид сзади:

DSC_0002

Уже видим внутри инструкцию на русском языке, что является очень хорошим знаком. Сзади на упаковке есть справочная информация о маркировке резисторов, схематическом изображении диодов, транзисторов… А также подписаны катоды и аноды конденсаторов и светодиодов. Такое даже можно сохранить где-нибудь на столе под стеклом или просто повесить на стенку. Давайте уже вскроем ее:

DSC_0003

Набор поистине королевский. Тут и инструкция, и подписаны номиналы резисторов, и батарейка типа крона, и даже олово для пайки. К этому красному пятну в пакетике снизу мы ещё вернемся.

К вопросу о стоимости исправления ошибки красноречиво говорит следующий кадр

DSC_0008

Вроде тут все написано по-китайски, но я никогда ещё не видел в китайских радио конструкторах такого подробного описания резисторов. Может это какой-то спец заказ от Мастер КИТа?

DSC_0004_1

Собственно сам процесс пайки довольно прямолинеен, без каких-либо подводных граблей. Интересно как ЖК дисплей подключается к плате. Два маленьких эластичных розовых шлейфа с контактами, разделенными диэлектриками, устанавливаются снизу и сверху дисплея. Сам дисплей устанавливается по ключу, то есть маленькая выпуклость должна быть справа.

DSC_0006_1

По наклеенной картинке на переднюю часть мультиметра видно, что он не поддерживает прозвонку.

DSC_0007

И действительно, в комплекте нет динамика. Самая сложная часть — это собрать крутилку. Вот тут нам и пригодится эта красная жидковатая субстанция. Сначала надо ее залить в пазы для пружинок, потом вставить пружинки. Это нужно для того, чтобы они не выпали, когда будем опускать крутилку на переднюю панель. Лучше всего этот процесс продемонстрируем картинка из официального руководства по сборке

Сборка узла переключателя

И вот цифровой мультиметр обрел свой окончательный вид

DSC_0009

Тринадцать лет назад я написал свою первую статью в журнал Хакер и назвал ее «Замученный взлом». Тогда мне показалось, что уж больно много телодвижений приходится сделать, чтобы убрать окошко с напоминанием о регистрации программы. Но редакция журнала журнала изменила название на «Регистрируем Shadow Security Scanner». Кстати, ссылка жива и по сей день https://xakep.ru/2003/02/28/17770/, только в авторах я теперь не числюсь 😦 После такого «головокружительного» успеха, я написал еще одну большую статью, где регистрировал все что стояло у меня на компьютере. В те времена защита многих программ оставляла желать лучшего, и возможностей InqSoft Sign 0f Misery хватало за глаза. Только эта статья, к сожалению, так и не вышла в свет, и я потерял пароль к почте, с которой ее отсылал.

На всякий случай приведу тут эту статью целиком, вдруг её захотят закрыть

Конечно, всегда (ну или почти всегда 🙂 можно сбегать на Astalavista. Но сколько удовольствия самому попробовать
взломать свою ненаглядную ShareWare, которая последнее время ведет себя как капризный ребенок и постоянно просит что-нибудь купить.

Будем ломать Shadow Security Scanner 3.43. Для этого я использую три интересные программы, две из которых всем прекрасно известны — это Regmon и уже полюбившийся всем
Restorator, а третья это Sign 0f
Misery
.

SSS — типичная Trial версия, которая будет по-хорошему работать 15 дней, а потом потребует за свою работу денежки. Для начала посмотрим в каком ключе реестра идет отчет времени. Врубаем Regmon, на панели инструментов жмем Filter, и в появившемся диалоговом окне в поле Include вводим SSS. Запускаем SSS.exe, когда появится окно с просьбой
зарегистрироваться, идем в Regmon, ищем там строку с SetValueEx и хорошо запоминаем адрес, куда SSS пишет свое время :).

Так, хорошо, теперь немного трепанации. Запускаем Restorator и открываем в нем нашу программу. Видим слева RCData. Заходим туда и ищем описание формы с названием TNagForm. Это и есть это злополучное окно с напоминанием. Лично я провел все утро в неимоверных потугах  :), но по-моему лучшим вариантом остается следующий (но это конечно же только по-моему):
там есть объект RxLabel1, и у него есть событие OnClick. Этим событием мы потом очень удачно воспользуемся, а пока установим этому событию значение OnClick = RxSpeedButton1Click — это событие происходит при нажатии на кнопку Continue.
Добавим этой форме еще один параметр «WindowState = wsMaximized» — это чтобы наше окно появлялось максимизированным (растянутым на весь экран :). А для RxLabel1 установим следующие параметры: Left = 0, Top = 0, Width = 8000, Height = 6000,
это чтобы метка была растянута на все окно наверняка.

Ну а теперь гвоздь сегодняшнего взлома, прошу любить и жаловать его величество
InqSoft Sign 0f Misery. Его можно взять с официального сайта автора
http://inqsoft.tsx.org или http://kickme.to/inqsoft. Вот что пишут про свою программу авторы:
«Первоначально InqSoft Sign 0f Misery разрабатывался как эффективный инструмент для продления «жизни» демонстрационных и незарегистрированных версий программ. Вобрав в себя множество приемов борьбы с ограничениями времени работы shareware-программ, подавления NAG Screen’ов и активизации заблокированных управляющих элементов, программа стала новым словом в преодолении ограничений в программах, распространяемых по принципу
shareware».

У этой программы туева хуча всяких возможностей! На досуге
поэкспериментируйте! Ну а сейчас от нее потребуется лишь
ничтожная часть ее возможностей 😦 . Так, я вижу, что после такого заманчивого предложения ты уже успел скачать ее, установить и увидев ее тебе уже не до моей писанины 🙂 .

Но ближе к телу. Сделаем хороший скрипт, для этого в профессиональном наборе команд
длавим «удалить ключ реестра», и в появившемся диалоговом окне в ветви реестра отмечаем HKEY_CLASSES_ROOT, в имени ключа то, что нам нашел Regmon и я попросил хорошо запомнить (то бишь
CLSID\{07021D7F-354C- C444-345F-194C8C480EC3}). Прекрасно, теперь в стандартном наборе команд выбираем «запустить программу» и вводим только имя файла SSS.exe . Теперь там же выбираем «Ожидать появления окна с указанным текстом в заголовке» и вводим
«Unregistered». Помните я говорил, что мы удачно воспользуемся событием
OnClick? Так вот, последней командой в нашем скрипте будет «Эмуляция нажатия кнопок мыши». Выбираем «Левая кнопка -> Нажать».
Теперь в главном меню находим команду для компиляции и аккуратно компилируем наш скрипт, а перед этим в меню Проект можно задать его описание, типа «КрЯкЕР — Вася Пупкин».

Все!!! Конечно, это очень замученный «взлом», но я уверен что ты сможешь предложить что-нибудь получше, главное дерзайте.

На AliExpress продается маленький и недорогой модуль радиоуправления с четырьмя каналами. Называется он IC 2262/2272

80071-IC-2262-2272-315MHZ-4-Channel-Wireless-Remote-Control-Kits-4-key-For-Arduino-Free

Такой модуль идеально подойдет для машинки на радиоуправлении. Один канал пойдет на левые колеса, один на правые, один на фары и один на сигнал. Управлять моторчиками нужно будет, естественно, через транзисторы. Причем можно сигнал зашифровать, чтобы он случайно не управлял соседским модулем, если сосед тоже себе такой закажет.

Хочется ли вам сделать свой дом немного умнее? Всем привет! Есть простая вещь, дающая почувствовать, что вы живете в мире высоких технологий, а именно — управление бытовыми приборами через смартфоны. Делается это с помощью микроконтроллеров и, в нашем случаем, реле. Создадим простой скетч в Протеусе, где будем моделировать управление обычной лампой, питающейся из розетки 220В, с помощью Ардуино.

dispenser

Реле старо как мир, принцип его работы основан на магните, но он все так же хорошо делает свое дело — отделяет силовую часть от логической. Скетч чрезвычайно прост, сейчас я его немного поясню. Здесь в качестве смартфона выступает виртуальный терминал. В реальной жизни можно написать программку для айфона или андроида, которая будет подключаться к bluetooth модулю Ардуино и посылать команды. Команды могут быть любыми, в данном случае у меня «1» для включения, «2» для выключения. Программа просто слушает последовательный порт и посылает сигнал на транзистор, который открывается и подает напряжение на реле, которое в свою очередь срабатывает и включает/выключает лампу.

#define RELAY_PIN 13
int m_state = -1;

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);

  Serial.begin(9600);
}

void loop() {
   while(m_state == -1){
    m_state = Serial.read();
  }
  switch(m_state){
    case '1' : 
      digitalWrite(RELAY_PIN, HIGH);
      break;
    case '2' : 
      digitalWrite(RELAY_PIN, LOW);
      break;
    default:
      break;
  }
 
  m_state = -1;
}

Напишем простенькое приложение, которое будет показывать нам температуру в комнате. В качестве аппаратной платформы возьмем Arduino и датчик влажности DHT11. Подключим библиотеку DHT и накидаем такой скетч

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(2000);
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  Serial.println(t);
}

Он шлет температуру на последовательный порт. Теперь надо бы как-нибудь ее считывать и отображать. Но что-то не хочется ставить тяжеловесное решение вроде Visual Studio, писать программу на каком-нибудь WPF или еще круче — поднять веб сервер и отображать данные на сайте в реальном времени с помощью каких-нибудь веб сокетов… К счастью, существует замечательная платформа Processing. Более того, IDE для Arduino безбожно передирался с этого самого процессинга. В двух словах, это еще один С-образный язык, который позволяет легко делать несложные графики и анимации. Но самая интересная для нас фишка — это возможность взаимодействия с COM-портом. Можно сделать так, что цвет фона будет меняться в зависимости от температуры, но так как комнатная температура у меня не подвержена большим скачкам, что я решил просто выводить показание температуры на черном фоне. А вот и сама программа

import processing.serial.*; 

Serial port; 
float temperature =0; 

void setup() 
{ 
  size (200,200); 
  port = new Serial(this, "COM3", 9600); 
  port.bufferUntil('\n');
}

void draw () 
{ 
  background(0, 0, 0);  
  textSize(32);
  text(nf(temperature, 2, 1), 60, 100); 
} 

void serialEvent (Serial port) 
{ 
  temperature = float(port.readStringUntil('\n')); 
  println(temperature);
}

В конце увидим что-то похожее на это

Безымянный