Справочник программиста Библиотеки Гид по TFT-дисплеям

Металлодетектор и система оповещения с помощью Ардуино

Этот проект на основе Bolt IoT показывает, как сделать металлодетектор с системой оповещения на основе Ардуино.

Введение

Данный проект должен дать общее понимание того, как можно сделать металлоискатель с системой мониторинга и оповещения. Цель проекта в обнаружении посторонних предметов, а также в создании прототипа системы безопасности. Итогом дальнейших процессов может стать проектирование подвижного робота с металлоискателем. Всё это, в целом, может быть выполнено с использованием любого микроконтроллера, но мы будем использовать плату Arduino Uno.

Предлагаемая система содержит схему передатчика (Tx) и приемника (Rx). Эта плата основана на TDA0161, монолитной интегральной схеме, предназначенной для обнаружения металлических тел путем определения вариаций высокочастотных потерь на вихревые токи. Используя внешне настроенную цепь, устройство действует как генератор. Уровень выходного сигнала изменяется при приближении к металлическому объекту.

Выходной сигнал определяется изменениями тока питания. Независимо от напряжения питания, этот ток является высоким или низким, в зависимости от близости металлического предмета. Данное устройство сможет предупредить об обнаружении, например, мины впереди, а также будет полезно для обнаружения металлических объектов, спрятанных под землей или находящихся внутри других объектов. Состоит из портативного устройства с сенсорным датчиком, который может обнаруживать изменение магнитного поля, вызванного металлическим предметом.

Комплектующие

Для нашего металлодетектора/металлоискателя Ардуино понадобится приличный список комплектующих:

  • Датчик на основе TDA0161 × 1
  • Резистор 220 Ом × 1
  • Конденсатор 47 мкФ × 1
  • Резистор 330 Ом × 1
  • Резистор 100 Ом × 1
  • Резистор 1 кОм × 1
  • Зуммер × 1
  • Многооборотный прецизионный потенциометр - 10 кОм (25 витков) × 1
  • Bolt IoT Bolt WiFi модуль × 1
  • Arduino UNO × 1
  • Кабель USB-A - Micro-USB × 1

Из программного обеспечения нам пригодятся:

Принципиальная схема

Сначала мы должны сделать датчик металлоискателя, подключив его, как указано на принципиальной схеме выше. В итоге как только всё будет сделано согласно шагам ниже, вам нужно будет установить систему таким образом, чтобы датчик указывал на пол, включить питание системы и обеспечить постоянный доступ Bolt к Интернету через ваш WiFi.

Настройка модуля Bolt WiFi и подключение через облако

После выполнения всех соединений нам нужно подключить металлодетектор Ардуино через облако Bolt iOT, используя процесс, описанный на этом шаге. Мы узнаем как настроить новый WiFi-модуль Bolt, используя сеть Wi-Fi и мобильный телефон.

Если вы внимательно посмотрели список комплектующих, то увидели, что нам нужны: модуль Bolt IoT Bolt WiFi, кабель Micro-USB - USB (на ваш выбор), облако Bolt IoT Bolt Cloud, приложение Bolt IoT Android App (ссылки выше).

Этот набор поможет нам подключить модуль Bolt к Wi-Fi и привязать его к облачной учетной записи Bolt, чтобы вы могли начать с ним работать. Весь процесс настройки займет не более 10 минут.

Подключаем модуль к питанию

После того как вы взяли в руки модуль WiFi Bolt iOT вам нужно найти зарядное устройство 5В/1A, которое имеет порт micro-usb и обычно используется для зарядки мобильного телефона на Android. Вы также можете использовать свой ноутбук для включения устройства Bolt.

Теперь, когда у вас есть все компоненты, давайте начнем с загрузки мобильного приложения Bolt IoT и установки его на мобильный телефон. Прежде чем начать, проверьте, работает ли сеть WiFi, к которой вы будете подключать Bolt, на частоте 2,4 ГГц. На данный момент Bolt НЕ поддерживает сети WiFi 5 ГГц.

Скачиваем приложение Bolt App

Загрузите приложение «Bolt IoT» для Android или iOS. Вы можете выполнить поиск «Bolt IoT» или отсканировать QR-код ниже.

Примечание. Ниже приведены инструкции для приложения под Android, но то же самое можно выполнить и для приложения под iOS с некоторыми незначительными отличиями.

Создание аккаунта

Вам нужно будет создать учетную запись в облаке Bolt для управления устройством Bolt iOT. Создание учетной записи в облаке Bolt БЕСПЛАТНО.

Откройте приложение Bolt и нажмите «РЕГИСТРАЦИЯ» (англ. - REGISTER), чтобы создать новую учетную запись.

Заполните все необходимые детали и согласитесь с условиями использования (кто-то это вообще читает?). Наконец, нажмите «Создать новую учетную запись» (CREATE A NEW ACCOUNT), чтобы создать бесплатную учетную запись.

Теперь вы получите электронное письмо на адрес электронной почты, который вы дали для подтверждения своей учетной записи. Это для проверки того, что вы настоящий человек, а не робот.

Следуйте инструкциям в электронном письме, чтобы активировать свою учетную запись Bolt Cloud. Теперь потяните пальцем по экрану, чтобы обновить экран мобильного приложения, который выглядит примерно так, как показано ниже.

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

Добавляем Bolt на ваш аккаунт

Теперь нажмите кнопку «ДОБАВИТЬ УСТРОЙСТВО» (англ. - ADD DEVICE), чтобы настроить устройство Bolt для работы в сети WiFi.

Включите устройство Bolt, вставив кабель Micro USB в порт USB на модуле, а другой конец кабеля подключите к зарядному устройству Android или к ноутбуку.

Примечание. На Bolt iOT нет кнопок включения/выключения. Как только вы подключите питание, можно начинать работу.

Как только вы включите устройство Bolt, синий светодиод на Bolt начнет медленно мигать, а зеленый светодиод выключится.

Если синий светодиод медленно мигает, это означает, что теперь Bolt передает свою собственную сеть точек доступа WiFi и готов к настройке с помощью приложения Bolt IoT на вашем телефоне. Нажмите на символ «>» в приложении, чтобы продолжить.

Только для Android: перед тем как продолжить, отключите мобильные данные, включите службу определения местоположения на своем мобильном телефоне, если это еще не сделано, и нажмите кнопку «ГОТОВ» (англ.- Ready). Это требуется только в приложении Android из-за API Google. Приложение не собирает и не хранит ваши данные о местоположении.

Если приложение обнаружило Bolt, оно отобразит экран, аналогичный показанному ниже. Синий светодиод на устройстве теперь будет быстро мигать. Это означает, что он находится в процессе установки. Чтобы продолжить, нажмите «ПРОДОЛЖИТЬ» (англ. - CONTINUE).

Пароль для точки доступа WiFi, передаваемой модулем WiFi Bolt: bolt1234. При настройке с помощью мобильного приложения Android ваш мобильный телефон автоматически подключится к точке доступа, когда вы нажмете «Далее». На iOS вам нужно будет подключиться к Hotspot, зайдя в Настройки -> WIFi. Теперь нам нужно сообщить Bolt, к какой WiFi-сети он должен подключиться.

Важно. Модуль WiFi от Bolt не может обнаруживать сети WiFi на базе 5 ГГц и не сможет подключиться к ним.

Выберите сеть WiFi к которой должен быть подключен Bolt. Вы можете нажать на имя WiFi, чтобы выбрать сеть WiFi для подключения.

Примечание. Для приложения iOS вам придется вручную ввести SSID или имя WiFi-устройства, к которому вы хотите подключиться.

Введите пароль сети WiFi, которую вы выбрали на предыдущем экране.

Приложение теперь отправит учетные данные WiFi в модуль Bolt WiFi.

Теперь нажмите «Готово» (англ. - Done) и на следующем экране выберите свою страну и нажмите «Сохранить» (англ. - Save), чтобы завершить последний этап настройки.

Если все прошло по плану, устройство Bolt теперь перезапустится автоматически. Сине-зеленый светодиод на устройстве Bolt теперь будет постоянно светиться. Если Bolt смог подключиться к сети WiFi и подключился к облаку, рядом с идентификатором устройства Bolt появится зеленая точка, как показано ниже.

Отладка

Если Bolt не может подключиться к сети Wi-Fi, зеленый светодиод будет выключен, а синий светодиод будет медленно мигать. Обычно это происходит, если вы ввели неправильные учетные данные WiFi (SSID или пароль) во время установки. Пожалуйста, попробуйте процесс установки еще раз с правильными учетными данными WiFi.

Проверьте, работает ли ваш WiFi роутер на частоте 2,4 ГГц. На данный момент Bolt не поддерживает 5 ГГц.

Доступ к облаку Bolt для создания проектов IoT

Посетите Bolt Cloud (cloud.boltiot.com) и войдите в свою зарегистрированную учетную запись, используя тот же идентификатор электронной почты и пароль, которые вы использовали в мобильном приложении Bolt IoT.

Вы увидите свое устройство Bolt со статусом «ONLINE» в своей учетной записи на панели инструментов.

Поздравляем, вам удалось настроить Bolt и привязать его к своей учетной записи менее чем за 10 минут.

Код для проекта

После подключения через модуль Bolt вы должны скачать или скопировать код ниже в формате .json:

{
    "name": "Metal Detection",
    "flow": [
        {
            "id": 15,
            "module": "app#bolt-iot:executeCommand",
            "version": 1,
            "parameters": {
                "__IMTCONN__": 445281
            },
            "mapper": {
                "command": "serialBegin",
                "parameters": {
                    "baud": "9600",
                    "deviceName": ""
                }
            },
            "metadata": {
                "designer": {
                    "x": 8,
                    "y": -3
                },
                "restore": {
                    "command": {
                        "label": "Initialize serial communication"
                    },
                    "__IMTCONN__": {
                        "label": "My Bolt connection"
                    }
                },
                "parameters": [
                    {
                        "name": "__IMTCONN__",
                        "type": "account",
                        "label": "Connection",
                        "required": true
                    }
                ],
                "expect": [
                    {
                        "name": "command",
                        "type": "select",
                        "label": "Command",
                        "required": true,
                        "validate": {
                            "enum": [
                                "digitalWrite",
                                "digitalRead",
                                "analogRead",
                                "analogWrite",
                                "serialBegin",
                                "serialWrite",
                                "serialRead",
                                "version",
                                "restart",
                                "isAlive"
                            ]
                        }
                    },
                    {
                        "name": "parameters",
                        "spec": [
                            {
                                "name": "deviceName",
                                "type": "text",
                                "label": "Device name",
                                "required": true
                            },
                            {
                                "name": "baud",
                                "type": "number",
                                "label": "Baud",
                                "required": true
                            }
                        ],
                        "type": "collection",
                        "label": "Parameters"
                    }
                ]
            }
        },
        {
            "id": 1,
            "module": "app#bolt-iot:executeCommand",
            "version": 1,
            "parameters": {
                "__IMTCONN__": 445281
            },
            "mapper": {
                "command": "serialWrite",
                "parameters": {
                    "data": "Get detected",
                    "deviceName": ""
                }
            },
            "metadata": {
                "designer": {
                    "x": 300,
                    "y": 0
                },
                "restore": {
                    "command": {
                        "label": "Send serial data output"
                    },
                    "__IMTCONN__": {
                        "label": "My Bolt connection"
                    }
                },
                "parameters": [
                    {
                        "name": "__IMTCONN__",
                        "type": "account",
                        "label": "Connection",
                        "required": true
                    }
                ],
                "expect": [
                    {
                        "name": "command",
                        "type": "select",
                        "label": "Command",
                        "required": true,
                        "validate": {
                            "enum": [
                                "digitalWrite",
                                "digitalRead",
                                "analogRead",
                                "analogWrite",
                                "serialBegin",
                                "serialWrite",
                                "serialRead",
                                "version",
                                "restart",
                                "isAlive"
                            ]
                        }
                    },
                    {
                        "name": "parameters",
                        "spec": [
                            {
                                "name": "deviceName",
                                "type": "text",
                                "label": "Device name",
                                "required": true
                            },
                            {
                                "name": "data",
                                "type": "text",
                                "label": "Data",
                                "required": true
                            }
                        ],
                        "type": "collection",
                        "label": "Parameters"
                    }
                ]
            }
        },
        {
            "id": 14,
            "module": "app#bolt-iot:executeCommand",
            "version": 1,
            "parameters": {
                "__IMTCONN__": 445281
            },
            "mapper": {
                "command": "serialRead",
                "parameters": {
                    "till": "10",
                    "deviceName": ""
                }
            },
            "metadata": {
                "designer": {
                    "x": 600,
                    "y": 0
                },
                "restore": {
                    "command": {
                        "label": "Read incoming serial data"
                    },
                    "__IMTCONN__": {
                        "label": "My Bolt connection"
                    }
                },
                "parameters": [
                    {
                        "name": "__IMTCONN__",
                        "type": "account",
                        "label": "Connection",
                        "required": true
                    }
                ],
                "expect": [
                    {
                        "name": "command",
                        "type": "select",
                        "label": "Command",
                        "required": true,
                        "validate": {
                            "enum": [
                                "digitalWrite",
                                "digitalRead",
                                "analogRead",
                                "analogWrite",
                                "serialBegin",
                                "serialWrite",
                                "serialRead",
                                "version",
                                "restart",
                                "isAlive"
                            ]
                        }
                    },
                    {
                        "name": "parameters",
                        "spec": [
                            {
                                "name": "deviceName",
                                "type": "text",
                                "label": "Device name",
                                "required": true
                            },
                            {
                                "name": "till",
                                "type": "number",
                                "label": "Till",
                                "required": true,
                                "validate": {
                                    "max": 127,
                                    "min": 0
                                }
                            }
                        ],
                        "type": "collection",
                        "label": "Parameters"
                    }
                ]
            }
        },
        {
            "id": 18,
            "module": "math:EvaluateExpression",
            "version": 1,
            "parameters": {},
            "mapper": {
                "expression": "100-{{parseNumber(14.value)}}"
            },
            "metadata": {
                "designer": {
                    "x": 869,
                    "y": -2
                },
                "expect": [
                    {
                        "name": "expression",
                        "type": "text",
                        "label": "Expression",
                        "required": true
                    }
                ]
            }
        },
        {
            "id": 13,
            "module": "google-email:ActionSendEmail",
            "version": 1,
            "parameters": {
                "account": 445282
            },
            "filter": {
                "name": "Check if metal is detected",
                "conditions": [
                    [
                        {
                            "a": "{{18.result}}",
                            "b": "30",
                            "o": "number:greater"
                        }
                    ]
                ]
            },
            "mapper": {
                "cc": [],
                "to": [
                ],
                "bcc": [],
                "html": "metal detection",
                "subject": "Warning! metal detected",
                "attachments": []
            },
            "metadata": {
                "designer": {
                    "x": 1145,
                    "y": -3
                },
                "restore": {
                    "cc": {
                        "mode": "chose",
                        "items": []
                    },
                    "to": {
                        "mode": "chose",
                        "items": [
                            "undefined"
                        ]
                    },
                    "bcc": {
                        "mode": "chose",
                        "items": []
                    },
                    "account": {
                        "label": ""
                    },
                    "attachments": {
                        "mode": "chose",
                        "items": []
                    }
                },
                "parameters": [
                    {
                        "name": "account",
                        "type": "account",
                        "label": "Connection",
                        "required": true
                    }
                ],
                "expect": [
                    {
                        "name": "to",
                        "spec": {
                            "name": " ",
                            "type": "email",
                            "label": "Email address",
                            "required": true
                        },
                        "type": "array",
                        "label": "To",
                        "labels": {
                            "add": "Add a recipient",
                            "edit": "Edit a recipient"
                        },
                        "required": true
                    },
                    {
                        "name": "subject",
                        "type": "text",
                        "label": "Subject"
                    },
                    {
                        "name": "html",
                        "type": "text",
                        "label": "Content"
                    },
                    {
                        "name": "attachments",
                        "spec": [
                            {
                                "name": "fileName",
                                "type": "filename",
                                "label": "File name",
                                "required": true,
                                "semantic": "file:name"
                            },
                            {
                                "name": "data",
                                "type": "buffer",
                                "label": "Data",
                                "required": true,
                                "semantic": "file:data"
                            },
                            {
                                "name": "cid",
                                "type": "text",
                                "label": "Content-ID"
                            }
                        ],
                        "type": "array",
                        "label": "Attachments",
                        "labels": {
                            "add": "Add an attachment",
                            "edit": "Edit an attachment"
                        }
                    },
                    {
                        "name": "cc",
                        "spec": {
                            "type": "email",
                            "label": "Email address"
                        },
                        "type": "array",
                        "label": "Copy recipient",
                        "labels": {
                            "add": "Add a copy recipient",
                            "edit": "Edit a copy recipient"
                        }
                    },
                    {
                        "name": "bcc",
                        "spec": {
                            "type": "email",
                            "label": "Email address"
                        },
                        "type": "array",
                        "label": "Blind copy recipient",
                        "labels": {
                            "add": "Add a blind copy recipient",
                            "edit": "Edit a blind copy recipient"
                        }
                    }
                ]
            }
        }
    ],
    "metadata": {
        "version": 1,
        "scenario": {
            "roundtrips": 1,
            "maxErrors": 3,
            "autoCommit": false,
            "sequential": false,
            "confidential": false,
            "dataloss": false,
            "dlq": false
        },
        "designer": {
            "orphans": []
        },
        "zone": "eu1.integromat.com"
    }
}

Код, который мы должны загрузить на плату Ардуино через Arduino IDE ниже:

#define capPin A0
#define buz 9
#define pulsePin A4

#define led 10

long sumExpect=0; //running sum of 64 sums 
long ignor=0;   //number of ignored sums
long diff=0;        //difference between sum and avgsum
long pTime=0;
long buzPeriod=0; 

void setup() 
{
  Serial.begin(9600);
  pinMode(pulsePin, OUTPUT); 
  digitalWrite(pulsePin, LOW);
  pinMode(capPin, INPUT);  
  pinMode(buz, OUTPUT);
  digitalWrite(buz, LOW);
  pinMode(led, OUTPUT);
}

void loop() 
{
  int minval=1023;
  int maxval=0;
  long unsigned int sum=0;
  for (int i=0; i<256; i++)
  {
    //reset the capacitor
    pinMode(capPin,OUTPUT);
    digitalWrite(capPin,LOW);
    delayMicroseconds(20);
    pinMode(capPin,INPUT);
    applyPulses();
    
    //read the charge of capacitor
    int val = analogRead(capPin); //takes 13x8=104 microseconds
    minval = min(val,minval);
    maxval = max(val,maxval);
    sum+=val;
    
    long unsigned int cTime=millis();
    char buzState=0;
    if (cTime<pTime+10)
    {
      if (diff>0)
        buzState=1;
      else if(diff<0)
        buzState=2;
    }
    if (cTime>pTime+buzPeriod)
    {
      if (diff>0)
      buzState=1;
      else if (diff<0)
      buzState=2;
      pTime=cTime;   
    }
    if (buzPeriod>300)
    buzState=0;

    if (buzState==0)
    {
      digitalWrite(led, LOW);
      noTone(buz);
    }  
    else if (buzState==1)
    {
      tone(buz,2000);
      digitalWrite(led, HIGH);
    }
    
    else if (buzState==2)
    {
      tone(buz,500);
      digitalWrite(led, HIGH);
    }
  }

  //subtract minimum and maximum value to remove spikes
  sum-=minval; 
  sum-=maxval;
  
  if (sumExpect==0) 
  sumExpect=sum<<6; //set sumExpect to expected value
  long int avgsum=(sumExpect+32)>>6; 
  diff=sum-avgsum;
  if (abs(diff)<avgsum>>10)
  {
    sumExpect=sumExpect+sum-avgsum;
    ignor=0;
  } 
  else 
    ignor++;
  if (ignor>64)
  { 
    sumExpect=sum<<6;
    ignor=0;
  }
  if (diff==0) 
    buzPeriod=1000000;
  else 
  buzPeriod=avgsum/(2*abs(diff));    
}

void applyPulses()
{
    for (int i=0;i<3;i++) 
    {
      digitalWrite(pulsePin,HIGH); //take 3.5 uS
      delayMicroseconds(3);
      digitalWrite(pulsePin,LOW);  //take 3.5 uS
      delayMicroseconds(3);
    }
}

Настройка оповещений

Прежде чем перейти к почтовым оповещениям и после того как мы загрузили код в Arduino IDE нам нужно создать идентификатор на ресурсе integromat.com. Если у вас есть уже аккаунт на этом сайте  - просто войдите в аккаунт.

  1. Загрузите план сценария, приведенный в этом шаге выше. Не забудьте сохранить файл с именем «MetalDetektor.json».
  2. Создайте сценарий, нажав синюю кнопку «Создать новый сценарий» (Create a new scenario) в верхнем правом углу, и нажмите «Продолжить» (Continue).

  3. Нажмите кнопку «Еще» (More) в нижней части экрана.
  4. Выберите «Импортировать проект» (Import Blueprint) и нажмите «Выбрать файл».

  5. Перейдите в папку, в которую вы скачивали файл «MetalDetektor.json», выберите файл и нажмите «Открыть» (Open). После этого нажмите Сохранить. Сценарий MetalDetektor будет загружен.


  6. Нажмите на название сценария и измените его на "Обнаружение металла".

Используйте следующие шаги для настройки сценария обнаружения металла.

  1. Получите ваш ключ API Bolt Cloud, нажав здесь. На рисунках ниже показано, как включить и скопировать ключ API.
  2. Вернитесь к сценарию Integromat, нажмите на первый кружок BoltIoT, а затем нажмите кнопку «Добавить».
  3. Вставьте ключ API, который вы скопировали ранее, и нажмите кнопку «Продолжить».
  4. Добавьте имя вашего устройства. Вы можете узнать имя устройства вашего WiFi-модуля Bolt, нажав здесь. Затем нажмите ОК.
  5. Для второго и третьего кружка BoltIoT вы можете нажать на выпадающее меню и выбрать «My Bolt Connection». Не забудьте добавить правильное имя устройства для каждого из них.

  6. Нажмите на математический кружок и измените значение 4 на высоту, на которой вы держите свой датчик. Затем нажмите ОК.
  7. Нажмите на красную точку между кружками математики и Gmail, замените 2 металлом, на который вы хотите получать оповещения, и нажмите ОК.
  8. Нажмите на кружок Gmail и нажмите кнопку редактирования.

  9. Добавьте свой адрес электронной почты и нажмите ОК.
  10. Нажмите кнопку «Добавить», затем продолжите и разрешите Integromat получить доступ к вашей учетной записи Gmail.

  11. Вы можете добавить больше получателей (англ. - recipients), нажав кнопку «Добавить получателя», а затем нажмите «ОК».
  12. Убедитесь, что ваша цепь включена, и нажмите кнопку Run. Сценарий будет выполняться и ждать фильтр, обозначенный «1» в кружке, который выглядит как "мысли".


На этом всё. Как только будет собран весь проект, всё, что вам нужно сделать, это установить систему таким образом, чтобы датчик указывал на пол, включить питание системы и обеспечить постоянный доступ Bolt к Интернету через ваш WiFi. Желаем вам найти побольше ценных предметов.

28.02.2019 | Уроки | Теги статьи |
Ардуино+