// usar libreria para controlar servo motores #include // usar librerias para controlar la pantalla OLED #include #include // configurar pantalla OLED #define OLED_RESET 4 // pines para los motores int PinServo1 = 9; int PinServo2 = 10; int PinServo3 = 11; // pines para el sensor UV y el potenciometro int PinSensorUV = A0; int PinPotenciometro = A1; // crear objeto de pantalla OLED Adafruit_SH1106 display( OLED_RESET ); // crear objetos para los motores Servo servo1; Servo servo2; Servo servo3; // variables para los estados de la flor bool florAbierta = false; bool nuevoEstadoFlor = false; // variables para el control del sensor UV int indiceUV = 0; int lecturaUV = 0; int indicePot = 0; int lecturaPot = 0; void setup() { // configurara la salida serial para ver en la computadora el estado del programa Serial.begin(9600); Serial.println( "---------------------------------" ); Serial.println( "------------- FabLab ------------" ); Serial.println( "---------------------------------" ); // configurar lo pines pinMode( PinSensorUV, INPUT ); pinMode( PinPotenciometro, INPUT ); // configurar los motores servo1.attach( PinServo1 ); servo2.attach( PinServo2 ); servo3.attach( PinServo3 ); // poner todos los motores en cero grados servo1.write( 0 ); servo2.write( 0 ); servo3.write( 0 ); // por defecto la flor esta cerrada florAbierta = false; nuevoEstadoFlor = false; // las variables de los sensores inician en cero indiceUV = 0; lecturaUV = 0; indicePot = 0; lecturaPot = 0; // configurar la pantalla OLED y borrar su contenido SPI.begin(); display.begin( SH1106_SWITCHCAPVCC, 0x3C); display.clearDisplay(); } void loop() { // leer lectura del sensor UV lecturaUV = analogRead( PinSensorUV ); // convertir el valor a la escala de UV indiceUV = map( lecturaUV, 0, 699, 0, 11 ); // informacion serial Serial.print( "Sensor UV : " ); Serial.print( lecturaUV ); Serial.print( " - " ); Serial.println( indiceUV ); // leer el valor del potenciometro lecturaPot = analogRead( PinPotenciometro ); // convertir el valor a la escala de UV indicePot = map( lecturaPot, 0, 1023, 0, 11 ); // informacion serial Serial.print( "Potenciometro : " ); Serial.print( lecturaPot ); Serial.print( " - " ); Serial.println( indicePot ); Serial.println(); // hacer una pausa delay( 300 ); // mostrar los valores de los sensores en la pantalla OLED display.clearDisplay(); display.setCursor( 0, 0 ); display.setTextSize( 2 ); display.setTextColor( WHITE ); display.println( "Fablab" ); display.println( "Indice UV" ); display.print( "Arequipa:" ); display.print( indiceUV ); display.print( "Limite :" ); display.print( indicePot ); display.display(); // si el valor UV es mayor al limite, entonces abrir la flor if ( indiceUV < indicePot ) nuevoEstadoFlor = false; else // si no cerrarla nuevoEstadoFlor = true; // si hubo un cambio en el estado de la flor if ( florAbierta != nuevoEstadoFlor ) { if ( nuevoEstadoFlor ) { // abrir la flor hasta 90 grados, de 5 en 5 grados para que sea mas lento for( int i = 0; i <= 90; i += 5 ) { servo1.write( i ); servo2.write( i ); servo3.write( i ); delay( 300 ); } } else { // cerrar la flor hasta cero grados de 5 en 5 grados para que sea mas lento for( int i = 90; i >= 0; i -= 5 ) { servo1.write( i ); servo2.write( i ); servo3.write( i ); delay( 300 ); } } florAbierta = nuevoEstadoFlor; } }