Автоматическое устройство уклонения от молний (FFX).........
Я играл в Final Fantasy X и разочаровывался, пытаясь увернуться от 200 ударов молнии подряд, поэтому я создал устройство, которое делало это за меня! Зачем тратить час на что-то, если можно потратить три на автоматизацию. Предназначен для работы с клавиатурой в версии для ПК, но, вероятно, может работать и на контроллере с некоторой доработкой.
Устройство использует фоторезистор, прижатый к экрану, чтобы следить за вспышкой, указывающей на приближение удара молнии, и запускает сервопривод, который в��время нажимает клавишу уклонения ©, чтобы уклониться в 100% случаев. Потенциометр позволяет оперативно настраивать чувствительность, поэтому срабатывание происходит только при вспышке молнии. Схема подключения показывает, как его подключить в соответствии с кодом.
Технически будет работать только с питанием через USB, но его легче калибровать при подключении к компьютеру, имеющему доступ к последовательному плоттеру. На фотографии плоттера синяя линия — это значение потенциометра, зеленая линия — значение фоторезистора, а красная линия — счетчик уклонения. Используйте горшок, чтобы переместить синюю линию достаточно высоко, чтобы зеленая линия пересекала ее только во время вспышки. Когда красная линия пересечет отметку 200, все готово!
Спецификация материалов:
Серводвигатель SG90: https://www.amazon.com/Micro-Helicopter-Airplane-Remote-Control/dp/B072V529YD
Потенциометр: (я использовал 1К, подойдет любое сопротивление) https://www.amazon.com/Sscon-Breadboard-Potentiometer-Arduino-3386MP-102/dp/B07QX3BX9R
Резистор 10 кОм и фоторезистор: https://www.amazon.com/DIYables-Photocell-Photoresistor-Arduino-Raspberry/dp/B0CM5YNGSF
Любой ардуино: (я использовал нано) https://www.amazon.com/10K-Resistor-Tolerance-Resistors-Resistance/dp/B0B4JFPHTW
Протоборд, чтобы все было в порядке.
2 винта M2: сервоприводы обычно поставляются в комплекте с этими винтами.
Удлинитель сервопривода, я использовал и очень рекомендую его от Codemers: https://www.printables.com/model/491795-servo-sg90-rounded-arm-extender
Печатные детали:
Подставка для сервопривода: печать сбоку, удерживает сервопривод над клавиатурой.
Чашка фоторезистора: закрывает фоторезистор, поэтому окружающий свет не влияет на измерения.
Кодекс: (Я всего лишь инженер-механик, будьте со мной полегче)
//Кросс_Инжиниринг 04.05.25
#include //убедитесь, что плагин Servo установлен
Сервопривод мойсерво;
INT ServoRest = 115; // исходное положение сервопривода в градусах, при необходимости отрегулируйте его, чтобы исходное положение было горизонтальным
интервал ServoMove = 20; //ход сервопривода в градусах, при необходимости отрегулируйте
int ServoPush = ServoRest+ServoMove;
число интервалов = 0; //подсчитывает циклы активации для отправки через последовательный монитор
int PhotoPin = A5; //чувствительный вывод фоторезистора, должен б��ть аналоговым выводом
int AdjustPin = A2; //чувствительный вывод для потенциометра, должен быть аналоговым выводом
int LEDpin = 13; //pin13 имеет встроенный светодиод (возможно, потребуется изменить, если используется другая плата)
инт АдгустПауэр = 10; //Я использовал цифровой вывод для питания потенциометра, вместо этого мог про��то подключиться к выходу 5 В
int PhotoValue = 0;
ИНТ КорректВалюе = 0;
недействительная настройка() {
// поместите сюда свой код установки для однократного запуска:
pinMode (AdjustPower, ВЫХОД);
pinMode (LEDpin, ВЫХОД);
myservo.attach(5); // конт��кт, к которому подключен провод сервопривода DATA (желтый)
Серийный.начало(9600);
myservo.write(ServoRest); //перемещает сервопривод в исходное положение при запуске
}
недействительный цикл() {
// поместите сюда свой основной код для многократного запуска:
digitalWrite(AdjustPower, ВЫСОКИЙ); //см. выше, я использовал D10 для питания горшка
PhotoValue = AnalogRead(PhotoPin); //считываем напряжение фоторезистора
AdjustValue = AnalogRead(AdjustPin); //считываем напряжение потенциометра
Serial.print(AdjustValue); //выходное напряжение потенциометра и фоторезистора, а также количество циклов в последовательный порт
Серийный.принт(",");
Serial.print(счет);
Серийный.принт(",");
Serial.println(Фотозначение);
if (AdjustValue digitalWrite(LEDpin, ВЫСОКИЙ); //Светодиод на контакте 13 загорается при каждом срабатывании сервопривода
myservo.write(ServoPush);
задерживать(



