Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Ультразвуковые глаза

Компоненты и расходные материалы

Ультразвуковой датчик - HC-SR04 (общий)
× 2
Arduino Nano R3
× 1
Фоторезистор
× 1
Интегрированная светодиодная матрица MAX7219 Maxim 8x8
× 2
половинный размер макетной платы без пайки
× 1
Перемычки (общие)
× 1
Резистор 330 Ом
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Я хотел создать необычный проект, используя несколько матричных светодиодов 8x8 и несколько ультразвуковых датчиков ... что-то отличное от того, что другие люди обычно делают с ультразвуком, - и я хотел, чтобы это было весело и весело.

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

Что нам понадобится?

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

Я использую 2 модуля HC-SR04, которые я купил в e-Bay. Вы можете найти их супер-дешево.

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

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

Модули используют SPI, поэтому нам нужно всего 5 проводов для подключения к Arduino для управления изображениями глаз на обоих дисплеях. Нам, конечно же, нужны два из них!

ПРИМЕЧАНИЕ. В предоставленном коде используется Hardware SPI . , поэтому, если вы используете другую плату Arduino, чем Nano, проверьте, какие из контактов являются контактами аппаратного SPI для MOSI и SCK, и подключите их соответствующим образом!

Вам также понадобится совместимый с Arduino микроконтроллер какого-либо типа. Я использую Nano (совместимый), потому что он достаточно мал, чтобы поместиться в корпусе, имеет USB для питания / программирования прошивки и у него есть стек GPIO для подключения всего.

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

Последние несколько вещей, которые вам понадобятся, - это фоторезистор (LDR) для обнаружения света, резистор 330 Ом и связка макетных проводов, от мужчины к женщине и от женщины к женщине.

ПРИМЕЧАНИЕ. В этом проекте вы можете использовать провода любого цвета ... нет необходимости использовать те же цвета, которые я указываю, но , всегда рекомендуется использовать красный и черный для POWER и GND, а также использовать другие цвета для других проводов, поскольку это позволяет очень легко определить, какие провода имеют питание, через них, и какие провода используются для данных и сигналов.

Собираем все вместе

Давайте начнем с того, что подключим Nano к макетной плате в самом конце, чтобы USB свисал с края, но при этом все контакты оставались подключенными к плате.

Подключение POWER и GND

Теперь подключите черный провод от соединения GND на Nano к шине GND на макетной плате. Теперь сделайте то же самое с красным проводом, подключив 3 В (или 5 В, если это все, что у вас есть) к шине ПИТАНИЯ на макете.

Пока мы работаем над GND и POWER, давайте подключим черный провод между двумя шинами GND с каждой стороны макета. Проделайте то же самое с красным проводом и двумя шинами POWER.

* Примечание: Некоторым матричным светодиодным панелям может потребоваться 5 В вместо 3,3 В в зависимости от марки. Если вы обнаружите, что результаты ненадежны, попробуйте использовать вывод 5V от Arduino.

Подключим ультразвуковые датчики

Подключите черный провод между контактами GND на каждом из ультразвуковых датчиков и шиной GND на макетной плате. Сделайте то же самое с красным проводом и контактами VCC (POWER) на датчиках и шиной POWER на макете.

Теперь давайте подключим следующие белые и синие провода:

  • Белый провод от контакта TRIG на датчике 1 до цифрового контакта 2 на Arduino.
  • Синий провод от контакта ECHO на датчике 1 к цифровому контакту 3 на Arduino.
  • Белый провод от контакта TRIG на датчике 2 до цифрового контакта 4 на Arduino.
  • Синий провод от контакта ECHO на датчике 2 до цифрового контакта 5 на Arduino.

Прекрасная работа! Вот и все Ультразвуковые датчики!

Подключение двух светодиодных матричных дисплеев 8x8

Подключите черный провод между входящим контактом GND на одном из светодиодных матричных дисплеев и шиной GND на макетной плате. Проделайте то же самое с красным проводом и входящим контактом VCC (POWER) на дисплее и шиной POWER на макетной плате.

Подключите черный провод между исходящим контактом GND дисплея 1 и входящим контактом GND дисплея 2. Сделайте то же самое с красным проводом и исходящим контактом VCC на первом дисплее и входящим контактом VCC на дисплее 2.

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

  • Подключите желтый провод между исходящим контактом SCK (Clock) на первом дисплее и входящим контактом SCK на втором дисплее.
  • Подключите синий провод между выходным контактом MOSI (данные) на первом дисплее и входящим контактом MOSI на втором дисплее.
  • Подключите белый провод между исходящим контактом CS (Select) на первом дисплее и входящим контактом CS на втором экране.

Здорово! Теперь давайте подключим остальную часть дисплея к макету ...

  • Подключите желтый провод между входящим контактом SCK на первом дисплее и цифровым контактом 13 на Arduino.
  • Подключите синий провод между входящим выводом MOSI на первом дисплее и цифровым выводом 11 на Arduino.
  • Подключите белый провод между входящим контактом CS на первом дисплее и цифровым контактом 10 на Arduino.

ПОМНИ: В предоставленном коде используется Hardware SPI . , поэтому, если вы используете другую плату Arduino, чем Nano, проверьте, какие из контактов являются контактами аппаратного SPI для MOSI и SCK, и подключите их соответствующим образом!

Отличная работа. Теперь перейдем к заключительным этапам подключения ...

Подключение LDR и резистора для обнаружения окружающего света

Прежде чем мы подключим эти провода, зачем мы вообще делаем этот шаг? Что ж, я рад, что вы спросили! LDR, подключенный к Arduino, позволит нам определять, светло или темно вокруг UltrasonicEyes, и мы собираемся использовать эту информацию, чтобы соответственно сделать светодиоды ярче или затемненными.

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

Хорошо, давайте завершим этот последний шаг, чтобы мы могли перейти к его использованию в 3D-корпусе!

Подключите LDR через 2 ряда контактов на макетной плате, как показано на схеме выше. Оставьте место, чтобы разместить резистор и провод, идущий к Arduino.

Подключите резистор 330 Ом между одним рядом контактов на одной стороне LDR и шиной GND макета.

Подключите красный провод между рядом контактов на другой стороне LDR и шиной POWER макета.

Наконец, давайте подключим коричневый провод между рядом контактов, к которым подключен резистор 330 Ом, и аналоговым контактом 5 (A5) на Arduino. Это должен быть аналоговый вывод, потому что нам нужно считывать значение от 0 до 255 из LDR (сила света), а не только от 0 до 1, как мы получаем от цифрового вывода.

Давайте включим его и загрузим код

Ладно, все, мы все подключены. Пришло время подключить USB-кабель между Arduino и вашим компьютером и загрузить приведенный ниже эскиз UltrasonicEyes, чтобы увидеть, как все работает.

После того, как он включится и код будет загружен, пройдитесь перед своими датчиками или переместите руки перед ними и посмотрите, что произойдет!

Хотите сделать его более постоянным?

Хотите сделать свои UltrasonicEyes более долговечными? Посмотрите мое видео, в котором рассказывается о том, как взять макетную версию и припаять ее к макетной плате ...

А затем распечатайте 2 части корпуса на любом 3D-принтере и соберите, как я сделал в видео!

Я также собираюсь расширить UltrasonicEyes, чтобы иметь емкостную сенсорную кнопку (или обычную кнопку) для переключения между различными формами глаз ... вы можете посмотреть мои эксперименты здесь ...

Вы можете посмотреть остальные мои проекты и видео на сайте ... unknownmaker.com

Следуйте за мной в Twitter, Facebook, Instagram и tindie

https://www.patreon.com/unexpectedmaker

Вот и все!

Код

  • Ультразвуковые глаза
Ультразвуковые глаза C / C ++
 #include  // Мы используем это для управления светодиодными матричными дисплеями 8x8 - вам нужно будет установить эту библиотеку из диспетчера библиотек, если у вас ее еще нет. # include  // Мы используем NewPing для управления ультразвуковыми датчиками - вам нужно будет установить эту библиотеку из диспетчера библиотек, если у вас ее еще нет. // определение контактов, прикрепленных к светодиодному матричному дисплею 1 // # определение CLK_PIN 13 / / Мы используем аппаратный SPI - убедитесь, что вы подключили контакт CLK к аппаратному контакту CLK на вашем устройстве // # define DATA_PIN 11 // Мы используем аппаратный SPI - убедитесь, что вы подключили контакт MOSI к контакту аппаратного MOSI на вашем устройстве # define CS_PIN 10 // Chip Select pin #define MAX_DEVICES 2 // количество дисплеев - нам нужно 2, по одному для каждого глаза # define LIGHT A5 // Мы используем аналоговый контакт 5 для чтения значения освещенности с LDR / / Мы используем аппаратный SPI, который автоматически MD_MAX72XX mx =MD_MAX72XX (CS_PIN, MAX_DEVICES); // Инициализируем 2 матричных дисплея # define t1 2 // Триггерный вывод на ультразвуковом датчике 1 # define e1 3 // Эхо-вывод на ультразвуковом датчике 1 # define t2 4 // Триггерный вывод на ультразвуковом датчике 2 # define e2 5 // Echo контакт на ультразвуковом датчике 2 # define maxDist 400 // максимальное расстояние для ультразвукового импульса NewPing eyeR (t2, e2, maxDist); // Инициализировать ультразвуковой датчик 2NewPing eyeL (t1, e1, maxDist); // Инициализируем ультразвуковой датчик 1 // Мы отслеживаем текущее состояние системы с помощью этой целочисленной переменной, таким образом, после моргания мы можем отвести глаза назад, чтобы посмотреть в последнее направление, в котором они находились // Возможные состояния:// 0:смотреть вперед // 1:смотреть вправо // 2:смотреть влевоint currentState =-1; // Мы сохраняем время и расстояние для пингов для каждого ультразвукового датчика в этих переменных long duration1, duration2; int distance1, distance2; // Мы хотим, чтобы мигание было случайным образом вставлено в cyclefloat nextBlink =millis () + 1000; // Мы сохраняем текущую интенсивность света в этой переменной float lightAmount =0; uint8_t eye_forward [COL_SIZE] ={0b00111100, 0b01000010, 0b01011010, 0b10101101, 0b10111101, 0b10011001, 0b01000010}, 0_BRIGHT01100_C_E_BR001100_0_BRT1001100] 0b11011001, 0b11111001, 0b10110001, 0b01000010, 0b00111100}; uint8_t eye_left [COL_SIZE] ={0b00111100, 0b01000010, 0b01001110, 0b10010111, 0b10011111, 0b10001101, 0b01000010, 0b00111100}; uint8_t eye_blink [COL_SIZE] ={0b00000000, 0b00111100, 0b01111110, 0b11111111, 0b10111101, 0b11000011, 0b01111110, 0b00111100}; void setup () {// Инициализируем библиотеку отображения матрицы mx.begin (); // Устанавливаем режимы вывода для ультразвукового датчика 1 pinMode (t1, OUTPUT); pinMode (e1, ВХОД); // Устанавливаем режимы вывода для ультразвукового датчика 2 pinMode (t2, OUTPUT); pinMode (e2, ВХОД); // Устанавливаем каждый триггер на ультразвуковых датчиках так, чтобы он начинался с LOW digitalWrite (t1, LOW); digitalWrite (t2, LOW); // Устанавливаем режим вывода LDR как INPUT pinMode (LIGHT, INPUT); // Начнем с глаз, смотрящих вперед ShowEye_Forward (); currentState =0;} void loop () {// считываем текущий уровень освещенности lightAmount =analogRead (LIGHT); // убедитесь, что значение света находится в диапазоне максимальной яркости дисплеев lightAmount =(lightAmount / 255) * MAX_INTENSITY; // устанавливаем интенсивность mx.control (MD_MAX72XX ::INTENSITY, lightAmount); // Пингуем левый глаз с рекурсией 5 distance1 =eyeL.ping_median (5); // Задержка 500 мс перед тем, как пинговать правый глаз, чтобы не получить противоречивых результатов delay (500); // Пинг правого глаза с рекурсией 5 distance2 =eyeR.ping_median (5); // Проверяем, не пора ли попытаться вставить мигание if (nextBlink  0) {ShowEye_Right (); currentState =1; } // Теперь, если distance2 больше distance1 и distance2 также больше 0, тогда мы хотим смотреть влево, иначе if (distance1  0) {ShowEye_Left (); currentState =2; } // задерживаем цикл на 250 мс, чтобы глаза успели правильно отобразить delay (250);} / ************************* ************* // ************ MAX7219 Материал ************ // ******* ******************************* / void ShowEye_Right () {// Очистить отображение mx.clear (); // Устанавливаем текущую яркость дисплея mx.control (MD_MAX72XX ::INTENSITY, lightAmount); // Перебираем каждую строку дисплеев for (uint8_t row =0; row  

Изготовленные на заказ детали и корпуса

Печать на любом 3D-принтере, никаких специальных настроек не требуется. Печать на любом 3D-принтере, никаких специальных настроек не требуется.

Схема

ultrasoniceyes_final_Th84xpUyB2.fzz

Производственный процесс

  1. Атака НЛО!
  2. Умные жалюзи
  3. 3D RGB Arduclock
  4. MyRiver
  5. Железный человек
  6. Простой датчик препятствий с Arduino
  7. Игра с джойстиком
  8. Найди меня
  9. Управление увлажнителем Arduino
  10. Маленький вездеход