Привет! Собственно, вопрос содержится в заглавии. Необходимо сделать датчик движения, который на определенное количество блоков перед собой проверяет на наличие энтити.
Я знаю моды, где это реализовано с помощью TileEntity, но я хочу попробовать сделать оптимизированней( на самом деле я просто не умею в тайлы, а в чужом коде разбираться не хочу ), основываясь на entityCollidedWithBlock. Основная проблема в том, что какую бы коллизию я не пытался сделать(два блока, четыре), срабатывало только при непосредственно залазе в сам блок. Можно ли как то раздвинуть границы реальности коллизии блока в длину(речь идет о именно самой изначальной коллизии, а не о добавлении новых боксов через addCollisionBoxList). Если надо хукать, будем хукать. Просто я не нашел, собственно, где именно эта коллизия происходит..

Делаю воксельные(и не только) 3D-модели для ваших Minecraft проектов. Портфолио можете увидеть полистав группу моего мода Soviet Lab — все модели сделаны мной.

tox1cozZ

aka Agravaine

Как построить датчик движения в майнкрафт.

8,435 597 2,873
Нет, нельзя, делай тайл

Eifel

Модератор

1,615 77 603

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

ZZZubec

713 27 154

В моде хранишь HashMap. Делаешь хук на PlayerTickEvent, в нём получаешь текущие координаты и сравниваешь с теми что в HashMap (если их там нет, то добавляешь).
Если координаты не совпадают — игрок движется. Если нужен не только игрок, то соответственно делаешь хук не PlayerTickEvent, а LivingUpdateEvent.
И ВЫЗЫВАЕШЬ свой собственный метод MoveEntity(EntityLiving entity) в который передаешь EntityLivingBase или просто EntityLiving
И уже в нём делаешь проверку на координаты твоего блока. И сравниваешь растояние по радиусу, в виде кода это
Vector3 vec = new Vector3( Mathf.abs(x1-x2), Mathf.abs(y1-y2), Mathf.abs(y3-y3) );
и у вектора есть такой параметр как length.
Ах да, все блоки что у тебя на карте, в момент создания или постановки в мир должны вызывать метод из мода (чтобы ты знал где они есть и в общем то тебе нужны только координаты). Их можно хранить списком или разбить на чанки, это уж от фантазии и оптимизации алгоритма.
Также у Entity (и вроде в world тоже) есть такой метод can i seek или что-то такое, который позволяет проверить виден ли блок или сущность из глаз сущности. Этот метод есть у Эндермена.

Последнее редактирование: 17 Янв 2020

Читайте также:  Самая высокая гора Майнкрафт

Источник: forum.mcmodding.ru

Minecraft 1.5.2 — Motion Detector / Детектор движения

167

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

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

Рецепты крафта:

h gb

Установка:

  1. Установите Minecraft Forge
  2. Поместите zip архив с модом в .minecraft/mods

17 — 400 — 0
11 — 296 — 0
11 — 360 — 0
11 — 351 — 0
10 — 398 — 0

Еще никто ничего не написал. Но вы можете обрадовать Леонида Якубовича, оставив первый комментарий!

Напишите комментарий или ответ Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник: all-mods.ru

Ардуино: инфракрасный датчик движения, ПИР

Тема сегодняшнего урока — датчик движения на основе пироэлектрического эффекта (PIR, passive infrared motion sensor). Такие датчики часто используются в охранных системах и в быту для обнаружения движения в помещении. Например, на принципе детектирования движения основано автоматическое включение света в подъезде или в ванной. Пироэлектрические датчики достаточно простого устроены, недороги и неприхотливы в установке и обслуживании.

Инфракрасный датчик движения HC-SR501

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

Принцип действия пироэлектрических датчиков движения

Пироэлектрики — это диэлектрики, которые создают электрическое поле при изменении их температуры. На основе пироэлектриков делают датчики измерения температуры, например, LHI778 или IRA-E700. Каждый такой датчик содержит два чувствительных элемента размером 1×2 мм, подключенных с противоположной полярностью. И как мы увидим далее, наличие именно двух элементов поможет нам детектировать движение.

Вот так выглядит датчик IRA-E700 компании Murata.

IRA-E700ST0

На этом уроке мы будем работать с датчиком движения HC-SR501, в котором установлен один такой пироэлектрический датчик. Сверху пироэлектрик окружен полусферой, разбитой на несколько сегментов. Каждый сегмент этой сферы представляет собой линзу, которая фокусирует тепловое излучение на разные участки ПИР-датчика. Часто в качестве линзы используют линзу Френеля.

irmodule_1

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

Читайте также:  Как зарегистрироваться в Майнкрафте без скачивания

Drawing1

Как только в комнату заходит человек, он попадает сначала в зону обзора первого элемента, что приводит к появлению положительного электрического импульса на нем (центральный рисунок).

Человек движется, и его тепловое излучение через линзы попадает уже на второй PIR-элемент, который генерирует отрицательный импульс. Электронная схема датчика движения регистрирует эти разнонаправленные импульсы и делает выводы о том, что в поле зрения датчика попал человек. На выходе датчика генерируется положительный импульс (правый рисунок).

Настройка HC-SR501

На этом уроке мы будем использовать модуль HC-SR501. Этот модуль очень распространен и применяется во множестве DIY проектов в силу своей дешевизны.

У датчика имеется два переменных резистора и перемычка для настройки режима. Один из потенциометров регулирует чувствительность прибора. Чем она больше, тем дальше «видит» датчик. Также чувствительность влияет на размер детектируемого объекта. К примеру, можно исключить из срабатывания собаку или кошку.

SENS-IR-HC-SR501_sh

Второй потенциометр регулирует время срабатывания T. Если датчик обнаружил движение, он генерирует на выходе положительный импульс длиной T.

Наконец, третий элемент управления — перемычка, которая переключает режим датчика. В положении L датчик ведет отсчет Т от самого первого срабатывания. Допустим, мы хотим управлять светом в ванной комнате. Зайдя в комнату, человек вызовет срабатывание датчика, и свет включится ровно на время Т. По окончании периода, сигнал на выходе вернется в исходное состояние, и датчик будет дать следующего срабатывания.

В положении H датчик начинает отсчет времени T каждый раз после обнаружения движения. Другими словами, любое шевеление человека вызовет обнуление таймера отсчета Т. По-умолчанию, перемычка находится в состоянии H.

Подключение HC-SR501 к Ардуино Уно

Для соединения с микроконтроллером или напрямую с реле у HC-SR501 имеется три вывода. Подключаем их к Ардуино по следующей схеме:

HC-SR501 GND VCC OUT
Ардуино Уно GND +5V 2

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

IR_motion_схема

Внешний вид макета

IR_motion_bb

Программа

Как уже было сказано, цифровой выход датчика HC-SR501 генерирует высокий уровень сигнала при срабатывании. Напишем простую программу, которая будет отправлять в последовательный порт «1» если датчик увидел движение, и «0» в противном случае.

const int movPin = 2 void setup() < Serial.begin(9600); pinMode(movPin, INPUT); >void loop()

Загружаем программу на Ардуино и проверяем работу датчика. Можно покрутить настройки датчика и посмотреть как это отразится на его работе.

Управление светом при помощи датчика движения

Следующий шаг — система автоматического включения света. Для того, чтобы управлять освещением в помещении, нам потребуется добавить в цепь реле.

Читайте также:  Как в Майнкрафте слезть с коня

Будем использовать модуль реле с защитой на основе опторазвязки, о котором мы уже писали в одном и уроков ( урок про реле ).

Внимание! Данная схема зажигает лампу от сети 220 Вольт. Рекомендуется семь раз проверить все соединения, прежде чем соединять схему с бытовой электросетью.

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

IR_motion_relay_схема

Внешний вид макета

IR_motion_relay_bb

Программа

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

const int movPin = 2; const int relPin = 3; void setup() < Serial.begin(9600); pinMode(movPin, INPUT); pinMode(relPin, OUTPUT); >void loop()

Загружаем программу на Ардуино, аккуратно подключаем схему к бытовой сети и проверяем работу датчика.

Заключение

Датчики движения окружают нас повсюду. Благодаря охранным системам, их можно встретить практически в каждом помещении. Как мы выяснили, они очень просты в использовании и могут быть легко интегрированы в любой проект на Ардуино или Raspberry Pi.

Вот несколько ситуаций и мест, где может пригодиться датчик движения:

  • автоматическое включение света в подъезде дома, в ванной комнате и туалете, перед входной дверью в помещение;
  • сигнализация в помещении и во дворе;
  • автоматическое открывание дверей;
  • автоматическое включение охранной видеокамеры.

Как уже говорилось в самом начале, существуют и другие способы детектирования движения. О них мы поговорим на следующих уроках!


Изменено: 20 Авг, 2016 21:03

Ардуино: инфракрасный датчик движения, ПИР : 16 комментариев

zloy admin говорит 20.11.2017 в 10:44 :

В туалете не вариант, т.к. пока стоишь, он выключает свет. Чтобы не выключал свет, приходится махать руками. Когда машешь руками, точность попадания ухудшается. Так что не вариант, ребята.

Arduino master говорит 22.04.2018 в 14:36 :

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

Cappuccino говорит 19.09.2019 в 10:23 :

тоже не вариант… минуту в толкане сидишь, читаешь газету и вырубается )) и не вариант увеличивать тайм-аут… т.к. вышел с комнаты и свет еще горит N-ное время. По умолчанию кстати перемычка в положении H стоит ))
Нужно комбинировать датчики, если хотите, чтобы свет сразу вырубился после ухода с комнаты и не вырубался в вашем присутствии…
Комбинировать PIR и микроволновый датчик, либо использовать еще ультразвуковой датчик, но с условием изменения постоянного расстояния (при изменении постоянного расстояния выдавать true)

Источник: robotclass.ru