Автоматизация игры «Динозавр» в Chrome на Arduino и LDR с Python
Компоненты и материалы
| Arduino UNO | 1 |
| Фоторезистор (LDR), 5 МОм | 1 |
О проекте
Скучно в карантин? 🥴 Давайте поиграем в «Динозавра» из Chrome... ;)


Но что, если игра тоже надоедает? Автоматизируем её! 😉
Нам понадобятся Arduino и LDR. Также нужны базовые знания Python.
Настройка Arduino

Подключите Arduino UNO с LDR. (Не забудьте добавить резистор!)

Загрузите код для аналогового чтения значений LDR:
// Arduino Dino Game ! :)
int sensorPin = A0; // LDR на A0
int sensorValue = 0; // переменная для хранения значения с LDR
int thresholdValue = 45; // подбирается методом проб и ошибок
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin); // читаем датчик
// Serial.println(sensorValue); // раскомментируйте при первом запуске, чтобы определить thresholdValue
if(sensorValue <= thresholdValue){ // условие обнаружения препятствия
Serial.println(1); // отправляем 1, если условие истинно
}
delay(40); // задержка 40 мс
}
Закрепите LDR на мониторе, считайте аналоговые значения при появлении препятствия, установите это значение как thresholdValue и обновите условие if. Готово! ✌️ Часть с Arduino завершена.
Можно добавить сервопривод для нажатия «Пробела», но в карантине его не было. Поэтому используем Python для эмуляции нажатия.
Код на Python

Скопируйте код, внесите необходимые изменения. Используются модули pyserial (чтение последовательного порта) и PyAutoGUI (эмуляция нажатия клавиши «Вверх»).
import subprocess
import time
import pyautogui
import serial
subprocess.call([r'C:\Program Files\Mozilla Firefox\Firefox.exe',
'-new-tab', 'https://chromedino.com/'])
# Для Chrome укажите путь к chrome.exe
# Я использую Firefox, поэтому открываю chromedino.com
time.sleep(6) // время на загрузку
print("All sett :)")
ser = serial.Serial('COM4') // обновите на ваш порт Arduino
ser.baudrate = '9600'
while True:
h1 = ser.readline() // чтение данных
if h1:
ss = int(h1.decode('utf-8')) // декодирование в int
if ss == 1: // препятствие обнаружено
print("Oh :< Jump!! ")
pyautogui.press('up') // авто-нажатие [UP]
Запустите Python-код и подберите положение LDR методом проб и ошибок. Автоматизированная игра готова! 💃 🕺

Можно улучшить, добавив второй LDR для обнаружения птиц.
GitHub: https://github.com/rafitc/arduDino
Код
Фрагмент кода #1 (Arduino)
// Arduino Dino Game ! :)
int sensorPin = A0;
int sensorValue = 0;
int thresholdValue = 43;
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
// Serial.println(sensorValue);
if(sensorValue <= thresholdValue){
Serial.println(1);
}
delay(50);
}
Фрагмент кода #2 (Python)
import subprocess
import time
import pyautogui
import serial
subprocess.call([r'C:\Program Files\Mozilla Firefox\Firefox.exe',
'-new-tab', 'https://chromedino.com/'])
time.sleep(6)
print("All sett :)")
ser = serial.Serial('COM4')
ser.baudrate = '9600'
while True:
h1 = ser.readline()
if h1:
ss = int(h1.decode('utf-8'))
if ss == 1:
print("Oh :< Jump!! ")
pyautogui.press('up')
GitHub
https://github.com/rafitc/arduDino
Схемы
Производственный процесс
- Создание потрясающей системы Ambilight для монитора на Arduino
- TeleBall: ретро портативная игровая консоль на Arduino — собирайте сами Breakout и Tennis for Two
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- Автоматическая LEGO Star Wars пушка на Arduino Uno
- Arduino Breakout на сенсорном TFT 2.4″: классическая аркада своими руками
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano