Оглавление:

GPS-отслеживание 3D-карты: 9 шагов
GPS-отслеживание 3D-карты: 9 шагов

Видео: GPS-отслеживание 3D-карты: 9 шагов

Видео: GPS-отслеживание 3D-карты: 9 шагов
Видео: Полезная функция Google карт 2024, Июль
Anonim
GPS-слежение за 3D-картой
GPS-слежение за 3D-картой
GPS-отслеживание 3D-карты
GPS-отслеживание 3D-карты

Этот проект представляет собой напечатанную на 3D-принтере 3D-карту с дорогами, реками и городами со светодиодными маяками, показывающими местонахождение членов семьи. Он может показать, ходит ли ребенок в школу, или просто местонахождение обоих родителей. Мы также можем использовать его, чтобы предсказать, когда родители вернутся домой, чтобы ужин можно было приготовить в нужное время. Это также просто классный проект, который стоит продемонстрировать семье и друзьям.

Надеюсь, вам понравится делать это руководство или узнать о моем проекте.

Шаг 1. Получение 3D-карты

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

www.instructables.com/id/Making-a-3D-Print…

Шаг 2: Подготовка карты для светодиодных вставок

Теперь, когда у вас есть трехмерная карта с дорогами, городами и реками, нам нужен способ указать, где находится человек на карте. Я использовал двухцветные 3-миллиметровые светодиоды RG, потому что основная цель карты - показать, где находятся двое родителей. В некоторых местах я использовал светодиод RGB, чтобы показать, где находится старший ребенок. На Raspberry Pi есть ограничение в 28 контактов, поэтому выбирайте расположение светодиодов с умом. В итоге я использовал около 24 из них, так что с вами все будет в порядке.

Я обнаружил, что для сверления PLA хорошо подходит обычное сверло по дереву, и я относился к нему так же, как к дереву.

В местах, где карта была слишком толстой, я просверливал базовый слой большим сверлом, а затем видимый выше слой правильным сверлом 3 мм.

Шаг 3: вставьте светодиоды

Вставляем светодиоды
Вставляем светодиоды

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

Шаг 4: Подключите светодиоды к Raspberry Pi

Я непосредственно припаял светодиоды к Raspberry Pi, однако, если у вас есть один с предварительно припаянным разъемом, или вы хотите использовать pi для чего-то еще, я бы предложил использовать перемычки для каждого светодиода, что означает, что Пи съемный. Как видите, после того, как я припаял светодиод, я сложил ножки, чтобы они не торчали сзади.

Шаг 5: проверьте светодиоды

Проверьте светодиоды
Проверьте светодиоды

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

импортировать RPi. GPIO как GPIO

время импорта GPIO.setmode (GPIO. BCM) для i в диапазоне (0, 28): GPIO.setup (i, GPIO. OUT) для i в диапазоне (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print («Это было:» + str (i)) z = raw_input («Далее?»)

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

Шаг 6: Код для включения светодиода по запросу

То, как я реализовал этот проект, включает в себя один Raspberry Pi Zero W с базовым веб-сайтом, который позволяет вам включать пин-код. Это означало, что основной Pi 4, который обычно включен и работает, может выполнять обработку, а затем маленькому Pi 0 нужно только включить контакт, что немного усложняет задачу. Я сделал это, потому что это соответствует моей настройке, а также я чувствовал, что Pi 0 может быть немного медленным для того, что мы будем делать позже.

импортировать RPi. GPIO как GPIO

время импорта из флакона import Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) для i в диапазоне (0, 28): GPIO.setup (i, GPIO. OUT) @ app.route ('/') def index (): return request.remote_addr @ app.route ("/ off /") def turn_off (pin): GPIO.output (int (pin), GPIO. LOW) return "Off" @ app.route ("/ off / all") def alloff (): для i в диапазоне (0, 28): GPIO.output (i, GPIO. LOW) return "off" @ app.route ("/ on /") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) return "On", если _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Это работает так: он ожидает URL-адреса IP-адреса пи, а затем включения или выключения, а затем номера контакта.

сохраните этот код в домашнем каталоге Raspberry Pi и назовите его «pin_website.py»

Вам нужно будет настроить это на автоматический запуск, поэтому для этого в типе терминала: sudo nano / etc / profile

Внизу этого файла добавьте "python3 pin_website.py &"

Знак "&" важен, так как он заставляет его работать в фоновом режиме и, следовательно, позволяет продолжить загрузку.

Шаг 7: Как получить местоположение

Как получить местоположение
Как получить местоположение

Используя IFTTT, вы можете настроить службу, чтобы, когда телефон входит в определенное место, он мог отправлять вам электронные письма, пинговать веб-адрес или отправлять вам сообщения в Telegram.

Шаг 8: Как все это работает

У меня есть настройка Server Pi, на котором размещен мой веб-сайт, с переадресацией портов и статическим DNS с использованием службы, предоставляемой https://freedns.afraid.org/. Многие из них довольно сложны, и вам нужно иметь представление о переадресации портов, я мог бы дать инструкции о том, как сделать эту часть в другой раз.

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

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

Вот мой код Flask / Python, который затем запрашивается веб-перехватчиками с использованием IFTTT:

from flask import Flask, render_template, request, jsonify

import os from datetime import datetime from map import * app = Flask (_ name_) l = 0 setup () @ app.route ('/') def index (): return request.remote_addr @ app.route ('/ mum / enter / ') def mu (location): mum.current_loc (location) return «Спасибо за обновление, мама!» @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) return "Спасибо за обновление, папа!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) return "Hey, Me" @ app.route ('/ mum / exit /') def mume (location): mum.offline (местоположение) return "Спасибо за обновление, мама!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) return "Спасибо за обновление, папа!" @ app.route ("/ child / exit /") def child_exit (l): me.offline (l) return "Hey, Me" @ app.route ("/ reset") def redo (): setup () return "Сброс настроек!" если _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

и map.py:

импортировать http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json время импорта import threading import os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freedns.afraid.org') conn.request ("GET", str ("/ dynamic / update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) response = conn.getresponse () conn = http.client. HTTPConnection (':192.168.1000) "GET", str ("/ off / all")) response = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = open ("pind", "w") f.write (str (-1)) f.close () f = open ("pinm", "w") f.write (str (-1)) f.close () класс мама: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, «четыре креста»: 18, «llandrinio»: 25, «welshpool»: 27} f = open («pin», «w») f.write (str (-1)) f.close () time. sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ off /") + str (last_loc)) response = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) response = conn.getresponse () last_loc = locs [l] def offline (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13," четыре креста ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (" / off / ") + str (last_loc)) response = conn.getresponse () f = open (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") class dad: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "четыре креста": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," четыре креста ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.reques t ("GET", str ("/ off /") + str (dlast_loc)) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) response = conn.getresponse () dlast_loc = locs [l] def offline (l): global dlast_loc locs = {"welshpool": 3, "lynclys «: 1,« home »: 23,« shrewsbury »: 0,« llanymynech »: 6,« четыре креста »: 15,« llandrinio »: 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ off /") + str (dlast_loc)) response = conn.getresponse () f = open ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") class me: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = open ("pinm", "w") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000 ') conn.request ("GET", str ("/ off /") + str (mlast_loc)) response = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("GET", str ("/ on /") + str (lo cs [l])) response = conn.getresponse () mlast_loc = locs [l] def offline (l): global dlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ off /") + str (mlast_loc)) response = conn.getresponse () f = open ("pinm", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Шаг 9: Создайте свое собственное, вдохновляясь моим проектом

Итак, я знаю, что предыдущий шаг будет очень трудным для понимания, поэтому я оставлю его как демонстрацию вам, как сделать карту, и иметь возможность иметь Raspberry Pi, который включает и выключает светодиоды. Теперь вам нужно создать скрипт Python, который с помощью IFTTT отправит вам электронное письмо. Затем вам нужно найти фрагмент кода для чтения электронной почты, что довольно просто (погуглите). Затем, когда вы прочитаете электронное письмо и найдете местоположение родителя, используйте операторы «если», чтобы найти, какой штифт включить.

Мигающий свет на карте означает, что они только что покинули территорию.

Как включить светодиоды на другом пи из python:

импортировать http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') # замените это на IP-адрес карты raspberry pi conn.request ("GET", str ("/ off / 2 ")) # это отключает контакт номер 2 response = conn.getresponse () # это запрашивает URL, а затем карта pi считывает это и отключает контакт номер 2

В принципе, я надеюсь, что вы можете использовать то, что я сделал с моей 3D-картой, в качестве вдохновения для создания своей собственной карты GPS-слежения.

Рекомендуемые: