Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Двусторонний пейджер старой школы с Arduino

Компоненты и расходные материалы

Глобальная SIM-карта для Интернета вещей с голограммой
× 1
Arduino UNO
× 1
Arduino GSM shield V2
× 1
Adafruit LCD Shield Kit с дисплеем 16x2 символов - только 2 контакта использовал! - СИНИЙ И БЕЛЫЙ
× 1
Коробка проекта Hammond 4,7 x 2,6 x 1,4 полупрозрачный синий
× 1

Приложения и онлайн-сервисы

Маршрутизатор данных голограммы

Об этом проекте

Введение

Стремясь воссоздать славу конца 90-х и начала 2000-х годов, я подумал, что попробую сделать свой собственный двусторонний пейджер, такой же, как раньше использовал Jay-Z! Но я обнаружил, что эта идея более полезна, чем на первый взгляд - я разработал ее так, чтобы ее могли использовать дети вместо настоящего мобильного телефона, или ее можно было использовать как кнопку «SOS» для тех, кто работает в одиночестве на открытом воздухе. или даже заниматься спортом (если он был немного меньше). И последние несколько недель это устройство всегда было включено в моей гостиной, где мы с женой оставляем друг другу глупые сообщения.

Описание:этот проект отправляет и принимает текстовые (SMS) сообщения через Arduino с сотовым модемом, встроенным в небольшой корпус с ЖК-дисплеем и простыми кнопками управления.

Обратите внимание, что код этого проекта включает возможность запуска системы через последовательный интерфейс, поэтому вы можете создать и использовать версию этого проекта, даже если у вас нет ЖК-экрана!

Выбор оборудования

У меня был Arduino GSM Shield, который я хотел использовать в этом проекте, вместе с SIM-картой от Hologram, поэтому объединение с Arduino UNO имело большой смысл. Adafruit делает экран ЖК-дисплея со встроенными кнопками, и, поскольку он использует шину I2C, он использует только два контакта на Arduino для дисплея и пять кнопок, оставляя много места для будущей настройки.

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

  • Экран ЖК-дисплея:аналоговые 4 и 5 контактов для шины I2C (вместе с питанием + 5 В и землей [но только земля рядом с контактом Vin, а не рядом с контактом 5 В])
  • Экран GSM:контакты 2 и 3 для программного последовательного порта и контакт 7 для сброса питания (очевидно, плюс питание и земля, хотя я никогда не видел подробностей об этом в документации).

Все остальное можно расширять бесплатно! К шине I2C можно было добавить и другие устройства.

Во время разработки система работала нормально, используя только USB-питание от моего ноутбука для отправки и получения SMS, хотя я подозреваю, что для надежного использования сотовых данных GPRS потребуется больше энергии.

Сотовая связь

Hologram предоставляет услугу сотовой передачи данных, которая работает с любым устройством, поддерживающим SIM-карту. После регистрации моей SIM-карты для обслуживания всего одним дополнительным щелчком я смог назначить ей номер телефона в моем коде города по своему выбору. Еще одна особенность, которая делает этот проект отличным, например, детским коммуникатором, заключается в том, что поддерживать услугу в активном состоянии настолько недорого (0,40 доллара США в месяц), и я могу приостановить ее в любое время, если перестану пользоваться устройством. Как и в большинстве тарифных планов для мобильных телефонов, получение текстовых сообщений бесплатное, а отправка - по 0,19 доллара за каждое. В будущем эту стоимость можно будет снизить еще больше, используя подключение для передачи данных к облачной службе Hologram, где сообщение может автоматически перенаправляться на бесплатную службу SMS. 0,60 доллара США за один мегабайт данных принесут вам много крошечных текстовых сообщений.

По какой-то причине, даже если экран GSM в конечном итоге работал правильно, он не мог правильно запустить GSMScanner и GSMModem getIMEI () функции, предназначенные для первоначальной настройки и устранения неполадок. Довольно вводит в заблуждение! Функции передачи данных SMS и GPRS работали нормально, поэтому, если кто-нибудь знает, почему модем все еще не может сообщить мне свой собственный номер IMEI, я хотел бы услышать ваши идеи.

Код и интерфейс

У Adafruit есть отличные инструкции, чтобы показать экран LCD в действии, а у Arduino есть хорошее руководство по началу работы с экраном GSM, которое демонстрирует важные функции, поэтому большая часть моего кода была основана на этих двух наборах функций, плюс добавление моих собственных пользовательский интерфейс.

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

Просто сложив три платы друг на друга с помощью действующей SIM-карты (даже в вашем собственном телефоне!) И прошив код, указанный ниже, вы получите устройство для обмена текстовыми сообщениями, которое работает следующим образом:

  • Включите его, он загрузится и сообщит вам, когда сеть будет подключена.
  • Левая кнопка:перейти на «главный» экран.
  • Правая кнопка:подтверждение во входящем сообщении, позволяющее прийти следующему сообщению, если оно есть. Также затемняет экран, если нет текущего сообщения.
  • Кнопки вверх / вниз:прокрутите список заранее запрограммированных сообщений для отправки. Я думаю, вы можете поместить в код столько, сколько захотите; Я начал с четырех.
  • Кнопка выбора:отправка текущего выбранного сообщения.

Вот и все! Входящие сообщения отображаются автоматически независимо от того, какое меню активно на устройстве, и даже включается подсветка, если она была выключена.

Следующим логическим шагом может быть добавление меню номеров адресатов для исходящих сообщений или просто автоматический ответ на последнее полученное сообщение (с помощью remoteNumber () функция).

Финальная сборка

Чтобы вырезать отверстия в коробке для проекта, я использовал сверло для обычных отверстий, а затем многоцелевое сверло Dremel (# 561) с направляющей (# 565) для более крупных вырезов. Использование дополнительных досок и зажимов для изготовления приспособления для направления Dremel позволило бы получить более чистые линии, но я достаточно доволен тем, что сделал от руки. Урод определенно хотел побродить больше, чем я ожидал!

Единственные настоящие провода в проекте предназначены для питания, чтобы добавить батарею 9 В и выключатель - без батареи он может питаться от USB или сетевой розетки, и все готово!

Батарея на 9 В и зажим удобно помещаются рядом с Arduino и под щитом GSM (который примерно такого же размера, как Arduino Mega). Я припаял провода к некоторым контактам разъема, чтобы упростить подключение к источнику питания.

К счастью, у экрана GSM были удлиненные и гибкие выводы на контактах. Я смог немного согнуть их, чтобы они не попадали в разъемы на Arduino, оставив эти соединения свободными для моего разъема питания. Подозреваю, поэтому булавки такие! Экран ЖК-дисплея наверху имеет короткие и прочные контакты без разъемов на передней стороне, поэтому изгибание контактов - единственный способ, который я нашел для подключения других вещей, кроме экранов, в этой настройке.

Обрезка паяльных выводов USB-порта и нескольких других на нижней стороне Arduino позволяет ему ровно сидеть в корпусе на какой-нибудь двойной клейкой ленте из вспененного материала. Затем платы складываются так, чтобы ЖК-дисплей и кнопки едва выступали над верхней частью корпуса - идеально!

Заключение

Я буду продолжать возиться с этой системой и даже позволю своему 4-летнему племяннику немного поработать с ней. Я думаю, что он довольно хорошо работает в качестве мессенджера, но я был удивлен, что мне он нравится даже больше, поскольку у меня дома есть крошечный рекламный щит для отображения сообщений. Я доволен эстетикой, которая в этом помогает.

Дальнейшая работа над этим может иметь второе меню для выбора получателя сообщения, автоматическое затемнение дисплея для экономии энергии, добавление индикаторов / зуммеров / двигателей пейджера для уведомлений или любое другое предпочтительное поведение пользовательского интерфейса, которое вы можете пожелать!

Система также может быть фундаментально изменена для отображения уведомлений от службы, такой как IFTTT, например, если вам доставили пакет или чьи-то последние твиты. Что ты строишь? Как бы вы улучшили систему?

Наслаждайтесь!

-Майк

Вы можете узнать больше обо мне и моих проектах в моем блоге, в том числе об этом проекте.

(Этот проект стал возможен в рамках Голограммы Программа Hacker-In-Residence. За дополнительной информацией обращайтесь к Шине, координатору контента Hologram, по адресу [email protected] )

Код

  • Системный код для Arduino
Системный код для Arduino Arduino
 / ** * Двусторонняя пейджинговая система с Arduino и сотовой службой Hologram * Майк Шаус * 28 декабря 2016 г. * Сделано в рамках программы Hologram Hacker-In-Residence * * Этот проект отправляет и получает текстовые сообщения (SMS) сообщения через * Arduino с сотовым модемом, встроенным в небольшой корпус * с ЖК-дисплеем и простыми кнопками управления. * * Обратите внимание, что код включен для работы через ЖК-экран ИЛИ * последовательный монитор, поэтому вы можете использовать этот код даже без * ЖК-экрана. * / # include  #define PINNUMBER "" // включить код библиотеки ЖК-дисплея:#include  #include  #include  // Щит использует выводы I2C SCL и SDA. На классических Arduinos // это аналоговые 4 и 5, поэтому вы больше не можете использовать их для analogRead () // Однако вы можете подключить другие датчики I2C к шине I2C и использовать // шину I2C. ); // Эти # определения упрощают установку цвета подсветки # определить ВЫКЛ 0x0 # определить ВКЛ 0x1 // сделать стрелку специальным символом на ЖК-дисплееconst byte arrow [8] ={B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000}; // инициализировать экземпляр библиотеки GSM GSM gsmAccess (false); // включить параметр 'true' для включения отладки GSM_SMS sms; // массив символов телефонного номера для отправки SMS // изменить номер 12125551212 на номер // у вас есть доступ tochar remoteNumber [20] ="12125551212"; // Массив для хранения номера SMS, полученного из char senderNumber [20]; // char массив возможных исходящих сообщений для выбора из меню char * response [] ={"Mike =Awesome!", "Yes", "No", "Howdy!"}; // # определить ЧИСЛО 4 // если кто-то знает, как это вычислить, я все уши # определить ЧИСЛО (sizeof (response) / sizeof (char *)) // благодаря комментарию Стива Кемпа ! int position =-1; // таким образом при первом нажатии кнопки всегда будет отображаться первая опция меню int inByte =0; // входящий последовательный байт для интерфейса клавиатурыboolean backlight =true; // отслеживаем состояние подсветки для переключения без подписи long previousMillis =0; // сохранит время последней проверки сообщений # define CHECKINTERVAL 1500 // как часто проверять наличие текстовых сообщенийvoid setup () {// поместите здесь свой установочный код, чтобы запустить его один раз:// инициализировать последовательную связь Serial.begin (9600); Serial.println (F («Отправитель SMS-сообщения - запуск ...»)); // устанавливаем количество столбцов и строк ЖК-дисплея:lcd.begin (16, 2); // Выводим сообщение на ЖК-дисплей lcd.print (F ("Здравствуйте, голограмма!")); lcd.setCursor (0, 1); lcd.print (F ("Запускаем ...")); lcd.setBacklight (ВКЛ); // устанавливаем стрелку для отображения lcd.createChar (0, arrow); // состояние подключения логическое notConnected =true; // Запуск экрана GSM // Если у вашей SIM-карты есть PIN-код, передайте его в качестве параметра функции begin () в кавычках while (notConnected) {if (gsmAccess.begin (PINNUMBER) ==GSM_READY) {notConnected =false; Serial.println (F («GSM подключен, потому что ты такой классный»)); Serial.println (F ("Ожидание сообщений, или отправка с помощью \" s \ "")); Serial.println (); lcd.clear (); lcd.setCursor (0,0); домашний экран(); } else {Serial.println (F ("Не подключен")); lcd.clear (); lcd.setCursor (0,0); lcd.print (F («Не подключен»)); задержка (1000); }}} // это функция системы менюvoid showResponses () {// Serial.println (position); // только для отладки системы меню lcd.clear (); lcd.setCursor (0,0); // проверяем правильность положения курсора if (position <0) position =0; если (позиция> ЧИСЛО-1) позиция =ЧИСЛО-1; // записываем текущий выбор и следующий вариант, если есть другой вариант lcd.write (0); // символ стрелки lcd.print (position + 1); lcd.print ("-"); lcd.print (отзывы [позиция]); если (позиция <ЧИСЛО-1) {lcd.setCursor (0,1); lcd.print (""); lcd.print (позиция + 2); lcd.print ("-"); lcd.print (отзывы [позиция + 1]); }} void homeScreen () {lcd.clear (); lcd.setCursor (0,0); lcd.print («SMS-мессенджер!»); lcd.setCursor (0,1); lcd.print ("Готово; up / dn snd"); позиция =-1; // сбросить выбор ответа} void receiveSMS () {char c; // Если есть доступные SMS () if (sms.available ()) {Serial.println ("Сообщение получено от:"); // Получение удаленного номера sms.remoteNumber (senderNumber, 20); Serial.println (senderNumber); lcd.clear (); lcd.setCursor (0,0); подсветка =правда; lcd.setBacklight (ВКЛ); // Пример удаления сообщения // Любые сообщения, начинающиеся с #, следует отбрасывать if (sms.peek () =='#') {Serial.println ("Discarded SMS"); sms.flush (); } // Считываем байты сообщения и распечатываем их // потому что sms.read возвращает только один символ за раз int i =0; в то время как (c =sms.read ()) {я ++; Serial.print (c); если (я ==17) lcd.setCursor (0, 1); // при необходимости перейти к следующей строке if (i <33) lcd.print (c); // на всякий случай не пытайтесь вывести больше 32 символов} Serial.println ("\ nEND OF MESSAGE"); // Удаляем сообщение из памяти модема sms.flush (); Serial.println («СООБЩЕНИЕ УДАЛЕНО»); Serial.println (); // дождемся подтверждения правой кнопки перед тем, как позволить программе продолжить работу booleancknowledged =false; пока (! подтверждено) {uint8_t buttons =lcd.readButtons (); если (кнопки &BUTTON_RIGHT) подтверждено =true; задержка (50); // небольшая задержка для устранения неполадок - без этого ведет себя странно} homeScreen (); задержка (400); // предотвращение нескольких нажатий подряд}} // функция для отображения параметров сообщения в последовательном монитореvoid printResponseOptions () {for (int i =0; i  0) {inByte =Serial.read (); // получаем входящий байт if (inByte =='s') {printResponseOptions (); while (Serial.available ()> 0) {// очищаем буфер клавиатуры на всякий случай char junk =Serial.read (); } while (Serial.available () ==0); // Подождите, пока в буфере ввода не появится символ inByte =Serial.parseInt (); // хотелось бы проверить правильность выбора здесь, чтобы быть более надежным sendSMS (answers [inByte]); }} // проверяем наличие новых сообщений только раз в несколько секунд, чтобы интерфейс оставался более отзывчивым. unsigned long currentMillis =millis (); если (currentMillis - previousMillis> =CHECKINTERVAL) {previousMillis =currentMillis; получитьSMS (); // занимает около 26 мс при отсутствии сообщений}} 

Схема

Сборка на самом деле намного проще, чем следует из схемы - большинство соединений выполняется просто путем наложения двух экранов на верхнюю часть Arduino! Все остальное не является обязательным для питания от батареи.

Производственный процесс

  1. Мониторинг CO2 с помощью датчика K30
  2. Слепоглухое общение с 1Sheeld / Arduino
  3. Управление монетоприемником с помощью Arduino
  4. Arduino с Bluetooth для управления светодиодом!
  5. Емкостной датчик отпечатков пальцев с Arduino или ESP8266
  6. Игра с дисплеем Nextion
  7. Роботизированная рука, управляемая нунчук (с Arduino)
  8. Измерение солнечной радиации с помощью Arduino
  9. Мини-радар с Arduino
  10. Как создавать музыку с помощью Arduino