Блог

● Проект 33: Модуль GPS. Принцип работы, подключение, примеры

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

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
GPS-приемник V.KEL VK16E;
провода папа-папа.

GPS (Global Positioning System) – это система, позволяющая с точностью не хуже 100 м определить местоположение объекта, то есть определить его широту, долготу и высоту над уровнем моря, а также направление и скорость его движения. Кроме того, с помощью GPS можно определить время с точностью до 1 наносекунды. GPS состоит из совокупности определенного количества искусственных спутников Земли (спутниковой системы NAVSTAR) и наземных станций слежения, объединенных в общую сеть. В качестве абонентского оборудования служат индивидуальные GPS-приемники, способные принимать сигналы со спутников и по принятой информации вычислять свое местоположение. Мы используем GPS-приемник V.KEL VK16E (см. рис. 33.1).

GPS-приемник V.KEL VK16E
Рис. 33.1. GPS-приемник V.KEL VK16E

Назначение выводов:

• BOOT – зарезервировано;
• GND – общий вывод;
• RX – вход для данных в последовательном формате UART;
• TX – выход для данных в последовательном формате UART;
• VCC – вход напряжения питания от 3,3 до 5 В;
• PPS – выход импульсов времени.

Холодный старт происходит, когда GPS-приемник был выключен длительное время, перемещался в выключенном состоянии на значительное расстояние или его часы не совпадают с данными спутника. При холодном старте со спутников скачивается альманах. Время обновления альманаха – от 5 до 15 минут в зависимости от условий приема и количества видимых спутников. Особенность – приемник в это время должен быть неподвижен. Теплый старт происходит, когда приемник был выключен более 30 мин. При этом происходит прием уточняющих данных. Занимает 0,5–1,5 мин. Горячий старт происходит, когда приемник был отключен непродолжительное время. Данные считаются свежими, и приемник просто находит спутники (опираясь на данные альманаха). Для проверки работоспособности подключим модуль по последовательному порту к компьютеру с ОС Windows, используя USBTTL- адаптер, и запустим программу MiniGPS_v1.7.1.exe. Программа показывает количество найденных приемником спутников и в случае их достаточного числа показывает наше местоположение – географические широту и долготу (см. рис. 33.2). Мигание зеленого светодиода сигнализирует о достаточном для определения положения количестве спутников. Теперь подключим GPS-приемник к плате Arduino и будем выводить данные о местоположении – географические широту и долготу в монитор последовательного порта Arduino. Схема подключения показана на рис. 33.3.
 
Схема подключения GPS-приемника к Arduino
Рис. 33.3. Схема подключения GPS-приемника к Arduino

Приступим к написанию скетча. Будем использовать библиотеки SoftwareSerial и TinyGPS, позволяющую выделять нужные данные из всего потока, передаваемого приемником. Содержимое скетча показано в листинге 33.1.

#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial gpsSerial(7, 8);
bool newdata = false;
unsigned long start;
long lat, lon;
unsigned long time, date;
void setup()
{
gpsSerial.begin(9600); // скорость обмена с GPS-приемником
Serial.begin(9600);
Serial.println("Waiting data of GPS...");
}
void loop()
{
// задержка в секунду между обновлениями координат
if (millis() - start > 1000)
{
newdata = readgps();
if (newdata)
{
start = millis();
gps.get_position(&lat, &lon);
gps.get_datetime(&date, &time);
Serial.print("Lat: "); Serial.print(lat);
Serial.print(" Long: "); Serial.print(lon);
Serial.print(" Date: "); Serial.print(date);
Serial.print(" Time: "); Serial.println(time);
}
}
}
// проверка наличия данных
bool readgps()
{
while (gpsSerial.available())
{
int b = gpsSerial.read();
//в TinyGPS есть ошибка: не обрабатываются данные с \r и \n
if('\r' != b)
{
if (gps.encode(b))
return true;
}
}
return false;
}
}

Порядок подключения:

1. Собираем схему, согласно рис. 33.1.
2. Загружаем в плату Arduino скетч из листинга 33.1.
3. Ждем мигания зеленого светодиода на приемнике GPS, сигнализирующего о наличии данных о местоположении.
4. Смотрим в мониторе последовательного порта Arduino вывод данных широты и долготы. Также получаем текущую дату и время по Гринвичу (рис. 33.4).

Вывод данных GPS в монитор последовательного порта Arduino
Рис. 33.4. Вывод данных GPS в монитор последовательного порта Arduino
 
Листинги программ скачать


 
Читать далее

● Проект 32: Беспроводная связь. Модуль GSM/GPRS SIM900

Опубликовано: 23.04.2018
В этом эксперименте рассмотрим работу модуля GSM/GPRS shield – платы расширения, позволяющей Arduino работать в сетях сотовой связи по технологиям GSM/GPRS для приёма и передачи данных, SMS и голосовой связи.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
GSM/GPRS shield;
• работающая SIM-карта любого оператора;
• датчик температуры LM335;
резистор 2,2 кОм;
провода папа-папа.
блок питания +5 в 1 А;

GSM/GPRS shield на базе модуля SIMCom SIM900 выпускают несколько производителей, и платы имеют незначительные отличия. Также на некоторых платах расположены: слот для SIM-карты, стандартные 3,5 мм джек для аудиовхода и выхода и разъём для внешней антенны. На плате GSM/GPRS shild имеется несколько перемычек, позволяющих выбрать тип serial-соединения (hardware или software). GSM/GPRS shield имеет два способа включения – аппаратный (кратковременное нажатие кнопки PWRKEY) и программный (используется один из выходов Arduino). Рассмотрим пример отправки и получения SMS-сообщений с помощью GSM/GPRS shield. Каждые 30 минут будем отправлять на определенный номер показания аналогового датчика температуры LM335, подсоединенного к выводу A0. Схема соединений эксперимента показана на рис. 32.1.

Схема подключения модуля GSM/GPRS shield и датчика LM335. Шилд SIM900 установлен на Arduino UNO
Рис. 32.1. Схема подключения модуля GSM/GPRS shield и датчика LM335. Шилд SIM900 установлен на Arduino UNO

Содержимое скетча для отправки SMS показано в листинге 32.1.

// подключение библиотеки SoftwareSerial
#include <SoftwareSerial.h>
// номер телефона для отправки sms (поменяйте на свой)
#define PHONE "+79031111111"
// Выводы для SoftwareSerial (у вас могут быть 7,8)
SoftwareSerial Sim900Serial(2, 3);
const int lm335=A0; // для подключения LM335
unsigned long millis1;
void setup()
{
Sim900Serial(19200); // the Hardware serial rate
}
void loop()
{
if (millis()-millis1>30*60*1000) // прошло 30 минут?
{
SendTextMessage(); // отправить sms
millis1=millis();
}
}
// подпрограмма отправки sms
void SendTextMessage()
{
// AT-команда установки text mode
Sim900Serial.print("AT+CMGF=1\r");
delay(100);
// номер телефона получателя
Sim900Serial.println("AT + CMGS = \"");
Sim900Serial.println(PHONE);
Sim900Serial.println("\"");
delay(100);
// сообщение – данные температуры
double val = analogRead(lm335); // чтение
double voltage = val*5.0/1024; // перевод в вольты
double temp = voltage*100 - 273.15; // в градусы Цельсия
Sim900Serial.println(temp);
delay(100);
// ASCII код ctrl+z – окончание передачи
Sim900Serial.println((char)26);
delay(100);
Sim900Serial.println();
}

Порядок подключения:

1. Установим SIM-карту на GSM/GPRS Shield, а GSM/GPRS Shield – на Arduino. С помощью джамперов соединим контакты для работы через SoftwareSerial-эмуляцию.
2. Собираем схему, согласно рис. 32.1.
3. Загружаем в плату Arduino скетч из листинга 32.1.
4. На телефон, указанный в скетче, раз в 30 минут должны приходить sms-сообщения с данными температуры. Теперь изменим скетч таким образом, чтобы Arduino отправляла sms-сообщение с данными температуры только при получении при- ходящего сообщения с текстом «temp».
Содержимое скетча показано в листинге 32.2.

#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);
String currStr = ""; //
String phone = ""; //
// True, если текущая строка является sms-сообщением
boolean isStringMessage = false;
void setup()
{
Serial.begin(19200);
Sim900Serial.begin(19200);
// Настраиваем приём сообщений с других устройств
Sim900Serial.print("AT+CMGF=1\r");
delay(300);
Sim900Serial.print("AT+IFC=1, 1\r");
delay(300);
Sim900Serial.print("AT+CPBS=\"SM\"\r");
delay(300);
Sim900Serial.print("AT+CNMI=1,2,2,1,0\r");
delay(500);
}
void loop()
{
if (!Sim900Serial.available())
return;
char currSymb = Sim900Serial.read();
if ('\r' == currSymb)
{
if (isStringMessage) // текущая строка - sms-сообщение,
{
if (!currStr.compareTo("temp")) // текст sms - temp
{
// отправить sms на приходящий номер
Sim900Serial.print("AT+CMGF=1\r");
delay(100);
Sim900Serial.print("AT + CMGS = \"");
Sim900Serial.print(phone);
Sim900Serial.println("\"");
delay(100);
double val = analogRead(A0); // чтение
double voltage = val*5.0/1024; // перевод в вольты
double temp = voltage*100 - 273.15; // в градусы Цельсия
Serial.println(temp);
Sim900Serial.println(temp);
delay(100);
Sim900Serial.println((char)26);
delay(100);
Sim900Serial.println();
}
Serial.println(currStr);
isStringMessage = false;
}
else
{
if (currStr.startsWith("+CMT")) {
Serial.println(currStr);
// выделить из сообщения номер телефона
phone=currStr.substring(7,19);
Serial.println(phone);
// если текущая строка начинается с "+CMT",
// то следующая строка является сообщением
isStringMessage = true;
}
}
currStr = "";
}
else if ('\n' != currSymb)
{
currStr += String(currSymb);
}


Листинги программ скачать



 
Читать далее

● Проект 31: Беспроводная связь. Модуль Bluetooth HC-05

Опубликовано: 23.04.2018
В этом эксперименте рассмотрим работу модуля Bluetooth HC-05, позволяющего плате Arduino установить беспроводную связь и обмениваться данными с другими устройствами по протоколу Bluetooth.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
модуль Bluetooth HC-05;
провода папа-папа.
• телефон или планшет с OS Android.

Bluetooth (с англ. – «голубой зуб») – одна из технологий беспроводной передачи данных. Спецификация была разработана в 1998 г. компанией Ericsson, а позднее оформлена группой Bluetooth Special Interest Group (SIG), официально зарегистрированной 20 мая 1999 г. Bluetooth позволяет объединять в локальные сети любую технику: от мобильного телефона и компьютера до холодильника. При этом одним из немаловажных параметров новой технологии являются низкая стоимость устройства связи (в пределах 20 долларов), его небольшие размеры (ведь речь идет о мобильных устройствах) и, что немаловажно, совместимость, простота встраивания в различные устройства. Мы будем использовать недорогой модуль HC-05. В нем используется чип BC417 плюс Flash-память и выводы GPIO.

Чип поддерживает спецификацию Bluetooth v2.0 + EDR, AT-команды, может работать в режиме Master или Slave, поддерживает скорость обмена от 2400 до 1 382 400. Напряжение питание модуля составляет 3,3 В, ток потребления ~50 мА, что позволяет питать его от вывода Arduino +3,3 В. Для программирования модуля c помощью AT-команд необходимо на вывод PIO11 подать +3,3 В. Подключим модуль к плате Arduino и рассмотрим простейшие AT-команды. Схема подключения показана на рис. 31.1.
Схема подключения модуля HC-05 к плате Arduino
Рис. 31.1. Схема подключения модуля HC-05 к плате Arduino

Теперь на плату Arduino загрузим скетч, показанный в листинге 31.1.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // указываем пины RX и TX
void setup()
{
pinMode(2,INPUT);
pinMode(3,OUTPUT);
Serial.begin(38400);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available())
{
int c = mySerial.read(); // читаем из software-порта
Serial.write(c); // пишем в hardware-порт
}
if (Serial.available())
{
int c = Serial.read(); // читаем из hardware-порта
mySerial.write(c); // пишем в software-порт
}
}
}

Порядок подключения:

1. Подключаем модуль HC-05 к плате Arduino по схеме на рис. 31.1. Отключаем провод, ведущий к выводу 34 модуля (PIO11), от 3,3 В.
2. Загружаем на плату Arduino скетч из листинга 31.1.
3. Светодиод на плате должен быстро мигать. Если не мигает или мигает иначе, отключаем питание модуля от 3,3 В, затем снова подключаем питание.
4. Подключаем провод, ведущий к выводу 34 модуля (PIO11), к 3,3 В.
5. Открываем монитор последовательного порта Arduino и набираем AT-команды из табл. 31.1. Смотрим результат выполнения команд (рис. 31.2).

Таблица 31.1


Следующий шаг – двунаправленная передача данных между телефоном с OS Android и платой Arduino c модулем HC-05. Отсоединим контакт 34 Bluetooth-модуля от 3,3 В. Загрузим и установим на телефон из Play Market приложение Bluetooth Terminal (https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&hl=ru).
Запустим программу и установим соединение с нашим модулем (см.рис. 31.2). Передаем Arduino и получаем (через монитор последовательного порта) из Arduino сообщения (см. рис. 31.3).

Установка связи с модулем HC-05
                                                   Рис. 31.2. Установка связи с модулем HC-05

Обмен сообщениями между телефоном и платой Arduino

                            Рис. 31.3. Обмен сообщениями между телефоном и платой Arduino

Листинги программ скачать


Читать далее

● Проект 30: Беспроводная связь. Модуль Wi-Fi ESP8266

Опубликовано: 23.04.2018
В этом эксперименте мы познакомимся с модулем ESP8266, с помощью которого можно подключить плату Arduino к сетям Wi-Fi, и напишем скетч для передачи данных датчика температуры на веб-сервис Народный мониторинг.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
модуль ESP8266 ESP-01;
• датчик температуры LM335;
резистор 2,2 кОм;
провода папа-папа.
блок питания +5 в 1 А;
• преобразователь напряжения 3–30 В.

После своего появления платы на базе Wifi чипа ESP8266 стали по-настоящему народными. Огромные возможности и минимальная цена сделали свое дело. Платы на ESP8266 – это не просто модули для связи по Wi-Fi. Чип, по сути, является микроконтроллером со своими интерфейсами SPI, UART, а также портами GPIO, а это значит, что модуль можно использовать автономно без Arduino и других плат с микроконтроллерами. Существует около 11 официальных модификаций платы. В нашем распоряжении самая простая плата – ESP01. Распиновка платы показана на рис. 30.1. Покажем, как использовать ее в качестве Wi-Fi модуля для Arduino.
Распиновка модуля ESP-01
Рис. 30.1. Распиновка модуля ESP-01

Модуль ESP8266 рассчитан только на 3,3 В. Поэтому нам необходим источник питания 3,3 В. Схема подключения модуля ESP-01 к плате Arduino показана на рис. 30.2. Общение с модулем с помощью AT-команд. Список основных AT-команд показан в табл. 30.1. Загрузим на плату Arduino скетч, показанный в листинге 30.1, и будем отправлять в модуль ESP-01 AT-команды. Результат выполнения команд показан на рис. 30.3.
Схема подключения модуля ESP-01 к Arduino
Рис. 30.2. Схема подключения модуля ESP-01 к Arduino

Листинг 30.1

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // указываем пины rx и tx
void setup()
{
pinMode(2,INPUT);
pinMode(3,OUTPUT);
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
if (mySerial.available())
{
int c = mySerial.read(); // читаем из software-порта
Serial.write(c); // пишем в hardware-порт
if (Serial.available())
{
int c = Serial.read(); // читаем из hardware-порта
mySerial.write(c); // пишем в software-порт
}
}

Порядок подключения:

Рис. 30.3. Отправка AT-команд из Arduino IDE

Создадим скрипт отправки данных на сайт Народный мониторинг (http://narodmon.ru). Подключим к плате Arduino датчик температуры LM335 и каждые 10 минут будем отправлять данные. Схема соединений показана на рис. 30.4. Для отправки данных необходимо выполнить следующую последовательность действий:

1. Сброс ESP-01 и проверка готовности модуля (AT+RST).
2. Подключение к сети по Wi-Fi (AT+CWJAP="","").
3. Выбор режима одиночного соединения (AT+CIPMUX=0).
4. Создание TCP-соединения (AT_CIPSTART="TCP","92.39.235.156", 8283).
5. Отправка данных (AT+CIPSEND= и сами данные #\ n#\n#\n##).
6. Закрыть TCP-соединение (AT+CIPCLOSE).
7. Пауза 10 минут и переход к шагу 4.
 
 


Схема подключения модуля ESP-01 к Arduino

Рис. 30.4. Схема подключения модуля ESP-01 к Arduino


Таблица 30.1


Содержимое скетча показано в листинге 30.2.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
const int LM335=A0; // контакт подключения датчика LM335
#define SSID "MacBook Pro - Petin" // введите ваш SSID
#define PASS "19101966" // введите ваш пароль
#define DST_IP "92.39.235.156" // naronmon.ru
void setup()
{
Serial.begin(9600); // для отладки
mySerial.begin(9600);
delay(2000);
Serial.println("Init");
mySerial.println("AT+RST"); // сброс и проверка, если модуль готов
delay(1000);
if(mySerial.find("ready"))
{Serial.println("WiFi - Module is ready");}
else
{Serial.println("Module dosn't respond.");
while(1);
}
delay(1000);
// соединение по wifi
boolean connected=false;
for(int i=0;i<5;i++)
{
if(connectWiFi())
{connected = true;
mySerial.println("Connected to Wi-Fi...");
break;
}
}
if (!connected)
{
mySerial.println("Coudn't connect to Wi-Fi.");
while(1);
}
delay(5000);
mySerial.println("AT+CIPMUX=0"); // режим одиночного соединения
}
void loop()
{
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += DST_IP;
cmd += "\",8283";
Serial.println(cmd);
mySerial.println(cmd);
if(mySerial.find("Error"))
return;
double val = analogRead(LM335); // чтение показаний LM335
double voltage = val*5.0/1024; // перевод в вольты
double temp = voltage*100 - 273.15; // в градусы Цельсия
cmd = "#A0:F3:C1:70:AA:94\n#2881C4BA0200003B1#"+String(temp)+"\n##";
delay(3000);
mySerial.print("AT+CIPSEND=");
mySerial.println(cmd.length());
delay(1000);
Serial.println(">");
mySerial.print(cmd);
Serial.println(cmd);
delay(3000);
mySerial.println("AT+CIPCLOSE");
delay(600000);
}
// процедура установки Wi-Fi-соединения
boolean connectWiFi()
{
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
mySerial.println(cmd);
Serial.println(cmd);
delay(2000);
if(mySerial.find("OK"))
{
Serial.println("OK, Connected to Wi-Fi.");
return true;
}
else
{
Serial.println("Can not connect to the Wi-Fi.");
return false;
}
}


Листинги программ скачать

Читать далее

Главное меню

Каталог

Полезные ссылки

Цена
от
до