Как объединить шляпу pimoroni с наклоном и движением глаз? - PullRequest
0 голосов
/ 13 апреля 2019

Будучи новичком в коде и python, у меня возникли проблемы с интеграцией кнопок для управления панорамированием Pimoroni в программном обеспечении для видеонаблюдения Motioneye. Я нашел код для сервоконтроллера adafruit PCA9685, который будет вызывать скрипт bash при нажатии кнопки. Затем bash-скрипт будет вызывать Python-скрипт, который будет непрерывно панорамировать или наклонять сервопривод, пока нажаты кнопки, что я бы хотел сделать. К сожалению, я не знаю, что изменить, чтобы заставить его работать с сервоприводом Pimoroni.

MotionEye https://github.com/ccrisan/motioneye/wiki

Пантиловая шапка https://shop.pimoroni.com/products/pan-tilt-hat

Скрипт для управления наклоном панорамирования в движении с помощью сервоконтроллера adafruit PCA9685 https://github.com/luetzel/motion_eye_servo_action

Я попытался изменить выводы GPIO в коде и импортировал pantilthat в код. Тем не менее, это не похоже на работу. Это даст мне

Remote I/O error

Ниже приведен пример кода для наклона вниз. Опять же, это для драйвера Adafruit PCA9685.

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

С уважением Кирст

#!/usr/bin/env python
from __future__ import division
import time

# Import the PCA9685 module.
import Adafruit_PCA9685
import RPi.GPIO as GPIO
import pantilthat
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# power-up servo controller
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, 0)
time.sleep(.5)

# Initialise the PCA9685 using the default address (0x40).
pwm = Adafruit_PCA9685.PCA9685()

# Configure min and max servo pulse lengths (450 total, 25 corresponds to 10 degrees)
servo_min = 225  # Min pulse length out of 4096
servo_max = 725  # Max pulse length out of 4096

with open('/etc/motioneye/vert_pos', 'r') as f:
    vert_pos = int(f.readline())
    print vert_pos
    f.close()

# Set frequency to 60hz, good for servos.
pwm.set_pwm_freq(60)

if ( vert_pos != servo_max ):
        vert_pos += 25
        pwm.set_pwm(0, 0, vert_pos)
        with open('/etc/motioneye/vert_pos', 'w') as f:
            f.write(str(vert_pos))
            f.close()

# power-up servo controller
time.sleep(.5)`
GPIO.output(18, 1)

raise SystemExit```


1 Ответ

0 голосов
/ 16 мая 2019

Я не уверен, что возможно сделать именно то, что вы ищете.Функциональные кнопки в motioneye просто запускают скрипт, если вы хотите больше двигать камеру, вам нужно снова нажать кнопку, а не удерживать ее нажатой.Однако довольно просто получить кнопку действия, работающую со шляпой пантильта.Во-первых, я предполагаю, что у вас есть движение глаз и бег на малиновом пи бегом.Если это так, то создайте файл с именем 'left_1' в каталоге '/ etc / motioneye'. Затем отредактируйте его и добавьте следующее:

#!/bin/bash
/usr/bin/python3 /etc/motioneye/left.py

Теперь сделайте этот файл исполняемым: sudo chmod 777 left_1

Теперь создайте left.py с помощью следующего кода:

#!/usr/bin/python

import time
import pantilthat

currentPos = pantilthat.get_servo_one()
newPos = currentPos +20
if newPos >= 80: newPos = 80
pantilthat.servo_one(newPos)
time.sleep(1)

Здесь нужно отметить одну вещь: 80 - это максимальная шахта, которая может двигаться влево, проверьте свою. ? Для правой стороны сделайте то же самое, но назовите файлы соответствующим образом,код для right.py:

#!/usr/bin/python

import time
import pantilthat

currentPos = pantilthat.get_servo_one()
#print (currentPos)
newPos = currentPos - 20
if newPos <= -80: newPos = -80
pantilthat.servo_one(newPos)
time.sleep (1)

вверх и вниз одинаковы, но меняя 'servo_one' на 'servo_two'

Наконец, полезно иметь кнопку для перемещения камерывернуться к «0».Для этого создайте файл с именем «preset1_1» со следующим:

#!/bin/bash
/usr/bin/python3 /etc/motioneye/reset.py

и py-файл с именем «reset.py»:

#!/usr/bin/python

import time
import pantilthat

pantilthat.servo_one(0)
pantilthat.servo_two(0)
time.sleep(1)

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...