Académique Documents
Professionnel Documents
Culture Documents
1. Inicio
El workshop que realizaremos consiste en construir un panel solar interactivo,
es decir, cuya orientacin responda a la cantidad de luz que reciba (efecto
girasol). El objetivo principal es el de familiarizarnos con herramientas bsicas
de electrnica DIY, con microcontroladores (Arduino o similar) y con
herramientas de programacin visual como Processing. El conocimiento previo
que necesitamos es de matemtica bsica. Construiremos un modelo fsico de
panel solar pero simultneamente un modelo digital. De esta manera, podremos
vincular magnitudes fsicas, modelos reales y modelos digitales en un mismo
proyecto.
Qu equipos necesitamos?
Qu Software necesitamos?
Necesitamos instalar
Sensor de luz
Servomotor
Arduino UNO
Camins Makers [WORKSHOP. PANEL SOLAR INTERACTIVO]
int ancho=1000;
int alto=1000;
int tamaox=50;
int tamaoy=50;
void setup() {
size(ancho,alto);
background(255,0,0);
}
void draw() {
fill(255,255,255);
rect(ancho/2,alto/2+20,tamaox,tamaoy);
}
SUGERENCIA: La manera natural de interactuar con Processing es la de ensayo y error con los botones
play
. y stop que se encuentran en la parte superior izquierda
Camins Makers [WORKSHOP. PANEL SOLAR INTERACTIVO]
int ancho=1000;
int alto=1000;
int radio=50;
float angle=0.0;
void setup() {
size(ancho,alto);
}
void draw() {
background(255,0,0);
angle=angle+0.01;
rectMode(CENTER);
fill(0,255,0);
rect(ancho/2,alto/2+20,200,50);
fill(255,255,255);
rect(ancho/2,alto/2-55,10,100);
pushMatrix();
translate(ancho/2,alto/2-105);
rotate(angle);
rect(0,0,10,100);
popMatrix();
SUGERENCIA: Se recomienda hacer pruebas ensayo y error con diferentes cantidades para aadir al
ngulo o bien, actualizando el color dentro del background() de acuerdo a cierta ley matemtica.
Camins Makers [WORKSHOP. PANEL SOLAR INTERACTIVO]
4. Arduino. Blink
Arduino/Genuino es un microcontrolador para el prototipado de proyectos de
electrnica. Permite controlar actuadores y sensores de manera abierta a travs
de una interfaz de desarrollo (IDE). Dicha interfaz sigue una estructura muy
similar a la de Processing, por lo que las ventajas entre las similitudes sintaxis
entre uno y otro son destacables.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
5. Arduino. Potencimetro.
Una de los conceptos fundamentales que se deben manejar al utilizar las placas
Arduino/Genuino es el uso del puerto serial. Para ello, podemos utilizar un
potencimetro, 3 cables y una placa. El circuito que se plantea hace pasar un
voltaje (5V) por el potencimetro con su respectiva vuelta a tierra (GND) en la
placa. Adicionalmente, se aade un cable de lectura a uno de los canales
analgicos de la placa.
El cdigo que se carga a placa contiene una inicializacin del puerto serial a una
tasa determinada (9600 baudios en este caso) y posteriormente, una funcin de
lectura del valor analgico, a la cual se le asigna un nombre de variable. Es
importante destacar que el cdigo indica en cual pin se debe realizar la lectura
(A0 en este ejemplo). Posteriomente, se imprime el valor obtenido (cada
milisegundo) en el puerto serial. Se recomienda variar al potencimetro y
observar los resultados en la pestaa correspondiente.
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A2);
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
void loop() {
int sensorValue 1= analogRead(A1);
int sensorValue 2= analogRead(A2);
Serial.print(sensorValue1);
Serial.print(,);
Serial.println(sensorValue2);
delay(1); // delay in between reads for stability
}
7. Arduino. Servo
La siguiente pieza a encajar en el proyecto es el uso de un servomotor. Los
servomotores tienen en sus engranajes ejes que se pueden controlar muy
precisamente. Se les puede indicar una posicin precisa (en ngulos) y el mismo
se orienta hacia la misma. Con algoritmos adecuados, se puede generar un
movimiento determinado. El servomotor que se incluye en la mayora de kits de
iniciacin de electrnica bsica tienen un ngulo de rotacin de 180 grados. Se
observa que un servomotor tiene 3 conexiones, 5V, GND y seal de entrada. La
conexin bsica incluye proporcionar corriente y tierra, y a su vez conectar en
algn pin digital.
El cdigo que se debe cargar a la placa debe incluir una librera desarrollada
previamente para el uso de servos. La misma define mtodos bsicos para la
manipulacin del mismo.
#include<Servo.h>
Servo servouclm;
int pos = 0;
void setup() {
servouclm.attach(9);
}
void loop() {
pos=pos+1;
servouclm.write(pos);
Serial.write(pos);
delay(15);
}
8. Arduino. Funciones
Dentro de la funcin loop, se puede operar con gran versatilidad, lo que da
mucho juego para la programacin de aplicaciones tanto fsicas como digitales.
En el ejemplo que estamos desarrollando, es fundamental el uso de la funcin
if, que forma parte del abc de programacin bsica.
if (x>100) {
//escribir accin
}
else if(x<50){
//escribir accin
}
else {
//escribir accin
}
millis();
analogWrite();
delayMicroseconds();
Para la ejecucin del programa por un nmero especificado que representa una
fraccin de un milisegundo.
Camins Makers [WORKSHOP. PANEL SOLAR INTERACTIVO]
9. Processing. Obtener
magnitudes
Existen muchas maneras de enviar datos provenientes del serial port a otros
entornos tales como Processing, Python, Matlab o Excel. La programacin del
envo de datos puede ser de sumo inters en el caso de que se quiera generar un
archivo con los datos provenientes de mediciones de sensores (cuando se utiliza
la placa como sistema de adquisicin de datos). Existen protocolos y ejemplos
desarrollados dentro de los entornos Arduino-Processing como el
StandardFirmata (ver ejemplos/firmata/StandardFirmata) que se pueden
utilizar directamente para la obtencin de magnitudes en Processing y el control
de Servos. En este caso, para entender el funcionamiento de circuitos bsicos de
Arduino, hemos optado por la solucin convencional, es decir, envo de valores
codificados a travs del puerto serial, que se pueden leer como un nmero
entero en el programa en cuestin. Los pasos a seguir se indican a continuacin:
import processing.serial.*;
Serial myPortMEEC;
int ancho=1000;
int alto=1000;
int radio=50;
int angle;
float angulo;
void setup() {
size(1000,1000);
myPortMEEC = new Serial(this, Serial.list()[1], 9600); //El nmero 1 puede variar
void draw() {
if(myPortMEEC.available()>0){
angle= myPortMEEC.read();
angulo = angle*PI/180; // Se transforma a radianes
}
background(255,0,0);
rectMode(CENTER);
fill(0,255,0);
rect(ancho/2,alto/2+20,200,50);
fill(255,255,255);
rect(ancho/2,alto/2-55,10,100);
pushMatrix();
translate(ancho/2,alto/2-105);
rotate(angulo);
rect(0,0,10,100);
popMatrix();
println(angle);
println(angulo);
delay(10);
}
#include <Servo.h>
Servo myservo;
int pos = 80; // Posicin del servo
int inputPhotoLeft = 1; // Fotorresistencia pin analgico 0 de arduino.
int inputPhotoRight = 0;// Fotorresistencia pin analgico 1 de arduino.
int Left = 0; // Almacenar lecturas de fotorresistores.
int Right = 0; // Almacenar lecturas de fotorresistores.
void setup(){
Serial.begin(9600);
myservo.attach(9); // Fijar servo en pin 9.
}
void loop(){
Left = analogRead(inputPhotoLeft);
Right = analogRead(inputPhotoRight);
//Serial.println(Left);
//Serial.println(Right);
Referencias
Scott Fitzgerald and Michael Shiloh. Arduino Projects Book. Arduino LLC. Italia 2012
Casey Reas and Ben Fry. MAKE: Getting Started with Processing. Maker Media.
Septiembre 2015.
Daniel Shiffman. The Nature of Code. Simulating Natural Systems with Processing.
Paperback. 2012
Webs de inters
www.instructables.com
www.arduino.cc
www.processing.org