Мазмуну:

GPS Tracking 3D картасы: 9 кадам
GPS Tracking 3D картасы: 9 кадам

Video: GPS Tracking 3D картасы: 9 кадам

Video: GPS Tracking 3D картасы: 9 кадам
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Июль
Anonim
GPS Tracking 3D картасы
GPS Tracking 3D картасы
GPS Tracking 3D картасы
GPS Tracking 3D картасы

Бул долбоор 3D басылган 3D карта, жолдор, дарыялар жана шаарлар, үй -бүлө мүчөлөрүнүн жайгашкан жерин көрсөтүү үчүн LED маяктары бар. Бул бала мектепте же жокпу, же жөн эле ата -энесинин жайгашкан жерин көрсөтө алат. Биз муну ата -энелерибиздин үйгө кайсы убакта келерин алдын ала билүү үчүн да колдонсок болот, ошондо кечки тамакты керектүү убакытта жасаса болот. Бул ошондой эле үй -бүлөңүзгө жана досторуңузга көрсөтүү жана көрсөтүү үчүн эң сонун долбоор.

Бул Нускамалыкты жасоо сизге жагат деп үмүттөнөм, же мен жасаган долбоор жөнүндө билүүдөн ырахат аласыз

1 -кадам: 3D картасын алуу

Сиздин аймактын 3D картасын алуу үчүн, мен аны түзүү процессинде сизге жардам берүү үчүн өзүнчө көрсөтмө жаздым. Окутууга шилтеме бул жерде:

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

2 -кадам: Картаны LED киргизүү үчүн даярдоо

Эми сизде 3D картасы бар, жолдору, шаарлары жана дарыялары бар, бизге картада адамдын кайда экенин көрсөтүүнүн жолу керек. Мен эки түстүү 3мм RG светодиоддорун колдондум, анткени картанын негизги максаты эки ата-эненин кайда экенин көрсөтүү. Кээ бир жерлерде улуу баланын кайда экенин көрсөтүүгө уруксат берүү үчүн RGB светодиодун колдондум. Raspberry Piде 28 казыктын чеги бар, андыктан диоддордун жайгашкан жерлерин акылдуулук менен тандаңыз. Мен алардын 24кө жакынын колдонуп бүттүм, андыктан сиз жакшы болушуңуз керек.

PLA бургулоо үчүн, мен кадимки жыгач бургучу жакшы иштегенин көрдүм жана жыгачка кандай мамиле кылсам, ошондой мамиле кылдым.

Карта өтө калың болгон жерлерде мен чоң катмары менен базалык катмарын, анан туура 3мм бургу менен көрүнүп турган үстүңкү катмарды тешип чыкмакмын.

3 -кадам: Светодиоддорду салыңыз

LED диоддорун салыңыз
LED диоддорун салыңыз

Эми бизде светодиоддордун отура турган тешиктери бар, биз аларды жабыштыра алабыз. PVA же Superglue бул үчүн жакшы иштейт, мен PVA анын тегерегине чуркап чыгып, аны мөөрлөп, супер клей да абдан жакшы иштегенин байкадым. Ар бир светодиод менен алар бир нече мм гана көрүнүп турган жагына жабышып турганын текшериңиз, анткени LEDлердин жабышып калышы бир аз иретсиз көрүнөт. Арткы жактагы буттар жөнүндө кабатыр болбоңуз, биз аларды ширетилгенден кийин бүктөй алабыз.

4 -кадам: LEDди Raspberry Pi менен туташтырыңыз

Мен LEDди Raspberry Pi менен түздөн-түз коштум, бирок эгерде сизде алдын ала ширетилген баш бар болсо же сиз пиди башка нерсеге колдонууну кааласаңыз, анда мен ар бир LED үчүн секиргич зымдарды колдонууну сунуштайт элем, башкача айтканда Пи алынып салынат. Байкасаңыз болот, мен светодиодду ширеткенден кийин, буттарымды бүктөп койдум, алар аркасына жабышпай калды.

5 -кадам: Светодиоддорду текшериңиз

LED сыноо
LED сыноо

Бардык светодиоддор иштеп жатканына ынануу үчүн, мен ар бир мүмкүн болгон тешикчеден өтүүчү сценарийди иштетип, аларды бирден жарык кылдым, ал мен кирүү басканда экинчисине өтөт. Бул мага кайсы пин номери кайсы жерде кылганын белгилөөгө мүмкүндүк берди, бул абдан пайдалуу болду.

GPO катары RPi. 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) басып чыгаруу ("Бул болгон:" + str (i)) z = raw_input ("Кийинки?")

Бул болуп жатканда, мен текст файлына кайсы пин кайсы жерде жана кайсы түстө экенин белгилеп кетет элем. Сиз муну кылышыңыз керек, анткени ал кийинки кадамда абдан пайдалуу.

6 -кадам: Сураныч, LEDди күйгүзүү үчүн код

Мен бул проектти жасоо ыкмасына бир Raspberry Pi Zero W кирет, анын негизги сайты пинди күйгүзүүгө мүмкүндүк берет. Бул демейде иштеп турган жана иштеп жаткан негизги Pi 4 иштетүүнү жасай алат дегенди билдирет, анан кичинекей Pi 0 гана пинди күйгүзүп, нерселерди бир аз татаалдаштырат. Мен муну кылдым, анткени бул менин орнотуума туура келет, ошондой эле Pi 0 кийинчерээк жасай турган иштерибиз үчүн бир аз жайыраак болушу мүмкүн экенин сездим.

GPO катары RPi. GPIO импорттоо

колбадан импорттоо убактысы 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) "Off" @app.route ("/off/all") def alloff (): i үчүн диапазондо (0, 28): GPIO.output (i, GPIO. LOW) "өчүрүү" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) return "On" if _name_ == '_main_': app.run (debug = True, host = '0.0. 0.0 ')

Бул иштөө жолу - бул пи анын IP дарегинин URL'ин күтөт, андан кийин күйгүзүү же өчүрүү, анан пин номерин.

бул кодду Raspberry Pi үй каталогуна сактап, "pin_website.py" деп атоо

Сиз муну автоматтык түрдө иштетүү үчүн орнотушуңуз керек, андыктан терминалдын түрүндө: sudo nano /etc /profile

Бул файлдын ылдый жагына "python3 pin_website.py &" кошуңуз

"&" Маанилүү, анткени аны фондо иштетет, ошондуктан жүктөөнү улантууга мүмкүндүк берет

7 -кадам: Жайгашууну кантип алуу керек

Жайгашууну кантип алуу керек
Жайгашууну кантип алуу керек

IFTTTти колдонуп, сиз телефонду белгилүү бир жерге киргенде, сизге электрондук почта аркылуу жөнөтө алышы үчүн, же веб -дарегин жөнөтүшү же телеграмма аркылуу билдирүү жөнөтүшү үчүн кызматты орното аласыз.

8 -кадам: Мунун баары кантип иштейт

Менде орнотуу - бул Server Pi, менин веб -сайтымды жайгаштырат, https://freedns.afraid.org/ тарабынан берилген кызматты колдонуу менен порт жөнөтүү жана статикалык DNS. Мунун көбү абдан татаал, жана порт жөнөтүү жөнүндө түшүнүккө ээ болушуңуз керек, мен бул бөлүктү башка жолу кантип жасоо керектигин үйрөтө алам.

Муну кыла турган дагы бир ыкма - пи -ге билдирүүлөрдү алуу үчүн телеграмманы колдонуу, же, балким, эң оңой - бул электрондук каттарды окуган жана ошол аркылуу жайгашкан жер жаңыртууларын алган электрондук почта окурманы орнотуу.

Мен Telegram ботун же электрондук почтанын окурманын сынап көргөн эмесмин, бирок ал жерде сизге кантип көрсөтө турган көптөгөн окуу куралдары бар.

Мына, менин Flask / Python кодум, андан кийин webhooks тарабынан IFTTT аркылуу суралат:

колбадан импорттоодон Flask, render_template, request, jsonify

картаны импорттоо датаны импорттоо /') def mu (жайгашкан жери): mum.current_loc (жайгашуу) кайтуу "Жаңыртуу үчүн рахмат, апа!" @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 (жайгашуу): mum.offline (жайгашкан жери) "Кайтарууңуз үчүн рахмат, апа!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "The Update for Thanks, Dad!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Кайра коюу!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

жана map.py:

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

импорт ast, json импорт убактысы импорт сайты импорт os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('ozodns.afraid.org')) conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) answer = conn.getresponse () conn = http.client. HTTPConnection ('192.1000'.251) "Get", str ("/off/all")) жооп = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = ачык ("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. уйку (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("Get", str ("/off/") + str (last_loc)) жооп = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("Get", str ("/on/") + str (locs [l])) жооп = 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 (" /өчүрүү/") + str (last_loc)) жооп = conn.getresponse () f = ачык (" пин "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") класстын атасы: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "four crosses": 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 = ачык (" 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)) answer = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("Get"), str ("/on/") + str (locs [l])) жооп = conn.getresponse () dlast_loc = locs [l] def off (l): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crosses ": 15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("Get", str ("/off/") + str (dlast_loc)) жооп = conn.getresponse () f = open ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") классым: def current_loc (l): global mlast_loc locs = {"үй": 22, "мектеп": 2, "oswestry": 14} f = ачык ("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)) жооп = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("Get", str ("/on/") + str (мына cs [l])) жооп = conn.getresponse () mlast_loc = locs [l] def offline (l): глобалдык dlast_loc locs = {"үй": 22, "мектеп": 2, "oswestry": 14} байланыш = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("Get", str ("/off/") + str (mlast_loc)) жооп = conn.getresponse () f = open ("pinm"), "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

9 -кадам: Менин Долбоорумдан Илхамдан Өзүңүздү Куруңуз

Ошентип, мен мурунку кадамды түшүнүү өтө кыйын болорун билем, андыктан мен аны картаны кантип жасоону көрсөтүп, LED ди күйгүзүп жана өчүрө турган малина пи болушу үчүн калтырам. Эми сиз IFTTTди колдонуп, сизге электрондук кат жөнөтүүчү python скриптин түзүшүңүз керек. Андан кийин, электрондук почтанын кодун окуу керек, бул абдан оңой (google it). Андан кийин, сиз электрондук катты окуп, ата -энеңиздин жайгашкан жерин тапканыңызда, кайсы пинти күйгүзүү керек экенин билүү үчүн 'if' сөздөрүн колдонуңуз.

Картада жаркыраган жарык бул аймактан жаңы эле чыгып кеткенин билдирет

Питондон башка пиоддо LEDди күйгүзүүнүн жолу төмөндөгүдөй:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #муну малина пи картасынын IP дареги менен алмаштырыңыз conn.request ("GET", str ("/off) /2 ")) # бул 2 -пин номерин өчүрөт жооп = conn.getresponse () # бул URL сурайт, анан карта pi муну окуп, пин 2 номерин өчүрөт

Негизинен, мен 3D картам менен кылган нерселеримди GPS көзөмөл картасын түзүү үчүн шыктандыруу катары колдоно аласыз деп үмүттөнөм.

Сунушталууда: