miércoles, 16 de agosto de 2017

Cronometro, Reloj Contadores 4 bits

SE DESARROLLO UN RELOJ A PARTIR DE 74LS90, 74LS47, 74LS08, NE555, ES AJUSTABLE A LAS HORAS Y TIENE REINICIO A LAS 24 HRS, LIMITE A 60MIN Y 60SEG, BOTONES DE AVANCE RÁPIDO, Y BOTÓN DE RESET.

LOS 555 SON OSCILADORES ASTABLES UNO DE 1HZ Y OTRO DE MAYOR FRECUENCIA PARA LOS INCREMENTOS RÁPIDOS.



Enlace de simulación PROTEUS :
https://mega.nz/#F!pTBhXLDS!8WbNSbbYQj646X0ce01izA 




miércoles, 2 de agosto de 2017

Amperimetro

Código:
#include <LiquidCrystal.h> // Incluye la Libreria LiquidCrystal
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Crea un Objeto LC. Parametros: (rs, enable, d4, d5, d6, d7)
float sensibilidad=0.100;//valor dado por el fabricante 5A=0.185, 20A=100, 30A=66
//variables universales
float v;
float ruido=0.040;
int selector=8,i;
//variables para directa
float salida, intensidad;
int rango=500;
//variables para alterna
float reposo=2.5;
float pico=0;
float redelectrica = 120;

void setup(){
  pinMode(selector,INPUT);//swithc de seleccion
  lcd.begin(16,2); // Inicializa la interface para el LCD screen, and determina sus dimensiones (ancho y alto) del display
  lcd.print("  INICIO");
  delay(1000);
}


void loop(){

  if(digitalRead(selector)==true){
    directa();
  }
  else if(digitalRead(selector)==false){
    voltaje();
    alterna();
  }
  //****SECCION PARA IMPRIMIR VALORES****
}
void voltaje(){
  v = analogRead(A0)*(5.0/1023.0);//calculo de Voltaje con señal analoga 1023 con referencia a 5v
}

void directa(){
  for(i=0;i<=rango;i++){
      voltaje();
      intensidad=intensidad+(v-2.5)/sensibilidad;//v-2.5/sensibilidad =i(amps)
    }
  intensidad=intensidad/rango;//se calcula un promedio a las mediciones en rangos de 25
  salida=intensidad;
  if(salida<=ruido)salida=0;
  lcd.clear(); // Limpia la pantalla
  lcd.print("    Directa");
  lcd.setCursor(0,1);
  lcd.print(salida,3);
  delay(250);
}

void alterna(){
  long tiempo=millis();
  float maxima;
  float minima;
  while(millis()-tiempo<500){
    voltaje();
    intensidad=0.9*intensidad+0.1*((v-reposo)/sensibilidad);
    if(intensidad>maxima)maxima=intensidad;
    if(intensidad<minima)minima=intensidad;
    salida=((maxima-minima)/2);
    if(salida<=ruido)salida=0;
  }
  lcd.clear(); // Limpia la pantalla
  lcd.print("    Alterna");
  lcd.setCursor(0,1);
  lcd.print(salida,3);
  delay(300);
}


Diagrama de sensor y switch pulldown

El diagrama del lcd véanlo en el blog del display anexado en el vídeo
https://www.youtube.com/watch?v=R-CRIthB7ZY



sábado, 20 de mayo de 2017

Control NRF24L01

SUSCRIBETE A MI CANAL Y NO OLVIDES DARLE LIKE A MIS VÍDEOS 


Prueba 1
EMISOR_P1
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
//el emisor no necesita la librería servo (no controla ningún servo)

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL; /*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
int i=0;
//variables para prueba 3
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int p1,p2;


void setup(){
  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openWritingPipe(direccion);//canal de escritura
}

void loop(){
  //prueba 1 funcional
  ///*
  for(i=0;i<=180;i++){
    //sección de envió de datos
    radio.write(&i, sizeof(i));//escribe el mensaje a enviar por el NRF24
  }//*/

  //prueba 2 funcional
  /*
  //sección de lectura de datos
  if(Serial.available())//Lectura si hay byte almacenado en la entrada serial del IDE
  {
    comando=Serial.read(); //lectura de byte
    if(comando=='+')i+=10;
    else if(comando=='8')i+=15;
    else if(comando=='-')i-=10;
    else if(comando=='2')i-=15;
    if(i>180)i=180;
    else if(i<0)i=0;
  }
  //sección de envió de datos
  radio.write(&i, sizeof(i));//escribe el mensaje a enviar por el NRF24
  //*/
  
  //prueba 3 mover dos servos
  /*
  p1 = map(analogRead(A5),0,1023,0,180);
  p2 = map(analogRead(A4),0,1023,0,180);
  //sección de envió de datos
  radio.write(&sincro, sizeof(sincro));
  radio.write(&p1, sizeof(p1));
  radio.write(&p2, sizeof(p2));
  radio.write(&fintrama, sizeof(fintrama));
  //*/

  //NOTAS
  //los delays afectan la capacidad de transmitir del equipo...
  //

}

RECEPTOR_P1
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
#include <Servo.h>//para controlar el servomotor SG90

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL;/*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
Servo SG901;
//variables para prueba 3
boolean trama=false;
int i,j=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int p1,p2;

Servo SG902;
 
void setup(){

  SG901.attach(7);//asigna el pin 7 al servo sg90
  SG902.attach(6);

  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openReadingPipe(1,direccion);//lectura de canal (canal,dirección)
  radio.startListening();

  SG901.write(0);
  SG902.write(0);
  delay(500);
  Serial.println("INICIADO");//indica que ah iniciado a funcionar el receptor
}/*usamos radio.openReadingPipe(1,pipe) para poder leer y después radio.startListening()
    nos permite comenzar la escucha.*/
 
void loop(){
  // Pruebas 1,2
  ///*
  if(radio.available())//verifica si hay algo en espera en el radio
  {
    int angulo;
    radio.read(&angulo, sizeof(angulo));
    SG901.write(angulo);
    Serial.println(angulo);
  }
  //*/
  //Prueba 3
  /*
  if(radio.available()){
    radio.read(&i, sizeof(i));
    asignar();
  }
  //*/
}//FIN LOOP

//función para la prueba 3
void asignar()
{
    if(i==sincro){
      trama=true;
      Serial.print(i);Serial.print("-1\n");
    }
    else if(j==0&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-2\n");
        p1=i;
        j=1;
    }
    else if(j==1&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-3\n");
        p2=i;
        j=2;
     
    }
    else if(i==fintrama&&j==2&&trama==true){
        Serial.print(i);Serial.print("-4\n");
        SG901.write(p1);
        SG902.write(p2);
        j=0;
        trama=false;  
    }

}
Código de control con envió de 4 variables
CONTROL_EMISOR
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
//el emisor no necesita la librería servo (no controla ningún servo)

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL; /*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
int i=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int b1,b2,b3,b4;//enteros "bytes de datos" ENVIAR

void setup(){
  pinMode(8,INPUT);//pulsador lectura de estado led
  pinMode(7,INPUT);//pulsador lectura de estado led
  pinMode(2,OUTPUT);//pulsador lectura de estado led
  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openWritingPipe(direccion);//canal de escritura
  digitalWrite(2,HIGH);
  delay(1000);
  digitalWrite(2,LOW);
}

void loop(){
  b1 = map(analogRead(A5),0,1023,0,180);//lectura analógica asignada a un valor entero 0- 180
  b2 = map(analogRead(A4),0,1023,0,180);//lectura analógica asignada a un valor entero 0- 180
  b3 = digitalRead(8);//lectura digital asignada a un entero 0-1
  b4 = digitalRead(7);//lectura digital asignada a un entero 0-1
  //sección de envió de datos
  radio.write(&sincro, sizeof(sincro));
  radio.write(&b1, sizeof(b1));
  radio.write(&b2, sizeof(b2));
  radio.write(&b3, sizeof(b3));
  radio.write(&b4, sizeof(b4));
  radio.write(&fintrama, sizeof(fintrama));

}

CONTROL_RECEPTOR
/*
 * Código desarrollado por Erik Fernandez Juallek 
 * Visita mi canal de youtube y suscribete 
 * Este código envía diferentes bytes usando el modulo NRF24
 */
#include <SPI.h>//para la comunicación SPI
#include <nRF24L01.h>//para la comunicación RF del NRF24
#include <RF24.h>
#include <Servo.h>//para controlar el servomotor SG90

RF24 radio(9,10); //CNS , CE
//dirección de transmisión
const uint64_t direccion = 0xE8E8F0F0E1LL;/*numero de 64 bits, lo que indicamos con el tipo uint64_t , 
                                            entero sin signo de 64 bits, y por si no estuviera suficientemente claro, 
                                            le indicamos al compilador que se trata de un LL al final del número, o sea LongLong = 64 bits.
                                          */
unsigned char comando;
Servo SG901;
Servo SG902;
boolean trama=false;
int i,j=0;
const int sincro = 9999;//constante entero para sincronizar
const int fintrama = 5555;//constante entero finalizar trama
int b1,b2,b3,b4;//enteros "bytes de datos" RECIBIR Y ASIGNAR A ESTAS VARIABLES

void setup(){
  pinMode(5,OUTPUT);//led salida
  pinMode(4,OUTPUT);//led salida

  SG901.attach(7);//asigna el pin 7 al servo sg90_1
  SG902.attach(6);//asigna el pin 6 al servo sg90_2

  Serial.begin(9600);//inicia la comunicación serial en 9600
  radio.begin();//inicia la comunicación RF
  radio.openReadingPipe(1,direccion);//lectura de canal (canal,dirección)
  radio.startListening();

  SG901.write(90);
  SG902.write(90);
  digitalWrite(5,HIGH);
  digitalWrite(4,HIGH);
  delay(500);
  digitalWrite(5,LOW);
  digitalWrite(4,LOW);
  delay(250);

  Serial.println("INICIADO");//indica que ah iniciado a funcionar el receptor
}/*usamos radio.openReadingPipe(1,pipe) para poder leer y después radio.startListening()
    nos permite comenzar la escucha.*/

void loop(){
  if(radio.available()){
    radio.read(&i, sizeof(i));
    asignar();
  }
}

void asignar()
{
    if(i==sincro){
      trama=true;
      Serial.print(i);Serial.print("-1\n");
    }
    else if(j==0&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-2\n");
        b1=i;
        j=1;
    }
    else if(j==1&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-3\n");
        b2=i;
        j=2;
    }
    else if(j==2&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-4\n");
        b3=i;
        j=3;
    }
    else if(j==3&&i!=sincro&&trama==true){
        Serial.print(i);Serial.print("-5\n");
        b4=i;
        j=4;
    }
    else if(i==fintrama&&j==4&&trama==true){
        Serial.print(i);Serial.print("-6\n");
        SG901.write(b1);
        SG902.write(b2);
        digitalWrite(5,b3);
        digitalWrite(4,b4);
        j=0;
        trama=false;  
    else if(i==fintrama&&j==4&&trama==true){
        j=0;
        trama=false;
    }
    }
}