Aprende cómo hacer una cámara de seguridad de giro e inclinación remotamente visible con una Raspberry Pi. Este proyecto se puede completar en una mañana con solo las partes más simples. Aquí está el resultado final:
Que necesitas
- Raspberry Pi 2 o 3 con tarjeta Micro SD
- Arduino UNO o similar
- 2 x servos micro o mini hobby
- Cámara web USB
- Cables de conexión macho a macho
- Cables de conexión macho a hembra
- Lazos de cremallera surtidos
Construyendo la cámara de seguridad
Conecte un servo bocina (las pequeñas "formas" de plástico) a cada servo utilizando el tornillo provisto. La forma particular en realidad no importa, aunque cuanto más grande, mejor. No apriete demasiado el tornillo.
Ahora usa lazos de cremallera para unir un servo al otro en ángulo recto. Uno de ellos será pan (de izquierda a derecha), mientras que el otro se inclinará (arriba y abajo). No importa cuál hace qué, se puede ajustar en el código.
Finalmente, conecte su cámara web a uno de los servos. Podrías usar cierres con cremallera para esto, aunque mi cámara web venía con un clip atornillado en la parte inferior. Lo quité y usé el tornillo para sujetarlo al claxon. Para mayor estabilidad, es posible que desee montar todo el equipo en una caja o caja. Una simple caja de cartón hace el truco bastante bien. Puede cortar un agujero cuadrado y montar una servo-descarga en la superficie, sin embargo, una cremallera será suficiente.
Una palabra sobre las cámaras web
No todas las webcams USB se crean por igual. Conecte su cámara web al puerto USB de su Pi y ejecute este comando:
lsusb
Este comando muestra información sobre todos los dispositivos USB conectados al Pi. Si su cámara web no aparece en la lista aquí, es posible que desee probar un concentrador USB con alimentación y repetir el comando. Si aún no se reconoce la cámara web, es posible que tenga que comprar una cámara web compatible.
Configuración Servo
Mientras que los servos pueden parecer espeluznantes y complejos, son realmente muy simples de conectar. Los servos funcionan con modulación de ancho de pulso (PWM), que es una forma para que los sistemas digitales imiten las señales analógicas. Las señales PWM son esencialmente una señal rápida ON - OFF. Una señal que está ENCENDIDA o ALTA se describe utilizando el ciclo de trabajo. El ciclo de trabajo se expresa como un porcentaje y describe por cuánto tiempo está encendida la señal. Una señal PWM con un ciclo de trabajo del 25% estará ENCENDIDA el 25% del tiempo, y DESACTIVADA por el 75% restante. La señal no está ENCENDIDA al inicio y luego DESACTIVADA para siempre, se pulsa regularmente durante un período de tiempo muy corto.
Los servos escuchan estos pulsos y actúan en consecuencia. Usar un ciclo de trabajo del 100% sería lo mismo que 5v "regular", y 0% sería lo mismo que el suelo. No se preocupe si no entiende completamente cómo funciona PWM, aún puede controlar los servos (Extreme Electronics es un buen lugar para obtener más información).
Hay dos formas principales de usar PWM: hardware o software. Hardware PWM a menudo proporciona una latencia más baja (cuánto tiempo entre el servo que recibe el comando y el que se mueve) que el software PWM, sin embargo, el Pi solo tiene un pin de hardware compatible con PWM. Los circuitos externos están disponibles para proporcionar múltiples canales de hardware PWM, sin embargo, un Arduino simple también puede manejar la tarea, ya que tienen múltiples pines de hardware PWM.
Aquí está el circuito:
Vuelva a verificar el pinout de su Pi, estos varían ligeramente entre los modelos. Necesitas descubrir cómo están conectados tus servos. Los servos requieren tres cables para controlarlos, sin embargo, los colores varían ligeramente:
- El rojo es positivo, conéctelo a Pi + 5v
- Marrón o negro es negativo, conéctelo a GND en el Pi
- Naranja o blanca es señal, conéctalo a los pines Arduino 9 y 10
Configuración de Arduino
¿Nuevo en Arduino? Comience aquí Comenzar con Arduino: una guía para principiantes Comenzar con Arduino: una guía para principiantes Arduino es una plataforma de prototipos de electrónica de código abierto basada en hardware y software flexible y fácil de usar. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas .
Una vez que los servos estén conectados, abra el IDE de Arduino en su computadora y cargue este código de prueba. No olvide seleccionar la placa y el puerto correctos en Herramientas> Tablero y Herramientas> Menús de puertos
#include // Import the library Servo servoPan, servoTilt; // Create servo objects int servoMin = 20, servoMax = 160; // Define limits of servos void setup() { // Setup servos on PWM capable pins servoPan.attach(9); servoTilt.attach(10); } void loop() { for(int i = servoMin; i servoMin; --i) { // Move servos from maximum to minimum servoPan.write(i); servoTilt.write(i); delay(100); // Wait 100ms } }
#include // Import the library Servo servoPan, servoTilt; // Create servo objects int servoMin = 20, servoMax = 160; // Define limits of servos void setup() { // Setup servos on PWM capable pins servoPan.attach(9); servoTilt.attach(10); } void loop() { for(int i = servoMin; i servoMin; --i) { // Move servos from maximum to minimum servoPan.write(i); servoTilt.write(i); delay(100); // Wait 100ms } }
Todo bien, deberías ver que ambos servos se mueven lentamente hacia adelante y hacia atrás. Observe cómo "servoMin" y servoMax "se definen como 20 y 160 grados (en lugar de 0 y 180). Esto se debe en parte a que estos servos baratos son incapaces de mover con precisión los 180 grados completos, y también debido al tamaño físico de la cámara web impide que se use todo el rango. Es posible que deba ajustar estos para su configuración.
Si no funcionan en absoluto, compruebe que el circuito esté conectado correctamente. Las placas también pueden variar en calidad, así que considere invertir en un multímetro para verificar.
Los servos son casi demasiado poderosos para que Arduino funcione, por lo que estarán alimentados por el Pi. El riel de 5v en el Pi está limitado a 750mA proporcionado a todo el Pi, y el Pi dibuja aproximadamente 500mA, dejando 250mA para los servos. Estos micro servos consumen aproximadamente 80mA, lo que significa que el Pi debería ser capaz de manejar dos de ellos. Si desea utilizar más servos o modelos más grandes y de mayor potencia, es posible que deba utilizar una fuente de alimentación externa.
Ahora suba el siguiente código al Arduino. Esto escuchará los datos seriales entrantes (seriales como en Universal Serial Bus, o USB). El Pi enviará estos datos por USB al Arduino, diciéndole dónde mover los servos.
#include // Import the library Servo servoPan, servoTilt; // Create servo object String data = ""; // Store incoming commands (buffer) void setup() { // Setup servos on PWM capable pins servoPan.attach(9); servoTilt.attach(10); Serial.begin(9600); // Start serial at 9600 bps (speed) } void loop() { while (Serial.available()>0) { // If there is data char singleChar = Serial.read(); // Read each character if (singleChar == 'P') { // Move pan servo servoPan.write(data.toInt()); data = ""; // Clear buffer } else if (singleChar == 'T') { // Move tilt servo servoTilt.write(data.toInt()); data = ""; // Clear buffer } else { data += singleChar; // Append new data } } }
Puede probar este código abriendo el monitor serie ( arriba a la derecha> Serial Monitor ) y enviando algunos datos de prueba:
- 90P
- 0P
- 20T
- 100T
Observe el formato de los comandos: un valor y luego una letra. El valor es la posición del servo, y la letra (en mayúsculas) especifica el servo de giro o inclinación. Como estos datos se transmiten desde el Pi en serie, cada carácter viene de a uno por vez. El Arduino tiene que "almacenar" estos hasta que se haya transmitido todo el comando. La letra final no solo especifica el servo, también le permite al Arduino saber que no hay más datos en este comando.
Finalmente, desconecte su Arduino de la computadora y conéctelo a la Raspberry Pi a través de la conexión de puerto USB habitual .
Configuración Pi
Ahora es el momento de configurar el Pi. Primero, instale un sistema operativo Cómo instalar un sistema operativo en su Raspberry Pi Cómo instalar un sistema operativo en su Raspberry Pi A continuación, le mostramos cómo instalar y ejecutar un nuevo sistema operativo en su Pi, y cómo clonar su configuración perfecta para un desastre rápido recuperación. Lee mas . Conecte la cámara web y el Arduino al USB de Pi.
Actualiza el Pi:
sudo apt-get update sudo apt-get upgrade
Instalar movimiento:
sudo apt-get install motion
Motion es un programa creado para manejar la transmisión de la cámara web. Maneja todo el trabajo pesado e incluso puede realizar grabaciones y detección de movimiento (intente construir un sistema de seguridad de captura de movimiento. Construir un sistema de seguridad Motion Capture usando una Raspberry Pi. Crear un sistema de seguridad de captura de movimiento usando una Raspberry Pi. construir con Raspberry Pi, uno de los más interesantes y definitivamente útiles es el sistema de seguridad de captura de movimiento. Más información). Abra el archivo de configuración de movimiento:
sudo nano /etc/motion/motion.conf
Este archivo proporciona muchas opciones para configurar Motion. Configure de la siguiente manera:
- daemon on - Ejecute el programa
- framerate: 100 - Cuantos fotogramas o imágenes / segundo para transmitir
- stream_localhost off - Permitir el acceso a través de la red
- ancho 640 - Ancho de video, ajuste para su webcam
- altura 320 - Altura del video, ajuste para su cámara web
- stream_port 8081 - El puerto para salida de video a
- output_picture off - No guardar ninguna imagen
Este es un archivo bastante grande, por lo que puede utilizar CTRL + W para buscar líneas. Una vez que haya terminado, presione CTRL + X y luego confirme para guardar y salir.
Ahora edite un archivo más:
sudo nano /etc/default/motion
Establecer "start_motion_daemon = yes". Esto es necesario para asegurar que Motion se ejecuta.
Ahora descubra su dirección IP:
ifconfig
Este comando mostrará los detalles de conexión de red para el Pi. Mire la segunda línea, inet addr . Es posible que desee establecer una dirección IP estática (¿qué es una IP estática? ¿Qué es una dirección IP estática, cómo puedo obtener uno y sus ventajas / desventajas? ¿Qué es una dirección IP estática? ¿Cómo obtengo uno y sus ventajas / desventajas? En las redes domésticas, las direcciones IP generalmente no son fijas, pero caen dentro de rangos específicos. Una dirección IP estática no cambia. ¿Cuáles son las ventajas de esto, y por qué querrías una? Lea más), pero por ahora toma nota de este número
Ahora comienza el movimiento:
sudo service motion start
Puede detener o reiniciar Motion cambiando "inicio" a "detener" o "reiniciar".
Cambie a su computadora y navegue al Pi desde un navegador web:
http://xxx.xxx.x.xx:8081
Donde xxx.xxx.x.xx es la dirección IP Pi. El colon seguido de un número es el puerto que se configuró anteriormente. ¡Todo bien, deberías ver la transmisión desde tu cámara web! Intenta moverte y ver cómo se ven las cosas. Es posible que deba ajustar la configuración de brillo y contraste en el archivo de configuración. Es posible que deba enfocar la cámara web: algunos modelos tienen un pequeño anillo de enfoque alrededor de la lente. Gire esto hasta que la imagen sea más nítida.
De vuelta en el Pi, crea una carpeta y navega hacia ella:
mkdir security-cam cd security-cam/
Ahora instala Twisted:
sudo apt-get install python-twisted
Twisted es un servidor web escrito en Python, que escuchará los comandos y luego actuará en consecuencia.
Una vez instalado, crea una secuencia de comandos de Python para ejecutar comandos (mueve los servos).
sudo nano servos.rpy
Observe cómo la extensión del archivo es ".rpy" en lugar de "py". Aquí está el código:
# Import necessary files import serial from twisted.web.resource import Resource # Setup Arduino at correct speed try: arduino = serial.Serial('/dev/ttyUSB0', 9600) except: arduino = serial.Serial('/dev/ttyUSB1', 9600) class MoveServo(Resource): isLeaf = True def render_GET(self, request): try: # Send value over serial to the Arduino arduino.write(request.args['value'][0]) return 'Success' except: return 'Failure' resource = MoveServo()
Ahora inicie el servidor web:
sudo twistd -n web -p 80 --path /home/pi/security-cam/
Vamos a descomponerlo - "-p 80" especifica el puerto (80). Este es el puerto predeterminado para las páginas web. "-path / home / pi / security-cam /" le dice a Twisted que inicie el servidor en el directorio especificado. Si realiza algún cambio en los scripts dentro de la carpeta "security-cam", deberá reiniciar el servidor ( CTRL + X para cerrarlo y luego ejecutar el comando nuevamente).
Ahora crea la página web:
sudo nano index.html
Aquí está el código de la página web:
Make Use Of DIY Security Camera #container { /* center the content */ margin: 0 auto; text-align: center; } Ahí tienes. Su propia cámara de red Pan y Tilt. Si desea exponer su cámara web a Internet, recuerde considerar los peligros. 5 Peligros que debe tener en cuenta al señalar sus cámaras de seguridad para el hogar 5 Peligros que debe considerar al señalar sus cámaras de seguridad Es importante considerar cuidadosamente dónde ubica sus cámaras y qué partes de su casa a las que apuntan. Mantener las cosas seguras es importante, pero también lo es mantener su privacidad. Lea más: luego, busque en el reenvío de puertos ¿Qué es el reenvío de puertos y cómo puede ayudarme? [Explicaciones de MakeUseOf] ¿Qué es el reenvío de puertos y cómo puede ayudarme? [MakeUseOf Explains] ¿Lloras un poco cuando alguien te dice que hay un problema de reenvío de puertos y por eso tu nueva y brillante aplicación no funcionará? Su Xbox no le permitirá jugar juegos, sus descargas de torrents se rechazan ... Lea más, para que su enrutador sepa dónde enviar las solicitudes entrantes. Podría agregar una fuente de alimentación externa Pi to Go? 3 formas de alimentar una Raspberry Pi para proyectos portátiles Pi to Go? 3 formas de impulsar una Raspberry Pi para proyectos portátiles ¿Desea sacar su Raspberry Pi de la casa y participar en algunos proyectos móviles? Necesitará una batería de algún tipo, pero hay varias opciones disponibles. Leer más y adaptador de Wi-Fi para una plataforma realmente portátil.
¿Has hecho algo genial con una cámara web y un Pi? Déjame saber en los comentarios, ¡me encantaría ver!