Blog y Tutoriales

TUTORIAL: Cómo correr un script de Python al iniciar el Raspberry Pi

Acabas de armar tu robot y programar tu Raspberry Pi para controlarlo. Ya tienes tu programa en Python y corre perfectamente pero necesitas que ahora corra automáticamente cada vez que inicies tu Raspberry Pi. Llegaste al tutorial correcto.

Vamos a ver cómo hacer que cada vez que se inicie tu Raspberry Pi se corra un script Python (o cualquier otro comando en la terminal de hecho).

Para lograr nuestro objetivo vamos a utilizar el comando de linux systemd, o “System and Service Manager”.

Vamos a suponer que tienes un script Python que deseas correr con el nombre “robot.py”. Vamos a crear un archivo de servicio que tendrá las instrucciones de lo que queremos correr.

Para esto abrimos el editor y vamos a crear un archivo en lib/systemd/system/robot.service

Y pegamos el siguiente código dentro del archivo

[Unit]
Description=Mi Servicio para Robot
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python3 /home/pi/robot.py

[Install]
WantedBy=multi-user.target

Este archivo lo que hace es crear un servicio llamado “Mi Servicio para Robot” y básicamente le estamos diciendo que corra después de que el ambiente de multi-user este disponible.

El parámetro ExecStart indica los comandos que queremos correr, en este caso es nuestro script de Python, pero en realidad podemos agregar cualquier comando que deseemos (como si lo corriéramos en la terminal). El Type como “idle” se asegura que se corra el comando una vez que el Raspberry haya terminado de cargar todo después de la secuencia de inicio.

Nuestro archivo debe tener el permiso como 644 para poder ejecutar:

sudo chmod 644 /lib/systemd/system/robot.service

ahora que está definido vamos a utilizar systemctl para configurar que el script se corra al inicio

sudo systemctl daemon-reload
sudo systemctl enable robot.service

Listo, ahora puedes reiniciar tu Raspberry y comprobar que se haya corrido. Una vez reiniciado tu Raspberry puedes revisar si tu script corrió con la siguiente línea

sudo systemctl status robot.service

Si estás utilizando el Raspberry para controlar un robot y no tienes conecado un monitor no podrás saber si ya terminó de reiniciarse, por lo que puedes agregar una línea en tu código que encienda un LED en un pin GPIO para indicarte que ya está cargado tu programa.

Fuente:  https://www.raspberrypi-spy.co.uk/2015/10/how-to-autorun-a-python-script-on-boot-using-systemd/

Drivers para Arduino Compatible (Genérico) para Windows 7, 8, 10, macOS

Los drivers vienen incluidos en el Software Arduino IDE o se descargar automáticamente por el Sistema Operativo, pero en caso de que no se reconozca correctamente el Arduino se pueden instalar manualmente

 

DESCARGAR DRIVERS WINDOWS

 > VER TUTORIAL DE INSTALACIÓN WINDOWS <

 

DESCARGAR DRIVERS MAC OS MOJAVE

> VER TUTORIAL DE INSTALACIÓN MAC OS MOJAVE< 

**NOTA: SI TU ARDUINO SIGUE SIN APARECER, INTENTA PROBAR CON OTRO CABLE USB QUE SÍ FUNCIONE PARA COMPROBAR QUE EL CABLE ESTE BUENO. SI ES EL CABLE Y COMPRASTE EL KIT CON NOSOTROS TE LO REPONEMOS SIN COSTO.

 

DESCARGAR DRIVERS MAC OS HIGH SIERRA

DESCARGAR DRIVERS MAC OS SIERRA

DESCARGAR DRIVERS MAC OS EL CAPITAN

  > VER TUTORIAL DE INSTALACIÓN MAC OS < 

En algunas Mac hay que darle permiso al Driver de ser ejecutado. Para esto seguir las siguientes instrucciones DESPUÉS de haber instalado los drivers:

 

Dudas o problemas nos puedes contactar en chips@mecatronium.com

TUTORIAL MOTOR DE PASOS 28BYJ-48

Paso #1 Descripción

Este motor es un motor de pasos del tipo bipolar, útil para aplicaciones que requieran de precisión y alta repetitividad.  El motor además cuenta con un engrane de reducción acoplado al eje de salida. Este engrane nos permite tener un mayor torque de salida y tiene una relación de 1:64; es decir, el engrane tiene que dar 64 revoluciones para que el eje de 1 revolución. Observando la hoja de datos este motor tiene un ángulo de paso de 5.625°. Esto quiere decir que para que el engrane gire 1 revolución requiere dar 360°/5.625° = 64 pasos. Pero como se tiene una relación de 1:64 (1 vuelta el eje; 64 vueltas el engrane); entonces para que el eje del motor gire 1 revolución son necesarios 64*64 pasos, es decir 4096 pasos.

Por lo tanto el eje requiere de 64 vueltas de 64 pasos = 4096 pasosEl engrane tiene que dar 64 vuelta para que el eje de 1

El engrane requiere 64 pasos para 1 vuelta

Es importante saber que este valor que se indica es cuando se opera el motor en Paso Medio (Half Step). Si se trabaja en Paso Completo (Full Step) entonces solo se requieren 2048 pasos.

Paso #2 Características

  • Voltaje Nominal: 5VDC
  • Numero de Fases: 4
  • Relación de Velocidad: 1/64
  • Angulo de Paso: 625°
  • Frecuencia: 100Hz
  • Resistencia DC 50Ω±7%(25℃)
  • Torque >34.3mN.m(120Hz)

Paso #3 Componentes

  • Arduino Uno
  • BYJ48 Motor de Pasos 5v
  • ULN2003 Motor driver Module
  • 5v fuente de poder externa mayor de 300Ma
  • Cable Jumper

Paso #4 Descripción del Tutorial

La actividad a realizar es controlar la velocidad de un motor de pasos con velocidad mediante un potenciómetro conectado al puerto análogo A0 del Arduino.

Paso #5 PinOut

Pines de Tarjeta ULN2003

Descripción

1N1

Fase 1 Azul

1N2

Fase 2 Rosa

1N3

Fase 3 Amarillo

1N4

Fase 4 Naranja

GND

+

5V Fuente externa

 

Paso #6 Hardware

 

Paso #7 Librerías

Existen muchas maneras de controlar los motores de pasos, afortunadamente existe una librería ya incluida en el ambiente de programación de Arduino que utilizaremos para hacernos la vida más fácil. Para esto es necesario únicamente inicializar correctamente el motor con la siguiente función:

Stepper (steps, pin1, pin2, pin3, pin4)

Esta función está especificada en Paso Completo (Full Step) por lo que indicamos el número de pasos completos para dar 1 revolución. En el caso de nuestro motor estos son 2048 pasos. Los siguientes parámetros son los 4 pines a los que tenemos conectados cada uno de las 4 fases de nuestro motor.

Observando la conexión de nuestro motor se conectaron todos los cables en el mismo orden en que vienen del conector. Siguiendo esta configuración el pin2 y pin3 están invertidos, pero los podemos invertir desde el código.

A continuación se especifica la velocidad del motor en RPM con la función, la cual debe ser siempre positiva.

setSpeed(rpms)

Y finalmente se mueve el motor con la siguiente función:

step(steps)

Es importante notar que esta función bloquea la ejecución del programa, es decir, no se podrá hacer ninguna otra operación mientras el motor se esté moviendo, lo cual puede ser importante dependiendo de la aplicación que estemos implementando. Lo que podemos hacer es mover el motor pocos pasos a la vez y mandar llamar esta función continuamente para así poder ejecutar operaciones mientras se mueve el motor.

Si deseamos que el motor gire en sentido contrario simplemente enviamos un número negativo de steps en la función step. No se permite definir una velocidad negativa.

La tarjeta contiene un Circuito Integrado ULN2003 contiene 7 pares de Arreglos Darlington, que simplemente son 2 transistores conectados en cascada con el propósito de permitirnos controlar una corriente más alta con corriente baja. Es decir con la baja corriente del Arduino podemos controlar la alta corriente que exige el motor.

La tarjeta además incluye unos LEDs para saber en qué paso se encuentra el motor.

 

Paso #8 Software


#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
int stepCount = 0;  // numero de pasos el motor a dado

void setup() {
Serial.begin(9600);
}

void loop() {
// Lee el valor del sensor:
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 0, 20);
Serial.println(motorSpeed);
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
myStepper.step(stepsPerRevolution / 1000);
}
}

Paso #9 Video

Si gustan ver una explicación MUY detallada pueden observar este video. https://www.youtube.com/watch?v=B86nqDRskVU

 

 

 

TUTORIAL SENSOR DE FLUJO YF-S201

Paso #1 Descripción

Este sensor se acopla muy bien a la tubería de agua de cualquier edificio o casa y contiene un sensor de molino  para medir la cantidad de líquido que ha pasado a través de él. También tiene un sensor magnético de efecto Hall que emite un impulso eléctrico con cada revolución. El sensor de efecto Hall está sellado para permanecer seguro y seco.

Read More