En esta entrada propongo una forma de hacerlo mediante juegos con Scratch.
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.
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).
3. El ejercicio total queda así:
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
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
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
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;
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
Código en Processing
Código en Arduino
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
}
}
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);
}
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);
}
Suscribirse a:
Comentarios (Atom)




