sábado, 23 de abril de 2016

Funciones trigonometricas en Processing

FUNCIONES TRIGONOMÉTRICAS EN PROCESSING

Muchos cálculos matemáticos necesitan de las funciones trigonométricas seno, coseno y tangente, ya sea para hallar relaciones o ángulos.
En el caso de Processing están incorporadas las funciones mencionadas para realizar operaciones empleando la notación en radianes para la realización de operaciones angulares.
Es necesario antes de realizar una operación con funciones trigonométricas el de convertir un valor dado en grados a radianes, Processing tiene las siguientes funciones para realizar la conversión de grados a radianes y viceversa.
  • radians() convierte un valor en grados a radianes, por ejemplo para convertir 90 grados a radianes hacemos: AnguloRadianes = radians(90)
  •  degrees() convierte un valor en radianes a grados , por ejemplo para convertir PI/2 radianes a grados hacemos: AnguloGrados = degrees(PI/2)
180 grados equivalen a PI radianes, donde PI es aproximadamente igual a 3.1416, el siguiente ejemplo muestra esta relación mostrando los valores en la consola de Processing 
Ejemplo de conversión en Processing
float AnguloRadianes,AnguloGrados;
AnguloRadianes=radians(180);
println("180 grados a radianes es "+AnguloRadianes);
AnguloGrados=degrees(PI);
println("PI radiane a grados es "+AnguloGrados);

Simulación valor en radianes y grados

La siguiente simulación muestra el valor en radianes y grados según la posición del puntero del ratón.

 



 


FUNCIONES Y CONSTANTES EMPLEADAS 

  • sin() : Función para calcular el seno de una ángulo en radianes.
  • cos() : Función para calcular el coseno de una ángulo en radianes.
  • tan() : Función para calcular la tangente de un ángulo en radianes.
  • radians(): Convierte un valor en grados a radianes.
  • degrees(): Convierte un valor en radianes a grados.
  • PI : Constante para el valor de PI.
  • TWO_PI : Constante para el valor de dos PI.
  • HALF_PI: Constante para el valor de PI medios.
  • QUARTER_PI: Constante para el valor de PI cuartos.

VISUALIZACIÓN DE LAS FUNCIONES SENO Y COSENO

En la animación se visualizan de forma simultanea las funciones seno (puntos azules) y la función coseno (puntos rojos), el incremento angular se realiza incrementando la variable Angulo PI/80 radianes sucesivamente, también se emplea la variable T para realizar el desplazamiento del gráfico sobre el eje X, este incremento se realiza de uno en uno. Cuando se llega al limite de la pantalla se limpia el lienzo y la variable T se reinicia en 0.





miércoles, 13 de abril de 2016

Comunicacion serial asincrona en Arduino

COMUNICACIÓN SERIAL ASÍNCRONA ENTRE DOS TARJETAS ARDUINO

Este ejemplo básico realiza la comunicación entre un Arduino que hace de emisor y otro de receptor
En este ejemplo se emplea la función Serial.write() para enviar un numero entero que puede ser cualquier valor entre 0 a 255, es decir el dato de 1 Byte
En el receptor se declara una variable entera para almacenar el valor leído por medio de la función Serial.read() la variable de almacenamiento también puede ser de tipo char pero en este caso se tendrá en cuenta el valor equivalente en código ASCII para realizar la comparación, por ejemplo las equivalencias en las estructuras condicionales serian:
  • if(Dato==48) equivale a if(Dato=='0') si Dato es de tipo char en lugar de int
En este ejemplo se debe de tener en cuenta que la lectura de datos se realiza dos veces mas rápido de lo que se hace el envío gracias a funciones de retardo realizadas tanto en el receptor como en el emisor.

Ejemplo Realizado En 123D Circuits 

En este ejemplo se conectan dos tarjetas un que envía la que tiene la conexión en TX y otra que recibe la que tiene la conexión en RX.

Conexión Serial Básica

Código de Arduino que transmite:

int Dato;
void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);//Led que trae incorporado la tarjeta Arduino
}

void loop(){
  if (Serial.available() > 0) {//Verifica que hay datos en el buffer de recepcion
    Dato = Serial.read();//Lee dato
    Serial.print("Dato Recibido = ");//Muestra que dato fue leido en el Serial Monitor
    Serial.println(Dato);
    if(Dato==48){
      digitalWrite(13,LOW);//Apaga Led
    }
    if(Dato==49){
      digitalWrite(13,HIGH);//Enciende Led
    }
    delay(100);//Retardo entre lecturas de datos
  }
}

Código de Arduino que recibe:

int Dato;
void setup(){
  Serial.begin(9600);
  pinMode(13,OUTPUT);//Led que trae incorporado la tarjeta Arduino
}

void loop(){
  if (Serial.available() > 0) {//Verifica que hay datos en el buffer de recepcion
    Dato = Serial.read();//Lee dato
    Serial.print("Dato Recibido = ");//Muestra que dato fue leido en el Serial Monitor
    Serial.println(Dato);
    if(Dato==48){
      digitalWrite(13,LOW);//Apaga Led
    }
    if(Dato==49){
      digitalWrite(13,HIGH);//Enciende Led
    }
    delay(100);//Retardo entre lecturas de datos
  }
} 

Menu con pantalla LCD

EJEMPLO DE UN MENÚ DE NAVEGACIÓN EMPLEANDO PANTALLA LCD

Los menús son una forma ordenada de ejecución de un programa que permita configurar y seleccionar diferentes procesos.
En este ejemplo se configura y se ejecuta el encendido y apagado de un led, los parámetros a configurar son:
  • El retardo de encendido que puede ir de 100 a 1000 milisegundos
  • El numero de veces que se ejecutar el ciclo de encendido y apagado del LED
Se emplearan 4 pulsadores para poder navegar en el menú y configurar los parámetros.
Hay dos ejemplos de código, uno realizado con switch - case donde cada caso es una opción del menú. El otro ejemplo emplea estructuras cíclicas while donde un cada ciclo while contiene una opción de menú.
Menú Encendido y Apagado De Un Led

sábado, 9 de abril de 2016

jueves, 31 de marzo de 2016

Conexion Display 7 segmentos

CONEXIÓN DE DISPLAY DE 7 SEGMENTOS

Esta publicación muestra la conexión básica de un decodificador para display de 7 segmentos, tanto para Arduino como Pinguino.
En la siguiente figura se muestra la distribución de terminales de un display de 7 segmentos de cátodo común, el de ánodo común tendrá el terminal central conectado a VCC (5V)

Display de 7 segmentos
 

CONEXIÓN A UN DISPLAY DE CÁTODO COMÚN

Un display de cátodo común tiene su terminal común a tierra (GND).
La conexión aquí mostrada emplea un decodificador BCD para display de 7 segmentos de cátodo común con el circuito integrado cd4511 siendo equivalente también el 74HC48.
El montaje y simulación de este circuito se realizo con la herramienta 123D Circuits al final de este articulo esta el enlace respectivo.

 
Conexión con el cd4511

CONEXIÓN A UN DISPLAY DE ÁNODO COMÚN

Un display de ánodo común tiene su terminal común a VCC (5V).
La conexión aquí mostrada emplea un decodificador BCD para display de 7 segmentos de cátodo común con el circuito integrado 7447.


Conexión Arduino con el 7447

Conexión Pinguino 7447

 

CÓDIGO DE EJEMPLO 1

El siguiente programa emplea escritura directa al puerto D de la tarjeta Arduino con la instrucción PORTD. 
Este programa consiste en un contador cíclico de 0 a 9 incrementando la variable contadora i y asignando su valor al puerto D del microcontroaldor.
char i=0;
void setup(){
 DDRD=B11111111;
}
void loop(){
  PORTD=i;
  delay(1000);
  i++;
  if(i>9)
    i=0;  
}


CÓDIGO DE EJEMPLO 2

El siguiente programa emplea escritura directa al puerto B de la tarjeta Pinguino con la instrucción PORTB. 
Este programa consiste en un contador cíclico de 0 a 9 incrementando la variable contadora i y asignando su valor al puerto B del microcontroaldor.
char i=0;
void setup(){
 TRISB=0;
}
void loop(){
  PORTB=i;
  delay(1000);
  i++;
  if(i>9)
    i=0;  
}

CÓDIGO DE EJEMPLO 3

El siguiente programa visualiza en numero 5 en el display empleando programación tradicional que es compatible tanto para Arduino y Pinguino
void setup(){
 pinMode(0,OUTPUT);

 pinMode(1,OUTPUT);
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
}
void loop(){
 digitalWrite(0,HIGH);

 digitalWrite(1,LOW);
 digitalWrite(2,HIGH);
 digitalWrite(3,LOW);

}

ENLACES DE CONSULTA 

sábado, 12 de marzo de 2016

Pantalla LCD

Montaje Pantalla LCD 16x2 En 123D Circuits 

Los siguientes enlaces muestran el montaje y el código empleado en la simulación sobre el manejo de una pantalla LCD.

LCD con Servo  



Programa de ejemplo LCD con Servo

Este programa incrementa la posición del servo motor incrementando un grado cada vez que se presiona el pulsador que esta mas a la derecha.
En la pantalla se muestra la posicion en grados del servo motor.
 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);//(RS ENABLE D4 D5 D6 D7)
Servo servo01;
int PosServo01=0;
int PinPulsador01=8;
int PinServo01=12;
void setup() {
  pinMode(PinPulsador01,INPUT);
  lcd.begin(16, 2);//Pantalla de 16 columnas por dos filas
  servo01.attach(PinServo01);
  lcd.print("Control servo");
}
void loop(){
   if(digitalRead(PinPulsador01)==LOW){
    PosServo01=PosServo01+1;
    delay(10);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Posicion Servo");
    lcd.setCursor(0,1);
    lcd.print(PosServo01);
    lcd.print(" Grados"); 
   }
  servo01.write(PosServo01);
}

Enlace a los circuitos en 123D Circuits 

Los siguientes enlaces muestran diferentes circuitos básicos empleando la pantalla LCD.

sábado, 10 de octubre de 2015

Decodificadores en Logisim

Circuitos Con Decodificadores En Logisim
 Decodificador de 3 a 8 con el 74138
El decodificador 74138 es un dispositivo estándar de amplio uso ya sea como elemento electrónico que se consigue en una tienda electrónica o como dispositivo que se puede sintetizar en una FPGA.

La librería empleada en Logisim para la realización del circuito que se observa en el vídeo se puede descargar del siguiente enlace
 En la tabla se observa que las salidas son activas bajas y que para que opere las entras de activación deben conectarse adecuadamente sino las salidas siempre serán uno. 
Tabla de la verdad del 74138
 
Explicación del funcionamiento 

Generación de funciones lógicas con decodificadores

Los decodificadores son también generadores de minterminos por lo tanto con ellos es posible realizar circuitos lógicos combinatorios a partir de tablas de la verdad o ecuaciones boolenas.
El siguiente vídeo explica el principio de operación del decodificador como generador de minterminos para la realización de un circuito que indique si un numero de 3 bits es impar.
 
 
Generación de funciones lógicas


En el vídeo se empleo una compuerta OR con entradas negadas (negativa OR), empleando el teorema de DeMorgan se puede realizar el equivalente lógico correspondiente empleando una compuerta NAND.
En la tabla se observa que /(B.A) = /B + /A que es la equivalencia que se aplica para emplear una compuerta NAND en lugar de una negativa OR 

Tabla con equivalencias lógicas

 
Generación de funciones lógicas parte 2
 

miércoles, 7 de octubre de 2015

Logisim para la simulacion de circuitos logicos

Circuitos Lógicos Digitales Con Logisim
 Logisim es un herramienta que permite la realización y simulación de circuitos lógicos digitales, permite la realización de circuitos básicos hasta circuitos complejos como procesadores.

Conexiones En Logisim
Logisim permite la conexión de varios datos binarios en un solo hilo (bus de datos) . El siguiente vídeo muestra los principios básicos de conexión.