Kit Brazo Robótico Impreso en 3D

Componentes

Componentes incluidos en el kit (Además de las piezas impresas en 3D)

Circuito

Esquemático
Circuito

Código

Para este proyecto tenemos 3 archivos distintos de Arduino

  • Servo_Posicion_Inicial – Utilizado para calibrar los servos a 90° antes de instalarlos.
  • Servo_Control_Pot – Con este programa controlamos manualmente cada uno de los servomotores con su potenciómetro.
  • Servo_Auto_Move – Con este programa podemos programar una secuencia automática para que el robot la siga.

Conclusión

En este proyecto construimos un brazo robótico el cual se encuentra listo para programarse. Al tener 3 ejes de rotación + un gripper (intercambiable) las posibilidades son limitadas únicamente por tu imaginación!

Nos encantaría ver lo que logras hacer, si tienes un video de tu robot en acción nos lo puedes compartir en los comentarios de abajo! Saludos!

Control PID con Arduino y Matriz de LED 8×8

En este proyecto vamos a utilizar el Arduino para demostrar el control con PID. Para el ejemplo vamos a utilizar una fotoresistencia la cual medirá la intensidad de luz (Process Variable – PV) y la vamos a controlar por medio de una Matriz de LED 8×8 (Output – OP). Le agregamos un potenciómetro al proyecto para poder modificar el Setpoint – SP y poder evaluar el desempeño de nuestro control PID. En este tutorial mostramos el circuito de conexión y anexamos los código de ejemplo.

La matriz de LED nos permite de una manera muy visual representar la variable de salida OP del control PID y por medio del IDE Arduino podemos visualizar las gráficas de las variables en tiempo real.

Componentes

  • Arduino UNO
  • Matriz de LED 8×8 con controlador
  • Fotoresistencia
  • Potenciómetro
  • Resistencia 470 Ohms
  • Capacitor 2200 uF
  • Protoboard
  • Jumpers
  • Base sujetadora impresa en 3D para Matriz y Fotoresistencia Descargar .stl
Listado de componentes

Instalar Software Arduino

El primer paso es instalar el software y los drivers en tu PC. Te invitamos a ver el siguiente video para hacerlo. Después puedes pasar al armado del circuito.

Circuito

Una vez instalado el software puedes pasar al armado del circuito.

Esquemático Control de PID con Arduino
Circuito Control de PID con Arduino. Recuerda que la terminal negativa del capacitor (indicada con una franja blanca y el símbolo de – ) debe ir a GND.

Código

Proporcionamos 3 programas.

  • Matrix_Escalon.ino – Lo utilizamos para realizar la prueba escalón con la que podemos determinar el comportamiento de nuestra planta.
  • Matrix_PID.ino – Con este programa podemos ahora sí realizar el control con PID. En el código podemos modificar las variables de kp, ki, kd y observar los resultados en las gráficas. El Setpoint se puede ajustar por medio del potenciómetro.
  • Matrix_PID_Criterio.ino – Este programa es idéntico al anterior, pero ahora en lugar de ajustar el Setpoint con el potenciómetro, éste se determina en código por medio de las variables sp_inicial y sp_final. El programa comienza con el Setpoint = sp_inicial y después de 1000ms cambia a sp_final.

Funcionamiento

Una vez armado el circuito y descargado el código podemos proceder a ver el video que muestra cómo correr los programas y cómo configurar nuestro controlador PID.

Conclusión

Este proyecto es una manera sencilla de demostrar el Control con PID con Arduino. Aunque tiene sus limitantes funciona como base para explicar los conceptos básicos del Control con PID.

Esperamos que el tutorial haya sido de tu utilidad si tienes dudas o comentarios nos puedes contactar en la sección de comentarios aquí abajo.

Si deseas adquirir este kit puedes solicitarlo aquí (sujeto a disponibilidad)

Saludos!!

Leave a Reply

Your email address will not be published.

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/

Leave a Reply

Your email address will not be published.

Leave a Reply

Your email address will not be published.

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 CATALINA

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

Leave a Reply

Your email address will not be published.

Armado de Brazo Robótico – Código de Ejemplo

2017-04-18 18.40.16

Armado

Descarga el PDF con las instrucciones de armado AQUÍ

Recomendaciones para el armado:

  • Tener un espacio bien iluminado
  • Identificar primero las piezas y acomodarlas en orden
  • No apretar demasiado los tornillos para evitar dañar el acrílico o madera
  • Identificar bien la dirección de las piezas
  • Cuidar la dirección de los Servos

(more…)

Leave a Reply

Your email address will not be published.

TUTORIAL RFID ARDUINO

TUTORIAL RFID ARDUINO

Paso #1 Descripción

RFID (Identificación por Radiofrecuencia) es un sistema para la transferir datos en distancias cortas (típicamente menos de 6 pulgadas). En ocasiones solamente uno de los dos dispositivos debe estar alimentado, mientras que el otro es un dispositivo pasivo.

(more…)

Leave a Reply

Your email address will not be published.

TUTORIAL MONITOREO TEMPERATURA Y HUMEDAD POR WIFI ESP8266

Paso #1 Descripción

El sensor ESP8266 es un impresionante y económico módulo de Wifi especialmente para conectarlo a un Microcontrolador y agregar comunicación a nuestro proyecto. El módulo puede ser programado para actuar como un sistema aislado.

(more…)

58 thoughts to “TUTORIAL MONITOREO TEMPERATURA Y HUMEDAD POR WIFI ESP8266”

  1. Hola muy buen aporte te felicito el motivo de mi pregunta es pedirte ayuda ya que sigo todos los pasos pero me manda error ayudame porfavor de antemano gracias

    1. Que tal pudieras especificar en dónde te está apareciendo el error? qué es lo que te arroja?

      1. Al momento de cargar el codigo me muestra algo parecido a esto
        stk500_getsync(): not in sync: resp=0x00

        1. Esto indica un problema de comunicación con el Arduino. Puedes intentar lo siguiente:

          1. Desconecta y vuelva a conectar el Arduino.

          2. Revisa que tengas seleccionado el Modelo de Arduino Correcto en Tools > Board > (Arduino Uno o la que tengas)

          3. Revisa que este seleccionado el puerto correcto. Tools > Port > (COM #)

          4. Asegúrate de que no tengas nada conectado en los pines 0 y 1 del Arduino que son los del puerto Serial, si los estás utilizando, desconéctalos para cargar el programa nuevo.

          5. Instala los drivers más nuevos. https://www.arduino.cc/en/Main/Software

          Por favor indícanos si alguno de estos pasos resolvió tu problema.

          1. ok Muchas gracias ya lo hice y ahora me arroja esto

            avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00

            avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00

          2. Qué sistema operativo tienes?
            Qué tarjeta Arduino tienes?

            Intenta esto:
            1. Desconecta todo lo que tengas hacia el Arduino, únicamente conecta el USB a tu computadora.
            2. Presiona el boton de RESET en tu Arduino
            3. Intenta cargar el programa File > Examples > 01.Basics > BareMinimum

            Qué error te aparece?

          3. Cuando programes el Arduino desconecta el wifi de los pines 0 y 1. Asegúrate que no haya nada conectado a estos pines y con eso debe funcionar. Una vez que se suba el programa conecta el wifi.

          4. muchas gracias ya lo gráfica te lo agradesco mucho “solo otra pregunta sera posible funcione envés de red wifi utilice los datos moviles que en este caso me da telcel”

          5. Nos da mucho gusto que te haya funcionado. El Módulo ESP8266 únicamente soporta redes Wifi. La red de Telcel es GSM por lo que necesitarías una shield compatible con esa red y tener una línea activa. Por el momento ese shield no lo manejamos pero lo puedes buscar en la red como “Arduino GSM Shield”. Saludos!

  2. Excelente trabajo y primera vez que encuentro este proyecto bien explicado y a pasos… tengo un pequeño problema y espero me ayudes a resolverlo: si obtengo la grafica de temperatura pero en la grafica de humedad me pone 0 y/o nulo y veo que en el serial si envia datos por ejemplo el numero 37. Saludos y buen dia

    1. Hola buen día, gracias por tu comentario. Puedes intentar lo siguiente:

      1. Asegúrate que exista un delay de mínimo 20 segundos “delay(20000)” entre la escritura de cada dato, ya que Thingspeak no nos permite escribir datos tan seguido.

      2. Revisa que tu “WRITE_API_KEY” este correcto y que tengas “field2” en la línea:
      String GET_HUM = “GET /update?key=[WRITE_API_KEY]&field2=”; //Campo de humedad

      Eseremos que esto resuelva tu problema, si no, no dudes en contactarnos. Saludos

  3. Hola buen día, disculpa ¿se puede conectar directamente la alimentación, asi como lo muestras en el diagrama, de 3.3V y 5V al modulo wifi y al dht11, recpectivamente?

    Es que leí que podía haber problema porque el arduino no maneja mucho amperaje.

    1. Que tal. En cuanto al DHT11 no hay ningun problema, se puede conectar directamente a 5V del Arduino ya que consume muy poco amperaje.

      Para el Modulo Wifi ESSP8266 como comentas es recomendable utilizar una fuente externa de 3.3V ya que sí puede llegar a consumir mayor amperaje. Para pruebas cortas se puede conectar con el Arduino, pero ya en operación contínua se recomienda una fuente externa.

      Actualizaremos el tutorial pronto para mencionar esto. Saludos!

      1. ¿Y qué tipo de fuente me recomidas para usar con el modulo wifi?

        1. Tienes varias opciones:
          – Utilizar 2 baterías AA de 1.5V
          – Conseguir un eliminador de 3.3V de algún aparato que no uses o comprar uno (en MercadoLibre por ejemplo)
          – Utilizar un Regulador variable como el LM317
          – Utilizar un Transistor como el 2N3055
          – Utilizar un diodo Zener de 3.3V
          (Puedes ver los circuitos de estos 3 ultimos aquí http://www.simple-electronics.com/2011/09/33v-power-supply.html )

          Pronto manejaremos en nuestra tienda Eliminadores de 3.3V.
          Saludos!

          1. ¿Cree que con la salida de 3.3V de una fuente ATX se pueda? De ser así ¿ocuparía resistencias? Disculpe las molestias es que apenas comienzo en el mundo de la electrónica.

          2. Sí se puede, la puedes conectar directo sin resistencias, el módulo solamente utilizará la corriente que necesite.

            No te preocupes, al contrario nos da gusto poder ayudarte a empezar en el mundo de la electrónica, para eso estamos. Con gusto te resolvemos cualqueir duda!

  4. Hola buenas noches, disculpe tengo un problema, y es que ya tengo todo conectado pero en el monitor serie me manda el siguiente mensaje:
    AT

    MODULO WIFI NO RESPONDE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=48
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=47
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=48
    AT+CIPCLOSE

    Y si lo dejo así se repite el ciclo. No sé que pueda ser, ya revice que los cables esten conforme al diagrama pero el módulo wifi no responde. Espero que me pueda ayudar, de ante mano muchas gracias.

    1. Si el Módulo Wifi no responde intenta lo siguiente:
      – Verifica que el Modulo Wifi tenga 3.3V (el Led Rojo debe encender)
      – Verifica que estén bien conectados los pines RX TX
      – Intenta intercambiando los pines de TX y RX
      – Asegurate que el pin CH_PD del módulo también este conectado al pin de 3.3V

      Si estás energizando el Wifi con una fuente externa, también asegúrate de conectar el GND de tu fuente con el GND de tu Arduino.

      Por favor reporta tu resultado.

      1. Tambien tengo este Warning: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
        if( Serial.find(“OK”) ){

        es normal?

        1. Es en la parte de compilación ¿verdad? Si es así no hay problema, es solo una advertencia de que la conversión es “obsoleta” entre un string y un char pero aun así puedes subir el código al arduino.

      2. Ya me funcionó, era conectar la tierra de la fuente con la tierra del arduino, más tarde te muestro en resultado.

    2. Hola Erick, como solucionaste el problema de “MODULO WIFI NO RESPONDE”? tambien me sucede

      1. Sí, ya se solucionó el problema, comencé con lo que no había hecho que era conectar la tierra de la fuente ATX con la tierra del arduino y así funcionó.

        1. Ya lo solucione Erick, gracias, el problema que tengo ahora es que cuando mando:
          AT+CIPSTART=”TCP”,”184.106.153.149″,80

          regresa ERROR, sabes que puede pasar?, gracias por tu respuesta!

          1. Pienso que lo que está pasando es que no se está conectando con la página de thingspeak, checa tu internet, que no tenga algún filtro MAC por si lo estas haciendo fuera de tu casa.

  5. Buenas, Espero tu pronta respuesta
    Me fijo en dispositivos conectados a mi router y no me sale ninguno nuevo, que me falta?
    El Modulo wifi esp8266 esta alimentado por fuente externa
    cuando escribo comandos en la consola no me da respuesta :/

    Gracias y disculpa la ignorancia

    AT

    AT+CWMODE=3
    AT+CWJAP=”Flia.Silva”,”familiasilva2016″
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=50
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=50
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=50
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=50
    AT+CIPCLOSE
    AT+CIPSTART=”TCP”,”184.106.153.149″,80

    1. Hola que tal!

      Puedes intentar lo siguiente:
      – Verifica 2 veces que el nombre de la red y la contraseña estén correctas (mayúsculas y minúsculas también importan).
      – Asegúrate que la fuente externa pueda proporcionar al menos 500mA, el módulo puede consumir mucha corriente sobre todo si está muy lejos de tu router.
      – Asegúrate que el voltaje de la fuente externa sea de 3.3V a 3.6V
      – Asegúrate que el pin negativo (-) de tu fuente externa esté conectado al GND de tu Arduino ( ¡No confundir con el positivo + ! )
      – Hemos encontrado que en algunos casos el módulo Wifi es más estable si se conectan también a 3.3V los pines 3 y 5 (GPIO0 y GPIO2).

      Por favor indica tus resultados. Saludos

  6. Hola buenas noches! tengo un problema, el cual es el siguiente logro cargar mi programa al arduino hago los cambios respectivos con el write api key, mi serial sale de esta forma
    AT

    AT+CWMODE=3
    AT+CWJAP=”Masarbre”,”Ligiapereira51″
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=50
    GET /update?key=[2DK662S1CF5L5ZB0]&field1=24.000
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=49
    GET /update?key=[2DK662S1CF5L5ZB0]&field2=37.00
    pero en la pagima de thingspeak no me grafica que podria ser el problema?
    gracias por la ayuda saludos

    1. Hola que tal! Por los mensajes que te arroja lo mas seguro es que sí este realizando la comunicación correctamente. Lo más probable es que tu API Key este incorrecto, verifica que la hayas ingresado bien y asegúrate que sea la WRITE API KEY y que no sea la READ Key. Saludos

  7. Buenos días tengo una duda, en las únicas partes donde se debe cambiar un poco del código es en SSDI, PASS con lo propios y en [WRITE_API_KEY] .Mi pregunta es en [WRITE_API_KEY] cuando se sustituye por el propio key api debe ir un espacio entre ese y el modulo? eje: “GET /update?key=N5UWQ4CRCYG9602I &field1=”
    o sin espacio “GET /update?key=N5UWQ4CRCYG9602I&field1=”. Ya intente con ambos y no logro ver nada en el servidor como puede verificar en que parte esta mi error?

    1. Si ves símbolos extraños en la consola del Monitor Serial, seguramente tienes que cambiar el baudrate (velocidad de transmisión). En la parte inferior derecha el valor por defecto es de 9,600 bps, este lo deberás cambiar a 115,200 para poder ver los mensajes correctamente. Saludos

  8. Excelente Tutorial, lo hice funcionar asi tal cual. Me pasa que la temperatura me actualizo dos veces nomas. Pensé que era por los decimales que la usas con 3 decimales y la humedad con dos. La puse con dos pero lo mismo.

    Que es lo que haces con el digitalWrite(13,HIGH); y el digitalWrite(13,LOW); ??? tendrá que ver?.

    Saludos, gracias

    1. Las líneas digitalWrite(13, HIGH) y digitalWrite(13, LOW) son para enceder y apagan el LED de tu Arduino respectivamente. Están ahí únicamente para poder ver con el LED que se estén enviando los datos cada 20 segundos (las puedes remover sin problema).

      En cuanto a envío de datos asegúrate que el sensor esté bien conectado, y que la WRITE_API_KEY este bien ingresada en las 2 lineas de código(12 y 13). El número de decimales es indiferente y debería de funcionar con 2 o 3. También asegúrate que el delay no sea menor a 20 segundos (20000 milisegundos)

      Saludos!

  9. Buenas tardes compañeros, necesito su ayuda urgente, espero puedan darme alguna solución. Estoy teniendo problemas ya que al programar el modulo WIFI esp 8266 desde el monitor serial, este funicona y responde bien, pero cuando lo intento desde un programa no me responde nada, lo he intentado cambiando las velocidades y con diversos tipos de programas como con ciclos while y serial print sin obtener respuesta del módulo esp8266. Muchas gracias

    1. Hola Daniela! Considera el siguiente diagrama de comunicación. Para que tu PC se comunique con el ESP8266 hay que conectar el RX(PC) con TX(ESP8266) y TX(PC) con RX(ESP8266), esto se logra mediante los pines de tu Arduino Pin RX0 y Pin TX1. Cuando quieres que tu Arduino se comunique con el ESP8266 hay que hacer lo mismo: RX(Arduino) con TX(ESP8266) y TX(Arduino) con RX(ESP8266), viendo el diagrama podemos ver que están invertidos los pines.

      En fin lo único que necesitas hacer es intercambiar los cables que tienes conectados en los pines 0 y 1 para que tu Arduino se comunique con el ESP8266. Para volver a comunicarte con tu PC inviértelos de nuevo.

      Esperamos haber aclarado la duda. Saludos!

      https://uploads.disquscdn.com/images/13bbe530d54c9956f69a6a0ce5a90ab2c55d17bb4d2067ca7e996d1bc08c7f2c.jpg

      1. Hola muchas gracias por la ayuda, pero intenté hacer las conexiones que me sugieres y me aparece “Error al subir información a la placa”… No se que pueda estar fallando, otra cosa es que cuando conecto el modulo esp8266 sin ningun codigo ni nada me aparece invalid no se si eso tiene que ver
        que no me responda cuando lo mando desde arduino.
        Muchas gracias,

        1. Hola! Recuerda que el Arduino utiliza los pines 0 y 1 para comunicarse con el puerto serial de tu PC cuando subes un programa. Por lo tanto mientras programes tu Arduino DESCONECTA cualquier cable de los pines 0 y 1, una vez que termine de programarse, vuelve a conectarlos. Esto se tiene que hacer cada vez que desees subir un programa a tu Arduino. Saludos!

  10. Tengo una duda, en materiales pones resistencia de 10k ohms pero en el esquema no la pones. Esta resistencia la usas? Si es asi se la pones al DHT11 o al ESP8266?

    1. Hola! La resistencia es un error, en realidad no es necesaria. Saludos!

  11. Hola Profesor, primero que nada agradezco este tutorial bien explicado y a nivel funcional un éxito.
    Tengo una consulta, si quiero agregar un sensor de presión barométrica BMP180 como puedo incluir las líneas de código para que los datos se incluyan en un nuevo String.??? Agradezco de antemano toda la ayuda.

    1. Hola! Una disculpa por la demora en la respuesta, se me debió perder entre los correos.

      Para agregar cualquier otro parámetro puedes seguir el mismo formato del código reemplazando las líneas para tu sensor. Las líneas que tienes que reemplazar son por ejemplo:

      GET_PRESION = “GET /update?key=[WRITE_API_KEY]&field3=”;

      float p = funcionParaMedirPresion();
      String presion= dtostrf(t, 8, 3, bufferTemp);
      updatePresion(presion);
      ….

      La función updatePresion(presion) sería prácticamente igual a las demás.

      No olvides crear otro nuevo campo (“field”) en thingspeak junto con su API_KEY para cada parámetro que desees agregar.

      Saludos!

  12. Buenas tardes, que gusto tener el placer de leer este tipo de proyectos, tan fundamentados y bien hechos, quería antes que todo agradecer por compartirlo, de hecho tengo unas dudas para ello, lo que sucede es que ya programe ya tengo mis circuitos bien hechos ya todo, pero tengo un dilema cuando programo ya compila pero da como unas advertencias: ESTO ME SALE CUANDO COMPILO NADA MAS=

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void setup()’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:33:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“OK”)){ //Verificar si Modulo Wifi responde

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateTemp(String)’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:70:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“ERROR”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:85:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“>”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateHumedad(String)’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:99:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“ERROR”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:113:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“>”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘boolean connectWiFi()’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:135:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“OK”)){

    ^

    FINAL DE ESO LE DOY SUBIR, DESCONECTO LOS PINES QUE TENGA EN RX Y TX, Y SUBE BIEN LAS COSAS.

    Y ESTO ES LO QUE TENGO CUANDO SUBO EL PROGRAMA AL PARECER TODO BIEN;

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void setup()’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:33:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“OK”)){ //Verificar si Modulo Wifi responde

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateTemp(String)’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:70:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“ERROR”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:85:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“>”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateHumedad(String)’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:99:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“ERROR”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:113:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“>”)){

    ^

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘boolean connectWiFi()’:

    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:135:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if(Serial.find(“OK”)){

    ^

    El Sketch usa 8.788 bytes (27%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes.
    Las variables Globales usan 496 bytes (24%) de la memoria dinámica, dejando 1.552 bytes para las variables locales. El máximo es 2.048 bytes.

    YA LUEGO DE ESO YA CREE MI CUENTA EN THINGSPEAK, YA TENGO MIS API KEY DE LECTURA Y OTRA DE ESCRITURA, LISTO YA SUBIO Y EN LA CONSOLA ME INDICA QUE ME ESTA LEYENDO EL NOMBRE Y LA CONTRASEÑA DEL WIFI SI CONTECTA EN LA CONSOLA INDICA LO SIGUIENTE:

    AT

    AT+CWMODE=3
    AT+CWJAP=”ATAPEL_953052″,”A3B3757B907CDXDT”
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=48
    GET /update?key=U1RIBK3AE2JWBJ2N&field1=19.000

    PERO EN LA PAGINA WEB CON MI API KEY Y TODO NO ME SALE GRAN COSA ME SALEN COMO ERRORES

  13. ES NECESARIO CAMBIAR ALGO MAS DE LA PROGRAMACION APARTE DE LOS ESPACIOS QUE HA DEJADO PARA CONTRASEÑA WIFI Y APIKEY, ALGUNOS OTROS DATOS QUE HAYA QUE CONFIGURAR ??

    1. Hola! No es necesario hacer ningún cambio adicional. Si no funciona verifica las conexiones. (Lo mas común es confundir TX y RX, inviértelos para probar).

  14. Buenas tardes, que gusto tener el placer de leer este tipo de proyectos, tan fundamentados y bien hechos, quería antes que todo agradecer por compartirlo, de hecho tengo unas dudas para ello, lo que sucede es que ya programe ya tengo mis circuitos bien hechos ya todo, pero tengo un dilema cuando programo ya compila pero da como unas advertencias: ESTO ME SALE CUANDO COMPILO NADA MAS=
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void setup()’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:33:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“OK”)){ //Verificar si Modulo Wifi responde
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateTemp(String)’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:70:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“ERROR”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:85:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“>”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateHumedad(String)’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:99:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“ERROR”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:113:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“>”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘boolean connectWiFi()’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:135:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“OK”)){
    ^
    FINAL DE ESO LE DOY SUBIR, DESCONECTO LOS PINES QUE TENGA EN RX Y TX, Y SUBE BIEN LAS COSAS.
    Y ESTO ES LO QUE TENGO CUANDO SUBO EL PROGRAMA AL PARECER TODO BIEN;
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void setup()’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:33:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“OK”)){ //Verificar si Modulo Wifi responde
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateTemp(String)’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:70:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“ERROR”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:85:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“>”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘void updateHumedad(String)’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:99:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“ERROR”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:113:20: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“>”)){
    ^
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino: In function ‘boolean connectWiFi()’:
    C:UserspabloDesktopPOGRAMA_TEMPERATURA_BIOPOGRAMA_TEMPERATURA_BIO.ino:135:21: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    if(Serial.find(“OK”)){
    ^
    El Sketch usa 8.788 bytes (27%) del espacio de almacenamiento de programa. El máximo es 32.256 bytes.
    Las variables Globales usan 496 bytes (24%) de la memoria dinámica, dejando 1.552 bytes para las variables locales. El máximo es 2.048 bytes.
    YA LUEGO DE ESO YA CREE MI CUENTA EN THINGSPEAK, YA TENGO MIS API KEY DE LECTURA Y OTRA DE ESCRITURA, LISTO YA SUBIO Y EN LA CONSOLA ME INDICA QUE ME ESTA LEYENDO EL NOMBRE Y LA CONTRASEÑA DEL WIFI SI CONTECTA EN LA CONSOLA INDICA LO SIGUIENTE:
    AT
    AT+CWMODE=3
    AT+CWJAP=”ATAPEL_953052″,”A3B3757B907CDXDT”
    AT+CIPSTART=”TCP”,”184.106.153.149″,80
    AT+CIPSEND=48
    GET /update?key=U1RIBK3AE2JWBJ2N&field1=19.000
    PERO EN LA PAGINA WEB CON MI API KEY Y TODO NO ME SALE GRAN COSA ME SALEN COMO ERRORES

  15. Estimado, se podría conectar este circuito con la placa de arduino directamente a la corriente con un transformador de celular USB de 5v, 2mAh? Lo demás funciona perfecto! Muchas gracias!

    1. Hola! Quizás querrás decir que es de 200mA? Un cargador de celular se puede utilizar para el proyecto pero debes energizar al wifi y al Arduino en paralelo. No debes energizar el Arduino y después utilizar los pines de 5V en el mismo para el wifi. Esto porque estaría pasando mucha corriente a través del Arduino y lo puedes dañar. Saludos!

      1. Perfecto! Pero ahora me surgió otra interrogante. No se activa solo. Los datos en Thingspeak solo empiezan a leer cuando activo el monitor serie por el pc. Existe alguna forma de hacerlo, sin pasar por esta interfaz, o sea, que al conectarlo a la corriente se conecte, y empiece a transmitir los datos? Algún comando que poner en el programa? Muchas gracias de antemano. Slds!

        1. El programa debe funcionar automáticamente sin el monitor serial así con el código que se muestra. Intenta:

          1. Probablemente estén invertidos los cables de TX y RX, intenta intercambiándolos.

          2. También a veces el módulo tarda un poco en conectarse a la red Wifi, hay que darle tiempo suficiente para que lo haga. En la función connectWifi() puedes modificar el delay en la línea 135 para que sean 20000ms en lugar de 10000ms y darle más tiempo.

          3. Si la fuente de poder en este caso el cargador de celular es de muy baja capacidad el módulo a veces batalla para conectarse, puedes intentar con uno de mayor capacidad. Recuerda que el módulo Wifi puede pedir hasta 240mA cuando necesita transmitir + lo que consume el Arduino, lo recomendable es una fuente de al menos 350mA para estar seguros.

          saludos!

  16. lo que pasa es que me sale este error
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
    Ha ocurrido un error mientras se enviaba el sketch

    1. Hola! Si el API Key es el mismo para los dos parámatros. Ese error indica que no hay comunicación de tu PC con tu Arduino. Lo más probable es que hayas dejado los pines del Wifi conectados a los pines 0 y 1 de tu Arduino. Asegúrate que no haya nada conectado a pines 0 y 1, luego sube tu programa al Arduino y vuelve a conectarlos. Esto lo tienes que hacer cada vez que pases el programa a tu Arduino. Saludos!

  17. Buenas tardes, primero que nada felicitaciones por tu aportacion esta muy completo, mi duda es, que datos son exclusivos para transmitir la temperatura y humedad, es decir, si yo quiero transmitir otro dato que no sea esos, que valores o que lineas es necesario cambiar? quiero transmitir un voltaje de la entrada A0 del aurduino.

Comments are closed.

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

 

 

 

Leave a Reply

Your email address will not be published.

TUTORIAL SENSOR DE TEMPERATURA Y HUMEDAD DHT11

Paso 1: Descripción

El sensor DHT11 contiene los sensores de temperatura y humedad DHT a un bajo costo. Estos sensores son muy básicos, pero son muy buenos para hacer proyectos para registrar datos. (more…)

Leave a Reply

Your email address will not be published.