Оглавление:
- Шаг 1. Получение 3D-карты
- Шаг 2: Подготовка карты для светодиодных вставок
- Шаг 3: вставьте светодиоды
- Шаг 4: Подключите светодиоды к Raspberry Pi
- Шаг 5: проверьте светодиоды
- Шаг 6: Код для включения светодиода по запросу
- Шаг 7: Как получить местоположение
- Шаг 8: Как все это работает
- Шаг 9: Создайте свое собственное, вдохновляясь моим проектом
Видео: GPS-отслеживание 3D-карты: 9 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Этот проект представляет собой напечатанную на 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-слежения.
Рекомендуемые:
GPS-трекер: 6 шагов
GPS-трекер: Привет, ребята, в этом видео мы сделаем GPS-трекер с использованием Esp 8266 (nodemcu) и GPS-модуля neo 6m, так что давайте начнем
Сделайте ГРАНИЦЫ GPS с помощью Arduino: 8 шагов
Создание ГРАНИЦ GPS с помощью Arduino: в этом уроке мы узнаем, как создать ГРАНИЦЫ GPS с помощью Arduino, это полезно, когда у вас есть робот, и вы не хотите, чтобы он выходил за пределы указанной области. , на дисплее отобразится «Снаружи»
GPS Para Norma (EEPROM регистратора данных): 5 шагов
GPS Para Norma (регистратор данных EEPROM): простой регистратор данных о домашних животных GPS на основе записи Arduino и EEPROM ================================== ==================
Создание собственных карт для GPS-навигатора Garmin: 8 шагов (с изображениями)
Создание пользовательских карт для вашего GPS-навигатора Garmin: если у вас есть GPS-навигатор Garmin, предназначенный для пеших прогулок и других мероприятий на свежем воздухе (включая серии GPSMAP, eTrex, Colorado, Dakota, Oregon и Montana, среди некоторых других), вам не нужно соглашайтесь на простые карты, которые были предварительно загружены на него. Э
Учебное пособие по LoRa GPS Tracker - LoRaWAN с Dragino и TTN: 7 шагов
Учебное пособие по LoRa GPS Tracker | LoRaWAN с Драгино и TTN: Эй, как дела, ребята! Акарш от CETech. Пару проектов назад мы смотрели на LoRaWAN Gateway от Dragino. Мы подключили различные узлы к шлюзу и передали данные от узлов к шлюзу, используя TheThingsNetwork в качестве s