Триггер человеческой цепи

Основная идея — создать триггер, который можно активировать, коснувшись двух пластин на противоположных стенах. Это должны сделать несколько человек, держась за руки.

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

Есть игрушка, которая делает почти то же самое, что и я (там её можно увидеть). Но я не нашёл информации о том, как сделать её самостоятельно. Есть ли у вас идеи, как это создать?

, 👍2

Обсуждение

Интересная идея... Думаю, обнаружить **двух** человек будет сложно. Что, если один человек коснётся одной пластины рукой, а к другой потянется длинным металлическим стержнем?, @Andy

Да, есть много способов схитрить, но для офисного хэллоуинского квеста это должно подойти (проще найти несколько человек, чем длинный металлический прут). Кстати, я уже нашёл другой [проект](http://www.instructables.com/id/Body-LED-Light-10-An-Experiment-in-Human-Conduc/) на усилителе + транзисторе. Но сначала проверю решение от @A3ruz, оно выглядит самым простым., @Alexander

Человеческое тело, безусловно, обладает измеримым сопротивлением. Я замерил около 1,5 МОм, держа щупы мультиметра. Попытка измерения с двумя людьми, держащимися за руки, дала всего 1,5 МОм, так что, похоже, проблема была в контакте щупов., @Nick Gammon

Вот самодельная игрушка по ссылке, которую вы дали. Это не Arduino, но надеюсь, она вам поможет. https://en.vmaker.tw/archives/work/the-energy-stick, @seth b


3 ответа


-1

Вы можете сделать это с помощью Arduino! Используйте любой из контактов АЦП При наличии некоторого сопротивления на выводах произойдет изменение тока АЦП! Попробуйте оба варианта +ve > (люди) > ADC -ve > (люди) > ADC Просто проведите несколько экспериментов и, вероятно, заметите изменения на выходах АЦП. Если вы хотите сделать его более чувствительным Добавьте высокое сопротивление к выводу АЦП если вы подаете + к контактным пластинам, добавьте сопротивление от земли к этому выводу АЦП

,

Просто убедитесь, что ваш источник питания не заземлён, чтобы ток не мог течь через пол обратно к Arduino. Но в зависимости от типа пола и других факторов это может не быть серьёзной проблемой., @Gerben

Нет. АЦП имеет слишком низкое «входное сопротивление» для работы с мегаомными трактами. Вполне вероятно, что обнаружение можно осуществить, но с использованием либо специального компаратора, либо, возможно, обычного режима цифрового входа с противодействующим резистором сопротивлением в несколько мегаом, а не режима входа АЦП. Если вы действительно хотите использовать АЦП, вам потребуется предварить его высокоомным «буферным усилителем»., @Chris Stratton


-1

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

,

3

Я только что попробовал (по своему методу) и добился очень хорошей чувствительности (должно быть, хватит и для двоих), используя транзистор Дарлингтона TIP102 и несколько резисторов. Вот что у меня получилось:

R1, резистор сопротивлением 1 МОм, подтягивающий вниз на первом выводе пары Дарлингтона, необходим для того, чтобы свет не горел, когда никто не прикасается к проводам. Без него свет будет быстро включаться и выключаться.

R2, резистор сопротивлением 1 кОм, предотвращает потребление Arduino слишком большого тока (поскольку это может повредить контакту) в случае, если ваш A0 находится в режиме ВЫХОДА и установлен на НИЗКИЙ уровень.

R3 не даёт светодиоду (или, в моём случае, реле переменного тока, подключенному к настоящей лампе) потреблять слишком много тока от Arduino. Примечание: выводы светодиода могут быть подключены наоборот (с обратной полярностью) на приведённой схеме.

Вот код:

// Я выпускаю этот код под стандартной лицензией MIT;
// (в дополнение к тому, что подразумевает StackExchange);

const short triggerThreshold = 10;// Чем ниже значение, тем чувствительнее;

void setup() {
  pinMode(A0, INPUT);
  pinMode(A5, OUTPUT);
  digitalWrite(A5, LOW);
  delay(1);
}

void loop() {
  short value = analogRead(A0);
  digitalWrite(A5, (value > triggerThreshold) ? HIGH : LOW);
  delayMicroseconds(10000);// 10мс;
}

Обратите внимание на настройку triggerThreshold в коде. Если вам нужна более высокая чувствительность, попробуйте изменить значение с 10 на 5. Я только что попробовал, и он стал чрезвычайно чувствительным, но при этом, похоже, стабильно отключается, когда я к нему не прикасаюсь. Естественно, если вы используете большие пластины для касания, электростатический заряд в воздухе может сработать, поэтому вам может потребоваться увеличить это значение, чтобы снизить чувствительность, в зависимости от ваших настроек.

,

У меня было много шума, поэтому я добавил функцию подавления дребезга: ~~~ // Входной сигнал зашумлен и часто переключается с высокого на низкий уровень. bool debouncedInput() { статическое состояние uint16_t = 0; // Получите на входе простое значение 1 или 0. короткое значение = (analogRead(A0) > triggerThreshold) ? 1 : 0; // Сдвигаем состояние бита влево или против нового значения и маскируем старший байт. состояние = (состояние<<1) | значение | 0xfe00; возврат (состояние == 0xffff) ? HIGH : LOW; } void loop() { digitalWrite(A5, debouncedInput()); delayMicroseconds(10000);// 10мс; } ~~~, @Jason Smith