Mostrando entradas con la etiqueta manuales. Mostrar todas las entradas
Mostrando entradas con la etiqueta manuales. Mostrar todas las entradas

domingo, 2 de junio de 2024

ESP32 Micropython y Thonny IDE

Muy buenas a todos y todas enamorados de los microcontroladores!!!

El ESP32 es un microcontrolador potente y versátil con módulos WiFi y Bluetooth integrados de bajo costo y alta potencia desarrollado por la compañía china Espressif.

Es muy utilizado en el internet de las cosas (IOT) como domótica, robótica, estaciones meteorológicas y una amplia gama de proyectos y aplicaciones que, sobre todo, necesiten un bajo consumo de energía.

Es fácil de programar ya que se programa con el puerto USB, y cuenta con una gran comunidad de usuarios a sus espaldas.

Podríamos decir que es el sucesor del más que famoso ESP8266 el cual es mono núcleo y no cuenta con comunicación bluetooth. En una de las cosas que si se parecen es en su bajo coste, se pueden encontrar desde unos 3€ aproximadamente.

A día de hoy, en 2024, existen varias series y modelos del microcontrolador ESP32, cada uno con características y enfoques específicos pero en este articulo vamos a centrarnos en el modelo WROOM32.


sábado, 9 de marzo de 2024

Kdenlive, edita vídeo con código abierto

 Kdenlive es un editor de vídeo no lineal gratuito y de código abierto disponible para Linux, Windows y macOS. 

Tengo que decir que el editor que utilizo para mis vídeo del canal de youtube y Kdenlive ha mejorado mucho con los años (no como mis vídeos jajaja). Al principio era muy fácil que se quedara colgado o que simplemente desapareciera la pantalla, esto ya no pasa. O es algo muy raro. También editar con un portátil con mas de 10 años tampoco era lo mejor. Para lo que lo uso a mi me va bien, y como todo, cuanto más tiempo de uso mejoramos nuestra curva de aprendizaje.

Uno de los puntos fuertes de Kdenlive es que cuenta con una comunidad activa, comprometida y, generalmente, apasionada del software libre. Podemos tener información tanto en el foro oficial como en canales de Youtube tipo "Locos por Linux" o "Punto Edu".

Aquí hay algunas de las características más destacables de Kdenlive:

domingo, 14 de enero de 2024

Permisos de acceso al USB para IDE Arduino

Muy buenas a todos Arduineros y Arduineras!!!

Hace poco reinstale el sistema operativo Ubuntu en el portátil y como es el que uso normalmente para programar los Arduinos, instale el IDE Arduino.

Me pongo en faena y subo el sketch, compilado bien y cuando toca el momento de subir el programa al microcontrolador, me da el siguiente error:


avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied
 Failed uploading: uploading error: exit status 1


USB Arduino permission error
/dev/ttyUSB0: Permission denied


Esto es un error frecuente en instalaciones nuevas, en este caso una distribución Ubuntu y es muy fácil de solucionar.

El error básicamente nos viene a decir que no tenemos permisos de escritura o lectura para el puerto USB0.

Para solucionar el error avrdude: ser_open(): can't open device "/dev/ttyUSB0": Permission denied tenemos dos opciones, una temporal y otra permanente y son las siguientes:

Solución temporal:


sudo chmod 777 /dev/ttyUSB0

lunes, 5 de marzo de 2018

Programación directa del módulo ESP8266 con Arduino UNO o NANO

Buenas a todos!!!

Últimamente no ando mucho por el blog ya que he estado liado con otros proyectos de mi otra web lamaquetade.infotronikblog.com y un programa para Android llamado DCCpp Cab para el control de maquetas ferroviarias en sistema digital DCC.


ESP8266 con divisor de tensión en RX
y listo para ser usado como
servidor webSockets

La central utiliza la comunicación serial para recibir y mandar los datos y ahí es donde entra el ESP8266 como intermediario, además ya lo había usado en algunos proyectos tales como:

Pero en todos estos proyectos siempre programo Arduino para que sea él el que se comunica y daba las ordenes al ESP8266 tales como la red wifi, SSID y Password. De esta manera, todas esas ordenes quedaban guardadas directamente en la memoria del ESP8266.

Manos a la obra, ¿que necesitamos?

Materiales necesarios:

Antes de montar ningún circuito, tenemos que instalar en el IDE de Arduino para ello lo primero es abrir el IDE de Arduino e ir a "archivos ==> Preferencias":



miércoles, 4 de octubre de 2017

Ejemplos Arduino: Semáforo (Street Light)

Buenas a todos Arduineros y Arduineras!!!

Hoy traemos un ejemplo de los más básicos que se pueden realizar con Arduino: El semáforo.

Si bien es un practica sencilla, nos ayudará a entender como realizar secuencias con LED y el bucle FOR que ya hemos tratamos en la entrada de este mismo blog Arduino: Efecto Coche fantástico

Podríamos realizar la practica con un solo semáforo, pero añadir un segundo semáforo le da un poco más de complejidad ya que tenemos que sincronizar para que no tengamos ningún accidente en la intersección.

Otro punto interesante seria añadirle un pequeño altavoz para simular el dispositivo para invidentes que hay situados en casi todos los pasos de peatones de una gran ciudad.


Materiales necesarios:

  • Arduino UNO
  • 6 Resistencias 330ohm
  • 2 LED de color rojo
  • 2 LED de color naranja
  • 2 LED de color verde

Conexiones:

Vamos a usar los pines digitales 7, 8, 9, 10, 11, 12 configurados como OUTPUT y sera donde irán conectados los LED con su resistencia limitadora de 330ohm


El código del programa es bastante sencillo, puedes copiar y pegar o descargar el sketch al final de esta misma entrada:



// Definimos los pines de los LED
// Semaforo 1:
const int rojo = 7;
const int amarillo = 8;
const int verde = 9;

// Semaforo 2:
const int rojo2 = 10;
const int amarillo2 = 11;
const int verde2 = 12;


void setup() {
  // Configuramos los pines como salida
  pinMode (rojo, OUTPUT);
  pinMode (amarillo, OUTPUT);
  pinMode (verde, OUTPUT);
  pinMode (rojo2, OUTPUT);
  pinMode (amarillo2, OUTPUT);
  pinMode (verde2, OUTPUT);
  
  // Comprobamos que todos los LEDs encienden
  for (int z = 7; z < 13; z++) {
    digitalWrite ( z, HIGH);
    delay (100);
    digitalWrite (z, LOW);
    delay(100);
  }
}

void loop() 
{
  // SECUENCIA 1 //
  digitalWrite (rojo2, HIGH);
  digitalWrite (verde, HIGH);
  delay (5000);
  digitalWrite (verde, LOW);
  
  // SECUENCIA 2 //
  for (int x = 0; x < 5; x++) 
  {
    digitalWrite (amarillo, HIGH);
    delay(500);
    digitalWrite (amarillo, LOW);
    delay (500);
  }
  
  // SECUENCIA 3 //
  digitalWrite (rojo2, LOW);
  digitalWrite (verde2, HIGH);
  digitalWrite (rojo, HIGH);
  delay (5000);
  digitalWrite (verde2, LOW);
  
  // SECUENCIA 4 //
  for (int y = 0; y < 5; y++) 
  {
    digitalWrite (amarillo2, HIGH);
    delay(500);
    digitalWrite (amarillo2, LOW);
    delay (500);
  }
  digitalWrite (rojo, LOW);

}


En la siguiente animación podemos ver una simulación del resultado final del programa:


Este proyecto puede ser ampliado con varios módulos más como un zumbador que simule el sonido para los invidentes o una barrera mecanizada con un servo.

Espero que les guste y les sea de utilidad, hasta la próxima!!!!

También te puede interesar:

viernes, 25 de noviembre de 2016

Arduino: Los comandos AT para el modulo bluetooth HC-06

Hace poco que he empezado a trastear con el modulo de comunicaciones bluetooth HC-06 y me he
dado cuenta de la gran versatilidad para una enorme cantidad de proyectos.

Pero este modulo viene con una configuración de fábrica (Nombre, Contraseña, Baud rate...), Esta configuración no siempre ira bien con nuestras necesidades y nos veremos forzados a realizar algún tipo de cambio.

Para realizar estos cambios de manera interna en el módulo utilizaremos los comandos llamados: comandos AT.


¿Que son los comandos AT?

En un principio los Comandos AT eran un grupo pequeño de instrucciones con los que se comunicaban un ordenador con módem. Con el tiempo a este tipo de comandos para comunicarse con diferentes dispositivos se popularizaron con el termino "Comandos AT".

Nuestro modulo bluetooth se pueden comunicar con un ordenador, microcontrolador o cualquier dispositivo que cuente con una conexión serial.

No existen un conjunto de comandos universales para todos los dispositivos, aunque su estructura es muy similar entre ellos. Si un equipo puede trabajar con este tipo de instrucciones, si enviamos el comando AT nos devolverá un OK indicándonos que esta preparado para recibir instrucciones o devolver condiciones de estado y funcionamiento

En mayoría de los módulos bluetooth este enlace se realiza o bien durante un enlace inalámbrico con un ordenador o como es el caso de HC-06 con los pines Rx y Tx.

<br /

viernes, 6 de febrero de 2015

Arduino: moviendo un servo

Buenas Arduineros y Arduineras!!

Después de ver como funcionan los leds, pulsadores y pantallas LCD, ahora le toca el turno practicar con dispositivos de salida como son los servos.


¿Que es un servo?

Un servo o servomotor es un dispositivo muy similar a un motor de corriente continua con la peculiaridad de poder posicionar su eje una posición determinada dentro de un rango de aproximadamente unos 180º. Se puede modificar tanto su posición como velocidad.

Servo 9G

Arduino tiene una biblioteca para este tipo de dispositivos llamada servo.h. Con ella podemos controlar cualquier servo de manera independiente.

Algo a tener en cuenta es que dependiendo del tipo de servo y de la cantidad de los mismos, seguramente no podrás alimentarlo desde la misma placa de Arduino.

Para este ejemplo y dado que el servo a utilizar es de los más pequeños, no habrá problema ninguno en conectarlo directamente a la placa Arduino.


¿Como trabaja un servo?

Los servos utilizan la modulación por ancho de pulsos (PWM) para controlar tanto la dirección como la posición del motor de de corriente continua.

La mayoría de los servos trabajan a una frecuencia de 50Hz con la señal PWM de un periodo de 20 milisegundos.

La electrónica incorporada en estos dispositivos responde al ancho de la señal modulada.


La señal PWM

Si recibe una señal de entre 0,5 a 1,4 milisegundos, el servo se moverá en sentido horario.


                _      _     _          _    _    _
               | |    | |   | |        | |  | |  | |
               | |    | |   | |        | |  | |  | |
      _________| |____| |___| |________| |__| |__| |___________

Si la señal es de 1,6 a 2 milisegundos el giro sera antihorario:


                ______      ______     ______     ______    ______
               |      |    |      |   |      |   |      |  |      |
               |      |    |      |   |      |   |      |  |      |
      _________|      |____|      |___|      |___|      |__|      |____

Y si la señal recibida es de 1,5 milisegundos su estado sera neutro:


                 ___      ___     ___     ___    ___    ___
                |   |    |   |   |   |   |   |  |   |  |   |
                |   |    |   |   |   |   |   |  |   |  |   |
       _________|   |____|   |___|   |___|   |__|   |__|   |_____

📚La blioteca servo.h:

La biblioteca Servo.h es una librería estándar incluida en el IDE de Arduino que permite controlar servomotores de forma sencilla. Gestiona la generación de señales PWM necesarias para posicionar servomotores estándar de 0° a 180°.

  • Compatibilidad: Funciona en todas las placas Arduino (Uno, Nano, Mega, etc.).

  • Límites: Controla hasta 12 servos en Arduino Uno/Nano (24 en Mega).

  • Precisión: Usa temporizadores internos (Timer1 en Uno) para generar señales estables.

  • Voltaje: Recomendado 5V (igual que la lógica del servo).

  • Documentación: Es oficial desde Arduino Reference - Servo Library

⚙️Funciones principales:

  • attach(): Fija el pin digital donde estará conectado el servo

  • writer():Escribe un valor en el servo, controlando su eje en consecuencia.
    Su valor esta dado en grados de 0 a 180. En un servo de rotación continua cambiara la velocidad del servo, siendo 0 toda la velocidad en una dirección y 180 en otra dirección y un valor de 90 aproximadamente sin movimiento.

  • writeMicroseconds(): Escribe un valor en microsegundos (uS) en el servo controlando su eje en consecuencia.
    En un servo estándar si el valor del parámetro es 1000 el eje girará completamente a la izquierda, con un valor de 2000 es completamente a la derecha y con un valor de 1500 se sitúa en el centro.
    Según el fabricante estos valores pueden variar, normalmente entre 700 y 2300.
    Se puede comprobar pero hay que tener en cuenta que llegar al limite puede producir daños en el servo.
    Normalmente lo adivinaras por por el ruido infernal que hará el servo.
    NO ES RECOMENDABLE pasar de esos parámetros ya que pueden producir daños en el servo.
    Para los servos de rotación continua writeMicroseconds() funciona de una manera análoga a write().

  • read(): Lee el angulo actual del servo (el ultimo valor pasado por la llamada write().

  • attached(): Comprueba si la variable servo esta unida a un pin.

  • detach(): Separa la variable servo de un pin. Si se separan todas las variables de servo, los pines 9 y 10 pueden utilizarse como PWM mediante analogWrite().

Programación:

Primer programa para un servo, mover el servo de manera simple:



#include "servo.h" 	// Cargamos la biblioteca "Servo.h"
 
int Pin = 9;		// Cargamos un 9 en la variable "Pin"
 
Servo servo1;		// Nombramos al primer servo
  
// Configuración
void setup()
{        
  servo1.attach(Pin);   // Adjuntamos el pin 9 a servo1
} 
 
//Programa principal
void loop()             
{                                 
    servo1.write(0);     // Mandamos a servo1 a la posición 0 grados      
    delay(1500);         // Hace una pausa de 1,5 segundos
    servo1.write(90);    // Mandamos a servo1 a la posición 90 grados       
    delay(1500);         // Hace una pausa de 1,5 segundos
    servo1.write(180);   // Mandamos a servo1 a la posición 180 grados        
    delay(1500);         // Hace una pausa de 1,5 segundos
    servo1.write(90);    // Mandamos a servo1 a la posición 900 grados       
    delay(1500);         // Hace una pausa de 1,5 segundos
}


Segundo programa para un servo, mover el servo con pulsadores:



#include "servo.h"

int servovar1=90;   // Indicamos la posicion inicial de servo1
Servo servo1;       // Nombramos al primer servo

int Pulsador1=6;   // Cargamos un 6 en la variable "pulsador1"
int Pulsador2=7;   // Cargamos un 7 en la variable "pulsador2"

void setup() {
  servo1.attach(9);    // Adjuntamos el pin 9 a servo1
  pinMode(Pulsador1, INPUT);  // Pulsador 1 en pin 6 es una entrada
  pinMode(Pulsador2, INPUT);  // Pulsador 2 en pin 7 es una entrada
}

void loop() {
    if(digitalRead(Pulsador1) == HIGH && digitalRead(Pulsador2) == LOW){  
      servovar1++;		// Presionamos el pulsador1 para que vaya a la izquierda
}
    else if(digitalRead(Pulsador1) == LOW && digitalRead(Pulsador2) == HIGH){  
      servovar1--;	// Presionamos el pulsador2 para que vaya a la derecha
    }
  
  servo1.write(servovar1);
  delay(10);	// Pausa de 10 milisegundos (Para más velocidad 
  				// quitar esta linea y para ir más lento aumentar el valor)
}


Un vídeo del servo con Arduino funcionando:


Ahora que ya sabes como funcionan los servos con Arduino, aquí tienes algunos artículos aplicando este código:

Moviendo desvíos con servos y Arduino

Arduino: Brazo robot con servos ( Robot arm )

Arduino: Brazo robot con servos ( Robot arm ) Parte 2

Saludos!!!

martes, 3 de febrero de 2015

Arduino: Reloj simple sin modulo RTC DS1307

Saludos a todos y todas!!!

Siguiendo con Arduino y el LCD, este ejemplo es algo más practico que los que hemos visto hasta ahora. Se trata de un reloj, un reloj simple, pero un reloj al fin y al cabo.

Esta programado de tal manera que no sea necesario un modulo RTC DS1307.

En realidad es un reloj que solo funciona mientras Arduino esta conectado, en el momento que deje de recibir corriente, el reloj volverá a estar a cero. Puede no parecer muy practico, pero va muy bien para practicar con variables, el "if", y diferentes operadores.

También le pondremos un par de pulsadores para poder ponerlo en hora, uno para los minutos y otro para las horas.

También se le puede añadir una alarma por ejemplo o que ponga la fecha, pero eso os lo dejo a vuestra imaginación.

El LCD lo conectaremos como en los ejemplos anteriores, y los pulsadores en modo pull.up en los pines 6 y 7



viernes, 16 de enero de 2015

Arduino: Diferentes efectos en un LCD 16x2

Como ya anunciaba en el post anterior Arduino: El LCD 16x2, con la librería liquidCrystal.h podemos crear diferentes efectos como parpadeos, desplazamientos, visualizar variables y efectos en cursores.

Algunos de estos efectos están en los mismos ejemplos que proporciona el mismo IDE de Arduino, y es una muy buena manera para empezar a trastear con el LCD.

Como quedaría un vídeo muy largo he decidido hacer dos partes.

En esta primera parte podréis ver como actúan las funciones:


  • autoscroll()

  • blink()

  • cursor()

  • customCharacter()

  • display()

Parte 1


Parte 2


Arduino: El LCD 16x2

Después de ver como funcionan los pulsadores le toca el turno a las parntallas de tipo LCD.

El LCD (Liquid Crystal Display por sus siglas en ingles) es una pantalla delgada y plana formada por pixeles.

Una de las mejores cualidades de este tipo de pantallas es su bajo consumo, pero también podemos destacar su facilidad de uso, su gran disponibilidad y fiabilidad

Este tipo de pantallas se utilizan en gran variedad de aparatos electrónicos dada su simplicidad tanto en conexiones como en su utilización. En ella se pueden reflejar desde un simple texto tipo "hello World", coordenadas GPS o cualquier tipo de variable que quepa en sus 16 caracteres.

También las hay de diferentes tipos y medidas como LCDs gráficas o LCDs a color, de 16x2 caracteres, 20x4 o incluso más.

En este ejemplo en particular usaremos la típica pantalla LCD de 16x2 caracteres.

Primero hablemos sobre sus pines y cuales son sus conexiones:

  • VSS o GND: Este pin del LCD es el pin conectado a masa (-)

  • VDD: Este pin es la alimentación del LCD y se conecta a +5V

  • Vo: Es el pin del contraste, este pin no esta siempre presente, pero si tu LCD lo tuviera, hay que conectarlo a un potenciómetro para poder regular el contraste, si lo conectas directamente a GND la pantalla no se vera correctamente.

  • RS: Es el pin de selección de registros que controla en que parte de la memoria del LCD esta escribiendo los datos.

  • R/W: Modo de lectura o escritura. Este pin va conectado normalmente a masa (GND)

  • E: Este pin habilita los registros. (Enable)

  • DB0...DB7: Son los 8 pines de datos.

  • A: Ánodo del LED de iluminación del LCD (+)

  • K: Cátodo del LED de iluminacion del LCD (-)

Su conexión con Arduino seria la siguiente:

Para facilitar el uso del LCD Arduino tiene una libreria llamada "LiquidCrystal.h" que hará mucho más fácil la comunicación entre el Arduino y la pantalla LCD.

Dentro de esta librería están las siguientes funciones:

sábado, 20 de diciembre de 2014

Arduino: primeros pasos

Muy buenas a todos y todas!!!

En este blog ya os he hablado alguna vez de Arduino, aunque siempre ha sido por cosas que he leído o que he visto en youtube y me han parecido interesantes.

Por fin puedo hablar desde la experiencia. Hace cosas de unos días he recibido mi placa Arduino UNO R3.

Después de abrir el paquete, me encontré con esto:

Arduino UNO R3

Esta pequeña obra de ingeniería, además de lo evidente como tener un conector USB (lo cual hace mucho más sencilla la comunicación con el PC), cuenta con un micro procesador de 8 bits AVR ATMEL ATMEGA328P con 32Kb de memoria FLASH operando a 16Mhz.

Cuenta también con múltiples salidas digitales, entradas analógicas, salidas PWM. Además de salidas reguladas de 5V y 3,3V.

Con todo esto es más que suficiente para empezar a desarrollar nuestros pequeños proyectos con los que podremos controlar LEDs, pulsadores, teclados numéricos, servos, pantallas LCD, OLED y TFT, infrarrojos, motores... pero vamos a empezar paso por paso.

jueves, 18 de julio de 2013

Comunicación Serial, transmitiendo datos PIC a Visual Basic 6

Muy Buenas a todos y todas!!!

Después de actualizar a la versión 1.1 del programa CDLA, ahora le toca el turno al programa en Visual Basic 6 para controlar las locomotoras desde el PC.

Este programa ya transmitía datos desde el PC al PIC, ahora lo que quiero que haga es que lea el control manual y muestre en la pantalla del ordenador los datos que envía el microcontrolador.

Para esto he utilizado el objeto MSCOMM1 que ya trae Visual Basic 6 con la instrucción "MScomm1.input".

Intentare explicarlo un poco y espero que sea comprensible:

Enviando datos desde PIC a VB6

Los datos que se mandan desde el microcontrolador PIC son transmitidos a una velocidad de 9600 bauds y cada variable va separada por ",":


include "modedefs.bas"   'Activa el modo de comunicación

Masterout var portc.6

Serout portb.1, N9600, [#variable1,#variable2,#variable3,"AK"]

* La variable 1 es una variable tipo BYTE que va desde 0 a 255
* La variable 2 es una variable tipo BYTE que va desde 1 a 8
* La variable 3 es una variable tipo BIT que va desde 0 a 1

Con serialComunicator de Mecanique nos mostrará en pantalla los datos en el siguiente formato:

010AK 010AK 010AK.... (Variable1 = 0, Variable2 =1, Variable3 =0, AK)

12831AK 12831AK 12831AK... (Variable1 = 128, Variable2 =,3 Variable3 =1, AK)

Esta es la trama de datos que se envían desde el microcontrolador PIC y que tendremos que decodificar en VB6.


Obtención de datos en VB6

Ahora, ¿como extraemos de esa maraña de caracteres los datos que nos interesan?

Para obtener los datos tenemos la función .Input de MScomm. con el adquirimos los datos del cual luego iremos desgranando dato por dato.

La rutina que vamos a utilizar esta dentro de un timer como podemos ver en el siguiente ejemplo:


Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim dataIn, tdataIn, Vel, total As String
Dim C, T, N, X As Integer   'cantidad, tipo, numero, valor

Private Sub Command1_Click()
  Timer1.Enabled = True
  MSComm1.PortOpen = True
  Command1.Enabled = False
  Command2.Enabled = True
End Sub

Private Sub Command2_Click()
  Command1.Enabled = True
  Command2.Enabled = False
  Timer1.Enabled = False
  MSComm1.PortOpen = False
End Sub

Private Sub Form_Load()
  Timer1.Enabled = False
  Command1.Enabled = True
  Command2.Enabled = False
End Sub

Private Sub Timer1_Timer()

  dataIn = MSComm1.Input
  If dataIn <> "" Then ' Si no es un texto vacio entonces...
    tdataIn = Len(dataIn)
    
    If tdataIn = 7 And Right(dataIn, 2) = "AK" Then
      Text2.Text = (Right(dataIn, 2))
      Text1.Text = dataIn
    
      Vel = Mid$(dataIn, 1, 3)
      total = ""
      For X = 1 To Len(Vel)
        If InStr("0123456789", Mid$(Vel, X, 1)) Then
          total = total & Mid(Vel, X, 1)
          N = total
        End If
      Next X
    
      dataIn = (Right(dataIn, 4))
      C = Left(dataIn, 1)
    
      dataIn = Right(dataIn, 3)
      T = Left(dataIn, 1)
    
      Text3.Text = C
      Text4.Text = T
      Text5.Text = N
    End If
  End If
End Sub

  • Text1: Lectura de toda la trama de datos enviados por el PIC.
  • Text2: Lectura de los caracteres de confirmación (AK).
  • Text3: Lectura de la Variable2
  • Text4: Lectura de la Variable3
  • Text5: Lectura de la Variable1


El tema de como sacar el los números de una cadena, viene muy bien explicado y con varios ejemplos en este magnifico foro de Visual Basic.


Espero que les sea de ayuda para entender como comunicar un microcontrolador PIC 16F628 o 16F876A con un sistema Visual Basic 6

Saludos a todos y todas!!!

viernes, 25 de mayo de 2012

Mis programas imprescindibles !!!

Esta entrada se me ha ocurrido porque he tenido que formatear y volver a instalarlo todo otra vez... Esta es una tarea algo tediosa y aburrida, de hecho la hago a ratos.

Primero lo mejor para no tener sustos es hacer un BACKUP de todo lo que sea importante para nosotros. En mi caso poco, ya que este ordenador solo lo uso para navegar y programar, para ver películas, guardar fotos y todo eso uso el de casa que es más potente.

Empecemos:

Un windows XP de modo desatendido. Es lo más rápido y fácil. Lo mejor (si dispones de otro pc) es simularlo con algún programa como Virtual Box. La mayoría viene con un montón de programas tipo VLC, Codec´s, CCleaner, y algún antivirus. Los podéis encontrar en CD y DVD, normalmente vienen en formato .ISO. En mi caso prefiero los CD, hay menos posibilidad de malware. Bien una vez lo tengas comprobado pasas a copiarlo en su correspondiente formato con algún programa como Nero.


Con la instalación limpia y todos los Drivers de tarjetas y vídeo, lo primero es un antivirus, Avast! antivirus es el que utilizo y no me da problemas. Otro muy recomendable es NOD32. Tampoco estaría de más algo como Ad-Aware free y Spyboot Seach &amp;amp; Destroy.

Y aquí empieza la "chicha".El orden es lo de menos, así que empezaremos:

Microcode Studio de Mecanique


Es el editor de código para Pic Basic Pro, entre otras cosas resalta el código con ayuda contextual. También resalta todos los define, los alias, variables y modificadores. También permite el cortar, pegar, deshacer, búsqueda etc.
Al compilar también identificará y corregirá los errores y tiene soporte para MPASM.


Proteus 7 Profesional

Proteus es una potente herramienta para simular circuitos electrónicos tanto digitales como analógicos, con el puedes crear proyectos sencillos como apagar y encender un LED o simular los programas que crees con  Microcode Studio.

Para mi este tipo de software es imprescindible ya que con el se ahorra gran cantidad de tiempo, ya que con unos simples clics podremos simular casi cualquier circuito. Entre otras cosas Proteus incluye, Microcontroladoes, pantallas LCD, osciloscopio, conexión con puerto COM, LPT;


Virtual Serial Port Driver de Eltima Software


Virtual serial Port, es una sencilla herramienta para simular pares de puertos COM.
Tiene compatibilidad completa con el control de HandFlow (hardware y Xon/off),
También tiene diferentes configuraciones como estandar, bucle o personalizado.
Los puertos una vez configurados se vuelven a crear al reiniciar el sistema
Este programa es casi imprescindible si estas trabajando con Proteus y Visual Basic sobre todo si estas probando la comunicación con el puerto COM.

Descargar Virtual Serial Port de Eltima Software


Visual Basic 6.0 (Visual Studio 6)

Visual Studio 6 es la ultima versión de basic que no trabaja sobre .NET y la ultima en correr en un windows 9x. También es la ultima versión en incluir Visual Basic basado en component objet model y aunque las versiones posteriores incorporan una versión muy diferente del lenguaje con muchas mejoras (fruto de la plataforma .NET), para empezar y como lenguaje más bien simplón, podremos hacer casi cualquier programa que imaginemos.
Aunque si lo que quieres es aprender programación creo que seria mejor que empezaras con C o Phyton, en mi caso y al ser por hobby, con Visual Studio 6 obtengo muy buenos resultados.

Inkscape

Inkscape, es un editor de gráficos vectoriales de código abierto, con capacidades similares a Illustrator, freehand, CorelDraw, usando el estándar de la W3C. El formato de este programa es SVG (Scalable Vector Grafic). Inkscape también soporta meta-datos Creative commons, edición de nodos, capas, operaciones complejas con trazos, vectorización de archivos gráficos, texto en trazos, alineación de textos, edición de XML directo y mucho más. Puede importar formatos como Postscript, EPS, JPEG, PNG y TIFF y exporta PNG así como otros formatos basados en vectores.


Descargar Inkscape ultima versión estable 0.48.2-1 

Lamentablemente y debido a como están las cosas, solo pongo los enlaces oficiales de los programas, ya que los demás son para uso personal podéis encontrarlos todos por las vías normales como torrent o e-mule e incluso en Taringa.

Espero que esta lista de programas os sean de ayuda, espero poder ampliarla con enlaces próximamente!!

Un saludo!!

martes, 4 de octubre de 2011

Comunicación PC con PIC con MAX232

Buenas a todos y todas!!!

Revisando el blog, me he dado cuenta que no he explicado como conectar el Max232 para la comunicación entre el PC con el microcontrolador.

Para este tipo de comunicaciones vamos a utilizar el puerto serial del PC o mejor conocido como puerto COM.


Para realizar la conexión solo necesitamos 3 pines de los 9 que tiene el puerto serie con conector DB-9 estos pines son:

  • Pin 2: RX Es el pin por el cual el PC recibe los datos que le enviamos desde el Pic.
  • Pin 3: TX Es el pin por el cual el PC manda los datos al Pic.
  • Pin 5: Es GND, este tiene que ser común con el GND del Pic

Los demás pines no se utilizan para el Max232.



Y esta es la conexión que tenemos que realizar para que nuestro Max232 funcione correctamente.

Normalmente los condensadores C1, C2, C3 y C4 son de 1uF. Pero cuando lo probé no me funciono pero al cambiarlos por los de 10uF funciono correctamente.

A mi así me funciona al 100%.

La alimentación del MAX232 va desde los 4.5V hasta los 5,5V con un consumo de 8mA.

Al tener un consumo tan reducido lo podemos conectar directamente a la fuente regulada de 5v que utilicemos para la alimentación del microcontrolador.

Con este componente simple y barato (el último que compre no llego a 1€) y unos pocos condensadores, podemos conectar el PC al PIC y viceversa. Este lo tengo en el Bootloader con un 16F876A, aunque también lo he utilizado en comunicaciones por RF y cable con un 16F628A.

Otros artículos sobre programación con microcontroladores MicroChip que os pueden interesar:

Saludos a todos y todas!!!

sábado, 1 de octubre de 2011

Primer programa 16f876A ADC y PWM

Muy buenas a todos y todas!!!

Primero de todo comentar que el bootloader con el microcontrolador 16F876A es lo más cómodo que he utilizado desde que empecé con los microcontroladores. Realmente animo a todos los que crean que tiene mucho lio, que se pongan, es realmente fácil y sobre todo muy cómodo.

Dicho esto, este es el primer programa que he realizado en PBP para el PIC 16F876A, aparte del mítico Blink (parpadeo) para comprobar que todo esta correcto con la programación.

Es un programa para utilizar un potenciómetro con el conversor analógico que integra el PIC internamente.

Primero lee el potenciómetro en una de las entradas analógicas del microcontrolador, en este caso AN0 y con ello controlamos la intensidad del un led mediante la función PWM (Pulse Width Modulation).


DEFINE LOADER_USED 1	' Para usar el bootloader

DEFINE OSC 20			' Defino la velocidad del cristal
DEFINE ADC_BITS 10 		' Conversión A/D a 10 bits
DEFINE ADC_CLOCK 3  
DEFINE ADC_SAMPLEUS 10 

Led1 VAR portc.1	' El puerto C1 pasa a llamarse Led1
Dato VAR WORD		' Variable para el dato

TRISA = %11111111	' Puerto A todo como entradas
ADCON1 = %10000010
PAUSE 1000

Inicio:

  ADCIN 0, Dato	' Lee el puerto AN0 y lo guarda en la variable Dato.
  Dato = Dato /4	' Al tener la conversión en 10bits la variable es de 0 a 1023 dividimos
      			' entre 4 para tener una variable de 0 a 255.
  PWM Led1, dato, 30	'PWM lee la variable almacenada en Dato y la transmite atraves de Led1.
  GOTO Inicio 
    
END
    

Una imagen de las conexiones:


Otros artículos sobre PWM en microcontroladores que te pueden interesar:

Un saludo!!

domingo, 24 de julio de 2011

PCBs con Agua fuerte y Agua Oxigenada

Muy buenas a todos y todas!!!

Nunca me había atrevido ha realizar placas impresas por el engorro que lleva y los productos químico pero esta tarde y de la mano de Mr Batalla, por fin he realizado mi primera placa impresa!!

Las PCB en cuestión han sido un "Pingüino" para el microcontrolador 18F4550 y un driver para motores con el integrado L293D.

La verdad para ser la primera vez que lo hago no ha estado mal y me he venido a casa muy contento con el resultado.

La lista de materiales se puede encontrar en cualquier sitio y con productos para nada extraordinarios. Para hacer esto hemos empleado:

  • 1 Pinzas de plástico (en este caso de ensalada)
  • 1 Cubeta de plástico.
  • 1 Taco de lija gruesa.
  • 1 Taco de lija fina.
  • 1 Botella de Agua Fuerte (50%).
  • 1 Botella de Agua Oxigenada (del supermercado).
  • 1 Rotulador graso (En este caso un Papermate).
  • 1 cúter (para repasar las pistas)
  • 1 Botella de alcohol 96º (el de las heriditas).
  • 1 Unos guantes de látex o de cocina (con los de látex tienes más sensibilidad, pero que sea de plástico).
  • 1 Plancha de la ropa



Esto seria solo para el proceso de transferencia y del ataque al cobre. 

Previamente ya habíamos impreso los circuitos en papel de acetato (uno transparente) en una impresora LASER. Lo que vamos a fijar en la placa es el toner que transferimos desde el papel.




Bueno empezamos cortando de la placa virgen el trozo de placa que vamos a utilizar. La puedes cortar con cualquier sierra o con un disco de corte pequeño o una dremel. El más rápido es el del disco de corte pequeño, con disco fino; dremel aunque se tarda un poco más, y por ultimo la sierra que es la más engorrosa pero efectiva igual.



Una vez cortado continuamos limpiando bien la placa virgen, tiene que quedarse bien brillante y sin impurezas y mucho menos grasa, para ello nos ponemos los guantes de Látex para no pringar con los dedos la placa y primero le damos con la lija más gruesa y luego con la fina; Terminamos con limpiando con alcohol.



Pasamos a transferir el toner del circuito en el papel de acetato a la placa virgen.

Utilizamos la conocida técnica de "la plancha" pero con una variante de "plastificado".

Mr Batalla ya tenia preparada una plastificadora de documentos, que en este caso la usaremos para pasar unas cuantas veces, cuantas más mejor, contamos unas 12 pasadas pero como estábamos hablando pues puede que fueran unas 10.. 11.. 13.. 14..

Bien ahora ponemos la placa y centramos nuestro circuito en ella y ponemos un papel para no poner directamente la plancha encima del papel de acetato. Ponemos la plancha encima poco a poco y la dejamos encima 1 minuto aproximadamente y luego aplicamos presión durante unos 3 minutos.

OJO esto hay que hacerlo con cuidado pues si aplicamos calor en exceso, sale una ampolla y pierdes la placa y el acetato con el circuito.

Después de eso lo dejamos enfriar, y pasamos ahora a la parte que más "miedo" me daba, los productos químicos.




Para los productos quimicos usamos Agua fuerte y agua Oxigenada

Tenía entendido que no funcionaba bien así, y me sorprendió que los primeros resultados aparecieron bastante rápido.

Eso si el agua fuerte me comento que probo varios hasta encontrar el "bueno" y me dijo que había que fijarse en el % que este que usaba el era de un 50% que hay muchos que no son tan altos y que eran más lentos. Bueno pues fue casi mitad y mitad un poquito más de agua oxigenada.

Como medida estándar "2 dedos" de agua fuerte y 3 de agua oxigenada, depende de la cubeta que utilices, la nuestra era más bien pequeña.


Pues eso, sumergimos la placa en la solución resultante y esperamos... para acelerar el proceso podemos ponerle un palito, o rotulador en el centro del recipiente para poder balancearlo.

Esto no es, creo, obligatorio, pero acelera el proceso ( y mucho).
Veremos como se va comiendo el cobre casi literalmente.
Normalmente empieza por la parte exterior y se la va comiendo de fuera a dentro, o al menos esa fue mi impresión.


Cuando veamos que ya no queda nada de cobre visible, sacamos la placa con las pinzas y lo ponemos en remojo o lo lavamos bien, hasta que salte el toner y se queden visibles las pistas de cobre.

Para finalizar y esto también es opcional, le aplicamos a las pistas limpiador para soldar "¿FLUX?" y estañamos un poco las pistas con un poquito veremos como extiende el estaño. Y esto ha sido todo, bueno esto y la buena tarde que pasamos haciendo placas PCB!!!


Un saludo Mr Batalla!!!

viernes, 22 de julio de 2011

Software Pinguino 18f4550

Ya lo tengo en camino!!! Después de mucho tiempo con el 16f628a (casi desde que empeze con este blog) me cambio de familia!!! Si, pensé que aunque no valla muy sobrado con el 16f628a, ya me hacia falta una actualización, me veia un poco estancado. Estube mirando arduino, pero al final me he decantado por Pinguino. El hardware está basado en un 18f4550 este microcontrolador disponen de interfaz USB nativo, de un puerto de serie, I2C y entradas y salidas de propósito general y se puede alimentar tanto por USB como por un conector externo.


El entorno de desarrollo (IDE) es practicamente igual que arduino.
También esta basado en Python y dispone de un compilador de C, un ensamblador y enlazador (GPUTILS) y un bootloader basado en PUF.



En la esta web podéis descargaros las PCB´s.



En este enlace podéis descaros el software necesario para instalar en Windows 7 con la versión 9.05


El orden de la instalación es el siguiente:
1. setup.exe -> Instalación de LibUSBpython 2.6.6 Python versión 32 bits (Con la de 64 bits no funcionará)
2.wxpython 2.8.1 -> También en 32 bits (Al haber instalado Python 32Bits no dara problemas)
3.pyusb 0.4.3 -> Sin problemas.
4.Descomprimir Pinguino Beta 9-05 y ejecutar con Pythonpinguinobeta9windows.py

Para que no me diera problemas los instale todos como Administrador y que utilizo el W7 de 32bits.

Tambien los archivos de instalación para Windows XP Aquí

1.
Instalamos Python 2.5.2
2. Instalamos wxpython 2.8
3. Instalamos pyusb
4. Instalamos libusb-win32

5. Extraemos los archivos de "driver pinguino windows.tar" en una nueva carpeta y conectamos el pinguino y cuando nos pregunte por el driver, le diremos que esta en la carpeta que acabamos de crear
6. Descomprimimos "pinguino_beta9-05_windows(2).zip" en otra carpeta y hacemos click en el botón derecho del ratón en
betaX.py y en "abrir con..." seleccionamos python.
Por el momento solo he probado la de W7 pero mañana seguramente haga la instalación en XP para probar que funcionan las 2
Bueno ya solo falta que llegue el paquete y empezar a investigar esto mucho más a fondo, hacer pruebas y más pruebas.

sábado, 16 de julio de 2011

Entrada de osciloscopio con PC y tarjeta de sonido

Muy buenas a todos!!

Esta vez me ha dado por hacer una herramienta que seguro sera muy útil a más de uno se trata de una entrada para osciloscopio en PC.

Hoy la he probado y bueno, no tengo ni idea de como se usa... pero le he conectado un 555 con pwm para probar.

Después de unos momentos de tensión (no me fiaba mucho) ha salido algo en la pantalla y tocando aquí y allá pues al final si que he conseguido ver algo.

Como he dicho no lo he usado en la vida, así que ahora me toca tomar nota de como se utiliza el osciloscopio y como se le puede sacar partido con los microcontroladores PIC o más actualmente con Arduino.

El circuito original es este:

Lo he sacado de un post de este foro y es para aprovechar la salida estéreo de la tarjeta de sonido.

Como solo voy a usar un canal, le hemos hecho unos cambios al circuito y ha quedado así:

Porque la verdad me daba igual que fuera estéreo... primero a ver como funciona en mono y luego ya actualizamos!!!

El único cambio ha sido la resistencia variable de 5K, como no tenía con ese valor, hemos puesto una de 4K7.

Funcionar funciona lo he probado con Winscope y Soundcard Scope de Christian Zeitnitz (Versión 1.40 en español) el ordenador es un 433 a 256MB de memoria ram y una tarjeta de sonido de 16 bits PCI que tenia por ahí.

No pongo capturas porque lo he terminado tarde y no me ha dado tiempo ya que las pruebas las hago en otro PC que no tiene conexión a nada.

Saludos!!!

sábado, 5 de marzo de 2011

Veotutoriales

Después de darme cuenta de que muchos amigos consultan tutoriales online, normalmente de Youtube, me he decidido a crear veotutoriales.blogspot.com.

Principalmente estoy subiendo videos relacionados con programas informáticos y electrónica, pero ahora mismo estoy empezando y no descarto ampliar los temas, así que estoy abierto a sugerencias.

Los más completos son:

By PeYuTrOn

domingo, 6 de febrero de 2011

LCD 16x2 para PC por LPT1

LCD 16x2 para PC por puerto LPT1

Muy buenas a todos y todas!!

Este es un proyecto que llevaba tiempo en el tintero para darle añadir un pequeño gadgets que es muy sencillo y puede estar listo y funcionando en el ordenador en menos de un par de horas.

Bueno lo primero es tener los materiales, todos fáciles de conseguir y que no superan los 15€ (a mi me ha salido por unos casi 0€ ya que menos la pantalla (y el ordenador) todo lo demás es reciclado y la pantalla ya la tenia y me salio por unos 3€ o 4€.

Materiales:

  • Pantalla LCD 16x2 compatible HD44780
  • Conector DB25 Macho
  • Resistencia variable 10K
  • Resistencia variable 100 ohm
  • Conector tipo molex para fuente de PC

Bien una vez que tenemos todo lo necesario, toca ponerse manos a la obra con las conexiones, el esquema que he seguido es el siguiente:



El original lo saque de Neoteo pero le he modificado la patilla de R/W conectándola directamente a masa, ya que esta patilla se utiliza para la lectura/escritura del LCD.

Cuando la conectamos a GND ponemos el LCD directamente lo habilitamos para escritura. En el original va conectado a la patilla 14 del DB25.

Fotos del Montaje:

Esta es la pantalla LCD 16x02 compatible con HD44780 que he utilizado


Primero recorte el frontal de plástico del PC con unos orificios para meter los potenciómetros, yo utilice de los pequeñitos que no llevan "mango" no por nada en especial solo que era lo que tenia a mano.

Después de recortar comprobar que todo encaja bien y que esta bien centrado, di por terminada esta pieza que es casi la mitad del trabajo.


Este es el aspecto del LCD con sus soldaduras hechas, 11 lineas en total para el puerto LPT1 y 2 para alimentación (+5V y GND)

Aquí ya esta todos los componentes montados, el conector DB25 y el conector tipo molex para la alimentación a +5V (en mi fuente el cable de color ROJO) y la toma de GND.

Solo falta de ponerle un adhesivo para que quede mas bonito.

LCD 16x2 para PC por puerto LPT1


Y este es su aspecto una vez terminado y puesto en su sitio.

Bueno después de montarlo necesitamos el software para hacerlo funcionar junto con el sistema operativo, para esto estoy utilizando el programa LCD Smartie 5.4.1 con soporte para para Windows 7.

También sigo investigando que más hay por ahí más programas para el LCD y pongo una lista de programas y plugins.

Saludos!!!!