Оглавление:
- Шаг 1. Соберите схему ИК-приемника
- Шаг 2. Подключите сервопривод, колонку и держатель телефона
- Шаг 3: Подключите ЖК-дисплей для считывания сервопривода
- Шаг 4: Используйте код и библиотеки, прикрепленные для программирования Arduino
- Шаг 5: Подключите желаемый источник питания к Arduino и используйте пульт дистанционного управления для поворота крепления
- Шаг 6. Прочтите это для объяснения исходного кода
- Шаг 7. Посмотрите мое видео на Youtube, чтобы получить помощь
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Это руководство было создано во исполнение требований проекта Makecourse в Университете Южной Флориды (www.makecourse.com).
Хотите сделать поворотное крепление для телефона, чтобы можно было просматривать содержимое телефона в портретной или альбомной ориентации, не удерживая его? Тогда не смотрите дальше.
Для создания этого проекта вам понадобятся:
- Микроконтроллер Arduino и IDE
- USB-кабель для загрузки кода
- Макетная плата
- Провода перемычки
- ЖК дисплей
- сервопривод
- Колонна, которую можно прикрепить к сервоприводу
- ИК-пульт
- ИК-приемник
- резистор 10 кОм
- Kenu Airframe + Phone Clip (или что-то, что удерживает телефон на месте)
- Батарея 9 В для портативного питания или только Arduino с питанием от USB
Шаг 1. Соберите схему ИК-приемника
Сначала подключите GND и + 5V от Arduino к шинам питания на макете. Затем подключите резистор 10 кОм с шины питания + 5 В к выходному контакту фототранзистора ИК-приемника. Затем используйте перемычку для подключения к контакту 11 на Arduino от выходного контакта ИК-приемника. Затем с помощью двух перемычек отправьте заземление и + 5 В на соответствующие контакты ИК-приемника. RC-фильтр, изображенный на схеме выше, не нужен. Наконец, я не делал схему, показанную на этом этапе, и исходный код для нее представлен на картинке.
Шаг 2. Подключите сервопривод, колонку и держатель телефона
Теперь используйте две перемычки, чтобы перейти от земли и + 5 В шин питания макетной платы к коричневому и красному проводам сервопривода соответственно. Затем с помощью одной перемычки прикрепите контакт 9 Arduino к оранжевому проводу сервопривода.
Затем прикрепите колонку к головке сервопривода, как показано на втором рисунке.
Наконец, прикрепите что-нибудь, чтобы удерживать телефон на колонке, например, Kenu Airframe +, как показано на третьем рисунке.
Шаг 3: Подключите ЖК-дисплей для считывания сервопривода
Подключите заземление и + 5 В от шин питания макетной платы к соответствующим контактам на ЖК-дисплее. Кроме того, переместите контакты SDA и SCL с ЖК-дисплея на Ardiuno. Контакты SDA и SCL Arduino можно определить с задней стороны платы Arduino: это два контакта над AREF и заземление над контактом 13. Контакт SCL - самый высокий. Это позволяет ЖК-дисплею считывать текущее положение сервопривода.
Шаг 4: Используйте код и библиотеки, прикрепленные для программирования Arduino
Загрузите файл RotatingMountCode.zip. Установите Arduino IDE и разархивируйте загруженный файл в Documents / Arduino. Убедитесь, что вы скопировали содержимое папки с моими эскизами и библиотеками в папку с эскизами и библиотеками. Откройте эскиз ServoIRandLCD и загрузите его в свой Arduino.
См. Последующие шаги для объяснения кода.
Шаг 5: Подключите желаемый источник питания к Arduino и используйте пульт дистанционного управления для поворота крепления
Либо оставьте Arduino подключенным к компьютеру, либо отключите его от компьютера и используйте батарею 9 В для подачи постоянного тока на Arduino. Наконец, используйте дешевый ИК-пульт для управления сервоприводом и, следовательно, ориентацией крепления для телефона!
Номер 1 на пульте дистанционного управления должен установить положение сервопривода на 0 градусов, номер 2 на 90 градусов и номер 3 на 180 градусов. Между тем кнопки + и - на пульте дистанционного управления должны увеличивать или уменьшать угол сервопривода на 1 градус соответственно.
Примечание. Если вы используете другой ИК-пульт, отличный от изображенного здесь, возможно, изменились ИК-коды, соответствующие различным кнопкам. Если это так, измените эскиз ServoIRandLCD, чтобы вместо этого использовать эти ИК-коды.
Шаг 6. Прочтите это для объяснения исходного кода
Исходный код скетча Arduino можно найти ниже или в ранее прикрепленном файле.zip. Необходимые библиотеки можно найти только в ранее прикрепленном файле.zip на шаге 4.
Первым делом в код включены библиотеки, необходимые для запуска всех функций в скетче. Затем он объявляет вывод 9 на Arduino как сигнальный вывод с ШИМ для сервопривода. Он также делает вывод 11 на Arduino контактом, используемым для ИК-приемника. Затем он объявляет целочисленную переменную, используемую для отслеживания положения сервопривода в градусах, и изначально устанавливает для нее значение 0 градусов. Затем он создает экземпляры требуемых объектов для объекта IRrecv, сервообъекта и объекта myDisplay LCD (который также настраивается в той же строке), чтобы эти объекты можно было использовать позже.
Затем в функции настройки последовательный порт запускается со скоростью 9600 бит / сек, поэтому при желании можно использовать монитор последовательного порта для отслеживания положения сервопривода. Он также прикрепляет объект myservo к контакту 9, запускает ИК-приемник и инициализирует ЖК-дисплей.
В функции основного цикла, тело которой выполняется только в том случае, если ИК-передача получена от ИК-приемника, ИК-приемник декодирует сигнал, отправленный ему с ИК-пульта, с помощью функции декодирования (& результатов), а затем операторы if определяют, что установить сервопривод в зависимости от полученного значения IR. Функция записи используется для установки сервопривода в соответствующие градусы, а функция чтения используется для определения текущего угла сервопривода и увеличения или уменьшения его по мере необходимости.
Наконец, текущий угол сервопривода отправляется как на последовательный монитор, так и на ЖК-дисплей с помощью функции myservo.read (), и основные циклы повторяются бесконечно.
Исходный код:
#include // Стандартная библиотека Arduino # include // ИК-библиотека #include "Wire.h" //Wire.h для ЖК-дисплея (иногда требуется) #include "LiquidCrystal_I2C.h" // ЖК-библиотека
#define servopin 9 // это определяет контакт 9 как контакт, используемый для вывода сервоуправления (оранжевый)
int RECV_PIN = 11; // ИК-фототранзистор отправляет выходной сигнал на вывод 11
int currentAngle = 0; // объявляем целочисленную переменную currentAngle и устанавливаем в 0
IRrecv irrecv (RECV_PIN); // создать экземпляр объекта ИК-приемника decode_results results; // создать экземпляр объекта decode_results. Этот объект находится отдельно от ИК-приемника.
Сервомашина; // создание экземпляра сервообъекта с именем 'myservo' // можно создать максимум восемь сервообъектов
LiquidCrystal_I2C myDisplay (0x27, 16, 2); // создаем объект LCD и настраиваем конфигурацию
void setup () {
Serial.begin (9600); // запускаем последовательный порт
myservo.attach (сервопин); // присоединяет сервопривод на выводе 9 к сервообъекту
irrecv.enableIRIn (); // запускаем приемник
myDisplay.init (); // инициализируем ЖК-дисплей
myDisplay.backlight (); // включаем подсветку ЖК-дисплея
}
void loop () {
if (irrecv.decode (& results)) // если передача получена…
{Serial.print ("Получено значение IR:");
Serial.println (результат.значение); // отображаем полученное значение
// интерпретировать полученные команды… if (results.value == 16724175) // 1 {// left myservo.write (0); }
if (results.value == 16718055) // 2 {// средний myservo.write (90); }
if (results.value == 16743045) // 3 {// правильно myservo.write (180); }
if (results.value == 16754775) // + {// увеличить currentAngle = myservo.read (); myservo.write (currentAngle + 1); } if (results.value == 16769055) // - {// уменьшить currentAngle = myservo.read (); myservo.write (currentAngle - 1); }}
irrecv.resume (); // Получаем следующее значение
// Последовательный монитор print Serial.print ("Текущая позиция сервопривода:");
Serial.println (myservo.read ()); // это извлекает положение сервопривода и отправляет его на последовательный монитор
// ЖК-печать myDisplay.clear ();
myDisplay.print ("Сервопривод:");
myDisplay.print (myservo.read ());
задержка (200); // задержка для стабилизации срабатывания сервопривода
}
Шаг 7. Посмотрите мое видео на Youtube, чтобы получить помощь
Если у вас есть вопросы, посмотрите мое частное видео на YouTube, в котором подробно обсуждается и демонстрируется проект!