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;
    }
    }
}

jueves, 21 de abril de 2016

Prueba de cambio de estado de pinza, cerrado-abierto, con pulsador

Prueba de cambio de estado de pinza cerrado abierto con pulsador
#include <Servo.h>
Servo servo4;
//veriables a copiar
int pasopinza=0,estant=0;
boolean pinza_cerrada=false;
//
void setup() 
{
  pinMode(5,INPUT);
  servo4.attach(11);
  Serial.begin(9600);
}

void loop() 
{
  boton_pinza();
  comparacion_pinza();
  servo4.write(pasopinza);
}
void boton_pinza()
{
  if((digitalRead(5))==false&&(estant==0))
  {
    delay(20);
    if((digitalRead(5))==true)
    {
      estant=1;
      pinza_cerrada=true;
    }
  }
  else if((digitalRead(5))==false&&(estant==1))
  {
    delay(20);
    if((digitalRead(5))==true)
    {
      estant=0;
      pinza_cerrada=false;
    }
  }
}
void comparacion_pinza()
{
  if(pinza_cerrada==false)
  {
    pasopinza=180;
  }
  else if(pinza_cerrada==true)
  {
    pasopinza=0;
  }

}

miércoles, 20 de abril de 2016

Medición de limites analógicos potenciometro (para 180grds de un servomotor)

Medición de limites analógicos potenciometro.
esta prueba la realice para saber un punto aproximado para delimitar los puntos de un potenciometro y hacer mas preciso el movimiento de un servomotor.
#include <Servo.h>
Servo servo1;
int paso=0;
void setup() {
 servo1.attach(9);
 Serial.begin(9600);

}

void loop() {
  float pot=analogRead(A1);
  paso=map(pot,157,873,0,180);
 servo1.write(paso);
 Serial.print("angulo:");
 Serial.print(paso);
  Serial.print("pot:");
 Serial.print(pot);
 delay(25);

}

Lectura de un potenciometro (entradas analogicas)

Lectura de un potenciometro
int i=0,j=0;
void setup() {
 Serial.begin(9600);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
}

void loop() {
 if(digitalRead(6)==true)
 {
  delay(250);
  if(digitalRead(6)==false)
  {
    i++;
   
    Serial.print("\na");
    Serial.print(i);
    delay(25);
   
  }
 }
 if(digitalRead(7)==true)
 {
  delay(250);
  if(digitalRead(7)==false)
  {
    j++;
    Serial.print("b");
    Serial.print(j);
    delay(25);
  }
 }

}

Contador de pulsos

Contador de pulsos
int i=0,j=0;
void setup() {
 Serial.begin(9600);
 pinMode(6,INPUT);
 pinMode(7,INPUT);
}

void loop() {
 if(digitalRead(6)==true)
 {
  delay(250);
  if(digitalRead(6)==false)
  {
    i++;
   
    Serial.print("\na");
    Serial.print(i);
    delay(25);
   
  }
 }
 if(digitalRead(7)==true)
 {
  delay(250);
  if(digitalRead(7)==false)
  {
    j++;
    Serial.print("b");
    Serial.print(j);
    delay(25);
  }
 }

}