miércoles, 1 de mayo de 2019

Proyecto Scratch en el aula de 1º ESO

Una buena forma de abordar la comprensión de la electricidad en 1º ESO es mediante el pensamiento computacional.
En esta entrada propongo una forma de hacerlo mediante juegos con Scratch.




sábado, 23 de marzo de 2019

Siguelíneas CTC 101

Estamos inmersos en el proyecto "Pensamiento Computacional en Secundaria" de la Junta de Castilla y León.
Disponemos del kit de Arduino CTC 101
En esta entrada explico un proyecto que plantearemos dentro de los ejercicios finales del curso:


1. Debemos conocer cómo funciona el sensor IR y calibrarlo de modo que sepamos qué lectura corresponde al negro y qué lectura corresponde al blanco (o al no negro).


En mi caso el valor UMBRAL es 290. Pero conviene calibrar adecuadamente

2. Probamos el funcionamiento de los motores y crearemos varias funciones:
adelante(), girarIzda(), girarDcha(), parar().

Como son servomotores de giro continuo 


3. El ejercicio total queda así:

jueves, 21 de marzo de 2019

Curso Scratch (INTEF)

El material que aparece a continuación ha sido obtenido del curso "Pensamiento computacional en el aula con Scratch" del INTEF

Tema 1. Primeros pasos

La nueva interfaz gráfica de Scratch

Primeros pasos con Scratch 3.0

Crear objetos. Introducción a Scratch3.0Cómo crear estudios, agregar proyectos, marcar favoritos e invitar a curadores

Propiedades de los objetos en Scratch3.0

Novedad. El uso de extensiones en Scratch3.0


Tema 2. Primeros pasos

Vídeo 1: Coordenadas y Dirección (11:29 minutos)

Vídeo 2: instrucciones de movimiento y giro (4:28 minutos)

Vídeo 3: varios objetos en el mismo proyecto (5:18 minutos)

Vídeo 4: bucles y animaciones con cambio de disfraz (4:49 minutos)

Vídeo 5: bucles infinitos (5:03 minutos)

Vídeo 6: bucles condicionales (8:14 minutos)

Vídeo 7: múltiples programas en un objeto (6:57 minutos)

Vídeo 8: herramientas de edición (2:52 minutos)

Cómo crear estudios, agregar proyectos, marcar favoritos e invitar a curadores


Tema 3. Caminos para seguir avanzando

Vídeo 1: Motivación de la necesidad de coordinar las acciones entre objetos (6:37 minutos)

Vídeo 2: Coordinación de objetos mediante envío y recepción de mensajes (9:40 minutos)

Vídeo 3: Coordinación de objetos mediante "esperar hasta que" (4:20 minutos)

Vídeo 4: Variables (14:39 minutos)

Vídeo 5: Interacción con el usuario (03:46 minutos)


Condicionales

Vídeo 1: Introducción a las estructuras de control condicionales (2:37 minutos)

Vídeo 2: Instrucción condicional y operadores (6:40 minutos)

Vídeo 3: Ejemplos de condicionales (14:00)


Mejorar el código

Crear un bloque de código con Scratch

Crear un bloque de código con parámetros con Scratch

domingo, 17 de marzo de 2019

Coche detecta obstáculos con sensor ultrasónico

Este programa nos permite controlar un coche con Arduino UNO que detecta un obstáculo con un sensor de ultrasonido y se da la vuelta para no chocar.

Coche sigue-líneas Arduino

Este programa nos permite controlar un coche con Arduino para que siga una línea negra.



Programa IDE Arduino

Control sencillo de coche con Bluetooth

Aprovechando que tenía montado un coche de dos motores controlado por Arduino UNO, esta sería una posible práctica-proyecto para los alumnos de 4 ESO o Bachillerato

Aunque hay app para android con este fin, yo prefiero crear mi propia app. Este sería un posible programa para el móvil:


Y el programa para arduino sería;





viernes, 1 de marzo de 2019

Comunicación Arduino-Processing-Arduino: Ascensor

Processing y Arduino se comunican por el puerto serie de modo que con pulsadores (controlados con Arduino) dirigimos un ascensor, dibujado con processing, que envía información de su posición a Arduino y éste la saca por el display.

Detalle del Montaje



Vídeo del funcionamiento




Código en Processing





Código en Arduino


domingo, 20 de enero de 2019

Arduino: Display 7 segmentos

En esta entrada veremos como funciona un display de 7 segmentos con Arduino




Código;


//array con los pines donde van conectados los segmentos
int ledes[8]={2,3,4,5,6,7,8,9};

/* array con las combinaciones de encendido/apagado para cada núnero
      pin 2
   **********
 8 *        *3
   *   9    *
   **********
 7 *        *4
   *        *
   **********  * 5
       6
*/
int numeros[10][8]={
  //0
  {1,1,1,1,1,1,1,0},
  //1
  {0,1,1,1,0,0,0,0},
  //2
  {1,1,0,1,1,1,0,1},
  //3
  {1,1,1,1,1,0,0,1},
  //4
  {0,1,1,1,0,0,1,1},
  //5
  {1,0,1,1,1,0,1,1},
  //6
  {0,0,1,1,1,1,1,1},
  //7
  {1,1,1,1,0,0,0,0},
  //8
  {1,1,1,1,1,1,1,1},
  //9
  {1,1,1,1,0,0,1,0},
};

void setup() {
  for(int i=2;i<10;i++){ 
  pinMode(i,OUTPUT);  //modo de salida para todos los segmentos
  }
}

void loop() {
  // vamos recorriendo el array. Si es 0 no se enciende el led (segmento)
  //si es 1 se enciende el led (segmento)
  for(int i=0;i<10;i++){
    for (int j=0;j<8;j++){
       digitalWrite(ledes[j],numeros[i][j]);
    }
    delay (1000);  //esperamos 1 segundo
 }
}

Arduino: Control con mando IR

Para ver cómo funciona un control con señales infrarrojas pongo dos ejemplos:

Ejemplo1 

Encendido de un LED amarillo durante 1 segundo con la tecla ON/OFF de un mando a distancia y de otro LED verde con la tecla HOME.



Código:

//Incluimos la libreria para manejar el sensor IR
 #include <IRremote.h>

long code=0;  //almacenaremos el códio IR que recibe el
              //sensor del mando a distancia
int pinIR = 2;//La señal del sensor va al pin 2

IRrecv receptorIR(pinIR); //declaramos un objeto del tipo Sensor IR
decode_results results;   // variable que almacena lo que llega del mando 
 
void setup() 
{
  pinMode(3, OUTPUT); //pines de los LEDs
  pinMode(4, OUTPUT);

  Serial.begin(9600);

  receptorIR.enableIRIn(); //Inicializamos el sensor IR

  //Instrucciones de funcionamiento
  Serial.println("pulsa ON/OFF para encender el led amarillo");
  Serial.println("pulsa HOME para encender el led rojo");
}
 
void loop()
{
  digitalWrite(3,LOW);  //apagamos los LEDs
  digitalWrite(4,LOW);
   if(receptorIR.decode(&results)){  //Si llega cualquier valor
      code=results.value;            //Lo almacenamos en la vbe code
      Serial.println(results.value);   
      if((code==65548)or(code==12)){  //algunos mandos mandan varias
          digitalWrite(3,HIGH);       //señales al pulsar cada tecla     
      }
      if((code==65620)or(code==84)){
          digitalWrite(4,HIGH); 
      }
      delay(1000);              //Esperamos 1 segundos
      receptorIR.resume();      //El receptor espera la siguiente señal
   }
}

Ejemplo2 

Encendido de dos LEDs con la tecla ON/OFF y apagado con la HOME




Código:

//Incluimos la libreria para manejar el sensor IR
#include <IRremote.h>

long code=0;  //almacenaremos el códio IR que recibe el
              //sensor del mando a distancia
int pinIR = 2;  //La señal del sensor va al pin 2
int ordenEncender=0;  //utilizamos esta vble para llamar al
                      //procedimiento encender() si esta a 1
                      //y apagar() si esta a 0
                   
IRrecv irrecv(pinIR);    //declaramos un objeto del tipo Sensor IR
decode_results results;  // variable que almacena lo que llega del mando       
 
void setup() 
{
  pinMode(3, OUTPUT);  //pines de los LEDs
  pinMode(4, OUTPUT);

  Serial.begin(9600);

  irrecv.enableIRIn();
 
   //Instrucciones de funcionamiento
  Serial.println("pulsa ON/OFF para encender los ledes");
  Serial.println("pulsa HOME para apagar los ledes");
}
 
void loop()
{
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
   if(irrecv.decode(&results)){    //Si llega cualquier valor
      code=results.value;          //Lo almacenamos en la vbe code
      Serial.println(results.value);
         
      if ((code==65548)or(code==12)){   //algunos mandos mandan varias señales al pulsar cada tecla 
          ordenEncender=1;              //activamos la orden para encender
      }
      if((code==65620)or(code==84)){
          ordenEncender=0;              //desactivamos la orden para encender
      }
   
      //delay(1000);   
      irrecv.resume();      //El receptor espera la siguiente señal
   }
   if(ordenEncender==1){     
          encender();
      }
   if(ordenEncender==0){     
          apagar();
      }
}
   //encendemos los LEDs
void encender(){
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
   }
   //apagamos los LEDs
void apagar(){
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
   }