miércoles, 19 de agosto de 2020

Polaridad LED y código de colores en electrónica

 En electrónica se utiliza la siguiente convención.


  • GND → NEGRO → NEGATIVO → CATODO → LED pata corta
  • Vcc → ROJO → POSITIVO → ÁNODO → LED pata larga
En la protoboard o placa de prototipado:
  • La línea roja es el positivo +
  • La línea azul es el negativo -






domingo, 8 de diciembre de 2019

Blink en un LED con una placa ESP8266

La placa por excelencia que ha popularizado la electrónica digital es Arduino. Desde hace algún tiempo también se está extendiendo el uso de una pequeña placa denominada ESP8266 que podemos encontrar en diferentes versiones. Inicialmente se utilizaba como módulo Bluetooth para funcionar junto a una placa Arduino que era la encargada de aportar la lógica y efectuar las labores de controlador. Pero las versiones han ido evolucionando y mejorando las aportaciones de la comunidad maker de forma que ahora muchos proyectos se pueden montar directamente sobre una placa ESP8266.

En esta ocasión haremos un blinking led ,o dicho en español, vamos ha hacer parpadear un LED.


Compramos la placa ESP8266

Han existido diversas versiones a lo largo del tiempo e incluso en un momento dado podemos comprar varios modelos. Nosotros hemos adquirido el siguiente.


  • V3 módulo inalámbrico NodeMcu 4M bytes Lua WIFI de Internet de las cosas, placa de desarrollo en ESP8266 ESP-12E para arduino Compatible

En esta página se venden dos versiones:

  • V3 CH340G (esta es la que hemos comprado). Coste: 1,97 + 0,72 (envío)
  • V3 CP2102. Coste: 2,59 + 0,72 (envio)






NodeMCU V3 (ESP-12E)





Conexiones

  • Conecta el cátodo (pata corta) del LED al GND de la placa NodeMCU V3.
  • Conecta el ánodo (pata larga) del LED a una resistencia limitadora de corriente (típicamente 220-330 ohms).
  • Conecta el otro extremo de la resistencia a un pin GPIO de la placa NodeMCU V3, por ejemplo, D4 (GPIO2).

Consideraciones

  • Voltaje de operación: La placa NodeMCU V3 opera con niveles lógicos de 3.3V.
  • Se ha de usar un LED y una resistencia apropiados para este voltaje.
  • Resistencia limitadora: Es crucial usar una resistencia en serie con el LED para limitar la corriente y proteger tanto el LED como el pin GPIO de la placa.
  • Selección del pin: Aunque puedes usar varios pines GPIO para controlar el LED, ten en cuenta que algunos pines tienen funciones especiales durante el arranque.
  • El pin D4 (GPIO2) es una buena opción, además es el que tiene un LED integrado en la placa, por lo que veremos parpadear tanto el LED externo como el de la placa.

domingo, 18 de marzo de 2018

Memoria micro SD para Arduino

Arduino dispone de una escasa memoria en la que no podríamos almacenar largas series históricas con información recogida por los sensores. Para estos casos existe la posibilidad de añadir una placa donde insertar una tarjeta micro SD y así poder realizar un datalogger, o dispositivo que almacena en un fichero información sobre los datos que arroja Arduino, normalmente provenientes de sensores.


El MicroSD Card Adapter tiene los siguientes contactos.


  • CS (chip select)
  • SCK   (SPI ClocK)
  • MOSI (Master-out, Slave-in)
  • MISO (Master-in, Slave-out)
  • VCC (3.3V or 5V)
  • GND (ground)



La tarjeta micro SD debe estar formateada en sistema de archivos FAT16 o FAT32. En nuestro caso utilizaremos una tarjeta micro SD de 8Gb, formateada con una aplicación que se puede bajar de la página de la asociación de fabricantes de este tipo de tarjetas.

SD Card Formatter

Precio


Por 0,84 € disponemos de esta placa con la que podemos leer y escribir en una micro SD. A esto se ha de sumar el precio de la micro SD.


Descripción

Reproducimos la información que suministra el vendedor.

1. Support Micro SD Card, Micro SDHC card (high-speed card)
2. The level conversion circuit board that can interface level is 5V or 3.3V
3. Communication interface is a standard SPI interface
4. Control Interface: A total of six pins (GND, VCC, MISO, MOSI, SCK, CS), GND to ground,
5. VCC is the power supply, MISO, MOSI, SCK is the SPI bus, CS is the chip select signal pin;
6. 3.3V regulator circuit: LDO regulator output 3.3V as level converter chip, Micro SD card supply;
7. Level conversion circuit: Micro SD card into the direction of signals into 3.3V, MicroSD card toward the direction of the control interface MISO signal is also converted to 3.3V, general AVR microcontroller system can read the signal;
8. Micro SD card connector: yes since the bomb deck for easy card insertion and removal.
9. mounting holes: 4 M2 screws positioning hole diameter of 2.2mm, easy to install positioning, to achieve inter-module combination.

Esta placa dispone de un conversor de voltaje lo que permite que se pueda alimentar el VCC mediante 3.3V o mediante 5V. En otras placas la alimentación es por uno de los dos exclusivamente y si en una placa que requiere 3.3V la alimentamos por 5V podemos arriesgarnos a destruirla o a corromper los datos de la tarjeta micro SD. Este es el motivo por el que podemos encontrar por internet en páginas web, blogs y en YouTube una cierta polémica entre diferentes makers. Algunos dicen que es necesario incluir un regulador de voltaje, o añadir una resistencias para adaptar los 5V de entrada a los 3.3V requeridos.

En nuestro caso, el regulador de voltaje ya lo incorpora la propia placa que contiene la micro SD.

Conexiones

Módulo

micro SD
Arduino

Uno
CS
4
SCK
13
MOSI
11
MISO
12
VCC
5V
GND
GND

Se puede alimentar el VCC por 3.3V usando el pin correspondiente del Arduino.




Sensores DHT11 y DHT22 de temperatura y humedad

El DHT11 es un sensor de temperatura y humedad que podemos utilizar en nuestros proyectos con Arduino. Existe otro sensor con mejores características que es el DHT22. Ambos son económicos siendo aún más barato el DHT11.


El DHT11 podemos encontrarlo en el mercado en dos modalidades de venta.
  • puede venir solo
  • puede venir integrado en una placa
En la siguiente imagen se muestra el DHT11 integrado en una pequeña placa que nos ahorra tener que incluir una resistencia en nuestro montaje ya que viene integrada en la propia placa.


El DHT11 que viene integrado en su placa trae tres contactos.
  • +  Para alimentarlo con 5V (cable rojo)
  • out  Para llevarlo a un pin digital
  • -   Para conectar a tierra GND (cable negro)

El cable central es el que va a un pin digital del Arduino.


El DHT22 es un poco más grande, más caro y más preciso.


Referencias

Podemos consultar la página de Adafruit que nos habla de estos dos sensores.

Monitor serie


Precio


En estos momentos (marzo 2018) podemos adquirir estos sensores por los siguientes precios.
  • el DHT11 con placa y cables por 1,19 €
  • el DHT22 con placa y cables por 2,80 €

 


Gráfico

Hemos realizado la gráfica en Excel con casi 1.000 lecturas de humedad y temperatura.
Al inicio del gráfico lo que hicimos fue acercar el sensor DHT11 a la salida de aire caliente del ordenador portatil. Esto provocó que la temperatura subiera rápidamente y que la humedad bajara.


Sensor de presión barométrica y temperatura BMP280

Existe el sensor BMP180 que mide únicamente la presión atmosférica, y luego sacaron el BMP280 que además de medir la presión barométrica mide también la temperatura.


El BMP280 en amazon.es está ahora (marzo 2018) en 6,99 €. En aliexpress.com está en 1,12 €.

Disponemos de un PDF con las características y otra información de interés.

Adafruit BMP280 Barometric Pressure + Temperature Sensor

Características


  • Tamaño: 15,5 x 12 mm
  • Voltaje de entrada: 1,8 - 3,6 V control sobre I2 C
  • Rango de presión: 300 ~ 1100 hPaRango de temperatura: -40 ~ 85ºC
  • Precisión absoluta de la presión del aire: ± 1 hPa
  • Precisión absoluta de la temperatura: ± 1.0ºC
  • Nivel Lógico: 3.3V
  • Consumo: 2.7μA
  • Interfaz de comunicación: I2C, SPI
Algunos proyectos incluyen resistencias. Por ejemplo el siguiente.


Algunas versiones de este sensor soportan 5V. En nuestro caso disponemos de un módulo que funciona a 3.3V, por lo que no se debe conectar directamente al bus del Arduino. Lo mejor es utilizar un adaptador de niveles, o bien si no disponemos de él se pueden usar un par de resistencias pull-up de 4.7K para conectar directamente Arduino con un componente que usa el bus I2C a 3.3V. Puede mirar el siguiente link.


Otros proyectos que usan este componente toman directamente del Arduino los 3.3V sin añadir ninguna resistencia. Por ejemplo, el siguiente proyecto.


sábado, 17 de marzo de 2018

Nivel de luminosidad con TSL2561

La TSL2561 es una pequeña plaquita que incorpora un sensor de luminosidad. Es bastante más sensible que una resistencia LDR normal, y por tanto adecuado para la mayoría de los proyectos donde pretendemos capturar si llegan más o menos lux hasta el sensor.


Características


  • es sensible a la luz visible y a luz infrarroja (IR)
  • es un sensor muy preciso que se puede usar también en proyectos profesionales exigentes
  • mide en el rango 0,1 hasta 40.000 lux
  • usa una tecnología de doble diodo, uno infrarrojo y otro de amplio esprecto
  • la placa puede alimentarse a 3.3V o a 5V




Existía una versión anterior que ya no se comercializa, pero sobre la que podemos encontrar algunas páginas con información valiosa. Por ejemplo:


Un precio muy económico.



CONEXIONES

  • VCC --> Se conecta a los 5V del Arduino.
  • GND --> Se conceta al GND del Arduino.
  • SCL --> Se conecta la pin analógico A5.
  • SDA --> Se conecta al pin analógico A4.
  • INT --> Se deja sin conectar.

LIBRERÍAS

sensorapi.ino

Referencias

Un PDF con la información técnica y enlace a la libreria.



Veamos una página recomendable.

Capturas en el monitor serie

Podemos ver cómo varía la luminosidad al hacer sombra con la mano.


Analytics

Este proyecto se podría complementar haciendo un registro de los valores que se pudiera estudiar con funciones estadísticas y gráficos. Para ello disponemos de varias plataformas que nos ayudan a tratar los datos que se obtienen con el IoT (Internet of Thing). Algunas de estas plataformas son las siguientes.


Un enlace a un podcast que habla del tema:

domingo, 11 de marzo de 2018

Encender un led con un botón en Arduino y que quede encendido

Queremos que al presionar un botón esto provoque que un led se encienda y quede encendido hasta que volvamos a presionar el botón, en entonces se apagará, permaneciendo apagado. Lo que estamos haciendo es simular, con un pulsador, el comportamiento de un interruptor de encendido apagado (on off). O dicho de otra forma, lo que queremos es que el pulsador se comporte como el interruptor de la luz que tenemos en una habitación.

Veamos el proyecto.

Material necesario

  1. Arduino UNO
  2. cable USB para conectar el Arduino al ordenador
  3. cables variados para las conexiones
  4. un pulsador de 4 patillas
  5. un led
  6. una resistencia de 220 ohomios para proteger el led
  7. una resistencia de 100 KΩ para el pull down
  8. el IDE de Arduino instalado en un PC

Esquema eléctrico


El botón de cuatro patillas se tiene que conectar en la posición correcta ya que girado 90º no funcionará. Las cuatro patillas están conectadas electricamente dos a dos antes de pulsar.

Código


 const int LED =13;  
 const int BOTON = 7;  
 int estadoBoton = 0;  
 int estadoLed = 0;  
 int oldBoton = 0;   
 void setup(){  
  Serial.begin(9600);  
  pinMode(LED,OUTPUT);   
  pinMode(BOTON,INPUT);  
 }  
 void loop() {  
  estadoBoton= digitalRead(BOTON);  
  if ((estadoBoton == 1) && (oldBoton == 0)){  
   estadoLed=1-estadoLed;  
   delay(10);  
  }  
  oldBoton = estadoBoton;  
  digitalWrite(LED, estadoLed);  
  Serial.println(estadoLed);  
 }  


En el código podemos ver porqué este proyecto se llama "Botón con memoria". Hemos tenido que crear una variable denominada oldBoton para guardar el estado anterior del botón.

Proyecto funcionando



Método 2

Una variante del proyecto está disponible en le siguiente enlace.

https://www.tinkercad.com/things/8xNexPpws9c

El código de este segundo método es el siguiente.


 int BOTON = 7;  
 int LED=13;  
 int estadoLed=LOW;  
 void setup (){  
  pinMode(BOTON,INPUT);  
  pinMode(LED,OUTPUT);  
  digitalWrite(LED,LOW);  
 }  
 void loop(){  
  while(digitalRead(BOTON)==LOW);  
  estadoLed = digitalRead(LED);  
  digitalWrite(LED,!estadoLed);  
  while(digitalRead(BOTON)==HIGH);  
 }  


En el void setup hemos añadido una línea que dice:

digitalWrite(LED,LOW); 

Esta línea, en teoría no sería necesaria ya que el led inicialmente se supone que estará apagado. Con ella forzamos a que comience estando apagado.

En el void loop tenemos una primera línea que dice:

while(digitalRead(BOTON)==LOW); 

Lo que hace la línea anterior es esperar mientras el botón no se pulse. El punto y coma al final cierra el bucle, que no hace nada más que repetirse continuamente hasta que se pulse el botón, en cuyo caso ya se salta a la siguiente línea.

La segunda línea del void loop nos dice lo siguiente.

estadoLed = digitalRead(LED); 

Esta línea toma en la variable estadoLed si el LED está encendido (1 o HIGH) o apagado (0 o LOW). Puede resultar un tanto extraño que usemos un digitalRead con el led que hemos declarado previamente como de salida (OUTPUT). Lo que se hace con ello es conseguir leer el estado (LOW o HIGH) que previamente le hemos enviado al led por el pin digital.

La tercera línea del voice loop es la siguiente.

digitalWrite(LED,!estadoLed); 

Con la línea anterior lo que hacemos es cambiar el estado del led. El símbolo de admiración (!) es una negación. Cambia 0 por 1 y 1 por 0.

En teoría el voice loop ya estaría resuelto y debería funcionar, pero en la práctica a este código le falta una línea más que solucione el problema de los rebotes. Un rebote al presionar un pulsador surge cuando el contacto que hace la parte metálica no es tan ideal como imaginamos. Al pulsar no se pasa instantáneamente del estado LOW al HIGH, o viceversa. Lo que sucede es que el contacto no es perfecto y se pueden generan ceros y unos hasta que quede bien pulsado el botón. Por ello, hemos añadido la última linea.

while(digitalRead(BOTON)==HIGH); 

La línea anterior lo que hace es esperar mientras la lectura del botón continúe arrojando unos.

Esto se puede aprecia al conectar el monitor serie y ver que los ceros y unos tardan un poco en estabilizarse al presionar el pulsador. En el método 1 si se añadió el código necesario para poder ver el monitor serial. En este segundo método no lo hemos añadido pero se podría hacer de forma análoga.