This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

sábado, 22 de agosto de 2015

Introducción a la Robótica con Minibloq


  • MINIBLOQ es un entorno de programación gráfica sencillo, ideal para comenzar a programar.
  • Es fácil de instalar y ha sido especialmente diseñado pensando para quienes están dando sus primeros pasos en programación, computación física y Robótica.
  • Es utilizado además en numerosas instituciones educativas, sobre todo con niños. 
  • MiniBloq es gratuito y de código abierto.




Descripción del robot virtual
  • En esta sección de la pantalla se describe la tecnología que se está utilizando. 
  • Al seleccionar la opción miniSim en el menú desplegable “Hardware” se muestra la imagen del robot virtual con el que se trabaja.
Órdenes básicas de miniSim
  • Minibloq utiliza el sistema Drag and Drop (arrastrar y soltar). 
  • Facilita realizar complejos programas sin necesidad de escribir el código que ejecutará el robot.
  • Órdenes básicas: movimiento (avance, retroceso y giro) y dibujo.

Control de oscuridad con ARDUINO y ARDUBLOCK


Ardublock es una utilidad gráfica cuya misión es generar código compatible con el entorno IDE Arduino. 

Sus ventajas son:
  • Es una herramienta gratuita.
  • Facilita la creación de sketch para Arduino.
  • Genera código directamente.
  • Ofrece una colección de bloques funcionales muy básicos que facilitan la comprensión de la programación.
  • Esta muy indicado para aplicarlo en niveles educativos básicos en donde el usuario no necesita tener conocimientos de programación.
  • Es una aplicación muy sencilla de instalar.
  • Es un “plugin” que el IDE Arduino reconoce e instala como herramienta.

Se encenderá un diodo LED conectado en el pin 13 (salida) de la placa Arduino UNO cuando no detecte luz, y deberá apagarse cuando la LDR detecte luz, de manera similar a lo que ocurre con el alumbrado público que se activa cuando oscurece y se desactiva cuando amanece. 

Entonces, cumple la misma función que los esquemas anteriores aunque utilizando tecnología programable (hardware Arduino UNO y programación gráfica con Ardublock) en este caso.

Observe el divisor de tensión conformado por el LDR y la resistencia de 10 KOhm.


Detector de oscuridad basado en Arduino UNO y programación gráfica (Ardublock):


Se conectará el sensor de luz conectándolo a la entrada analógica 3 (A3) y se tomará un valor umbral de 300 de modo que, cuando el nivel de iluminación sea menor a este valor, se activará el LED conectado en la salida 13 simulando la iluminación automática solicitada.Cuando, en caso contrario, se tenga suficiente iluminación, el LED estará apagado.   




Central meteorológica experimental con ARDUINO y Bluetooth


Listado de componentes
  • Sensor DHT22.
  • Sensor BMP085.
  • Módulo BT RN-42.
  • LCD.
  • Arduino UNO.
  • Resistencias 10 KΩ (3).
  • Pulsadores NA (2).
  • LED.
  • Cables. 



Código fuente

// “Central meteorológica experimental”

// Programa

// A. Incluir bibliotecas (libraries)
 
#include ; // Presentar datos por LCD
#include ; // Pantalla LCD
#include ; // Comunicación I2C
#include ; // Sensor BMP085
#include ; // Sensor DHT22
#include ; // Comunicación Bluetooth RN-42  

// B. Definir variables
 
// Pines para la pantalla LCD:
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
// Variables para la librería del sensor DHT
#define DHTTYPE DHT22
#define DHTPIN A0  
// Definir pines:
const int led = 13;
const int pulsadorA = 2;
const int pulsadorB = 3;
// Variables de programa
int contador=0;  
float temperature;
float pressure;
float pressure2;  
float h;
float t;
float tmedia;
// Variables de librería:
LiquidCrystal_I2C lcd(0x27,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
Adafruit_BMP085 bmp;
DHT dht(DHTPIN, DHTTYPE); 
SoftwareSerial SerialBT(10,11); // (RX, TX) en Arduino

// C. Bucle inicial (setup) 
 
 void setup() {  
  pinMode(led, OUTPUT); // Se define el LED como una salida
  pinMode(pulsadorA, INPUT); // Definir pulsador 1 como una entrada
  pinMode(pulsadorB, INPUT); // Definir pulsador 2 como una entrada  
  Serial.begin(9600);
  SerialBT.begin(9600);  
  dht.begin();
  bmp.begin();  
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }  
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(LOW);
  lcd.home();

// D. Núcleo del programa

 void loop(){     
  if(digitalRead(pulsadorA) == HIGH){
  digitalWrite(led, HIGH); // Led encendido
  lcd.display();
  lcd.setBacklight(HIGH);
  contador=1;
  }  
  if(digitalRead(pulsadorB) == HIGH){
    digitalWrite(led, LOW); // Led encendido
    Serial.println("Apagado"); // Se registra la pulsación
    contador=0;
    lcd.noDisplay();
    lcd.setBacklight(LOW);
  }  
  if(contador == 1){
  t = dht.readTemperature();
  h = dht.readHumidity();  
  temperature = bmp.readTemperature();
  pressure = bmp.readPressure();       
  tmedia= (t+temperature)/2;  
  pressure2= (pressure/100);      
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(tmedia);
  lcd.print((char)223);
  lcd.print("C   ");
  lcd.print(h);
  lcd.print("%");  
  lcd.setCursor(0,1);
  lcd.print(pressure2);
  lcd.print("mbar");
  delay(3000);  
    Serial.print("Humidity-DHT = "); 
    Serial.println(h);
    Serial.print("Temperature-DHT = "); 
    Serial.print(t);
    Serial.print("[");
    Serial.write(186);
    Serial.println("C]");  
    Serial.print("Temperature-BMP = ");
    Serial.print(temperature);
    Serial.print("[");
    Serial.write(186);
    Serial.println("C]");     
    Serial.print("Pressure = ");
    Serial.print(pressure2);
    Serial.println("[mbares]");
    SerialBT.println(" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ");
    SerialBT.print("T=      ");
    SerialBT.print(tmedia);
    SerialBT.println("  [Grados Celsius] ");     
    SerialBT.print("H=     ");
    SerialBT.print(h);
    SerialBT.println("  [% de Humedad Relativa]");     
    SerialBT.print("P= ");
    SerialBT.print(pressure2);
    SerialBT.println("  [milibares]");     
   // Determinar la altitud considerando la presión barométrica estándar
    // Presión de 1013.25 millibar = 101325 Pascal
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" meters");     
    Serial.print("Real altitude = ");
    Serial.print(bmp.readAltitude(101300));
    Serial.println(" meters");     
  }
}

Algunos comentarios
  • Se presenta un proyecto de “Central Meteorológica” experimental capaz de medir temperatura, humedad relativa, presión atmosférica y altura con presentación local de resultados e interfaz de comunicación Bluetooth. Se deja para una etapa intermedia el desarrollo de la interface Android, el sketch correspondiente en Arduino, el Datalogger y el anexado de otros sensores: velocidad y dirección del viento y luminosidad. Para una etapa final, desarrollo de la interfaz de comunicación Ethernet.
  • Sensor DHT22: temperatura (-40°C a +80°C, +-0.5% precisión) y humedad relativa (0% a 99%, precisión +-2% RH a 25°C). Tiempo de sensado: 1 vez cada 2 segundos. 
  • Sensor BMP085: temperatura (-40°C a +85°C), presión barométrica (300 hPa a 1100 hPa, 0.03 hPa resolución / 0.25 m) y altitud (9000 m sobre el nivel del mar a -500m).
  • Interfaz de comunicación Bluetooth: módulo BT Clase 2 “RN-42”.
  • LCD: bus de dos hilos I2C (Inter-Integrated Circuit) para la presentación local de la información. Utiliza solo dos líneas bidireccionales de bus: reloj (SCK, AD5 en la placa UNO) y datos (SDA, AD4 en la placa UNO).
  • Cada uno de los dos pulsadores está conectado en montaje “pull down” empleando resistencias de 10 KΩ (valor “normal” en montajes pull up y pull down). Así, se establece un estado lógico bajo a la entrada del circuito lógico cuando dicho circuito está en reposo y alto en el caso contrario evitando falsos estados producidos por ruido eléctrico cuando se deja una entrada con un valor indeterminado.


Secuencia de LED con ARDUINO

Deberá mostrar secuencialmente (mediante 8 LED) el código binario natural de 8 bits con una secuencia de 500mS. Se deberá utilizar un bucle for() para aumentar el número, la función shiftOut() y un registro de desplazamiento. Además, indicara en el monitor serial, el numero decimal que está contando, siempre escribiendo en línea nueva.


/*Uso del registro de desplazamiento*/
//Pin 8 Arduino conectado al Pin 12 del 74HC595 (Latch)
int latchPin = 8;
//Pin 12 Arduino conectado al Pin 11 del 74HC595 (Clock)
int clockPin = 12;
//Pin 11 Arduino conectado al Pin 14 del 74HC595 (Data)
int dataPin = 11;
void setup() {
//configurar pines como salidas (output)
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//contar desde 0 a 255
for (int i = 0; i < 256; i++) {
//poner latchPin en bajo para permitir el flujo de datos
digitalWrite(latchPin, LOW);
shiftOut(i);
//poner latchPin en alto para cerrar el registro y enviar datos
digitalWrite(latchPin, HIGH);
delay(500);
}
}
void shiftOut(byte dataOut) {
boolean pinState;
//registro de desplazamiento listo para enviar datos
digitalWrite(dataPin, LOW);
digitalWrite(clockPin, LOW);
for (int i=0; i<=7; i++) {
//set clockPin en LOW previo enviar un bit
digitalWrite(clockPin, LOW);
//si el valor de DataOut y (AND lógico) en bitmask es verdadero, poner pinState en 1 (HIGH)
if ( dataOut & (1<
pinState = HIGH;
}
else {
pinState = LOW;
}
//poner dataPin en HIGH o en LOW dependiendo de pinState
digitalWrite(dataPin, pinState);
digitalWrite(clockPin, HIGH);
}
//detener el desplazamiento de datos
digitalWrite(clockPin, LOW);
}

Obtener una lectura (analógica) desde un potenciómetro que activará de 1 a 5 LED (función map()).



/*Código IDE Arduino*/

// Definición de constantes:
const int analogPin = A0;   // pin de conexión del potenciómetro
const int ledCount = 5;    // por 5 LED conectados
int ledPins[] = {2, 3, 4, 5, 6};   // array conteniendo números de pines de conexión de los LED
void setup() {
//lazo con el número de pin y envío a la salida del array:
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT); 
  }
}
void loop() {
  //lectura del potenciómetro:
  int sensorReading = analogRead(analogPin);
  //convertir el resultado a un rango entre 0 y el número de LED (5):
  int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
  
// lazo sobre el array de LED:
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    //si el índice de elementos del array es menor que ledLevel, encender este pin:
    if (thisLed < ledLevel) {
      digitalWrite(ledPins[thisLed], HIGH);
    } 
    //apagar todos los pines más altos que ledLevel:
    else {
      digitalWrite(ledPins[thisLed], LOW); 
    }
  }
}