Paso 5: Software: el código
/ *** * Despertador Sunrise Bhavika Shah MakeCourse primavera 2016 ** cuando la LDR detecta la salida del sol, hará que el servo(hammer attached) a 50 grados * y golpear una campana, como una alarma de despertador. Como una copia de seguridad el código calcula el tiempo del amanecer la ubicación * del reloj usando coordenadas de latitud y longitud y activar la alarma en caso de no amanecer * detectado. Este proyecto también incluye un módulo RTC que mantendrá en caso de apagón. / #include < Wire.h > #include < Servo.h > #include < TimeLib.h > //works junto con DS1307RTC.h #include < TimeLord.h > //contains sunrise cálculos #include < DS1307RTC.h > //RTC biblioteca #include < LiquidCrystal_I2C.h > //library para ser usado con pantalla LCD con un módulo V1 YwRobot Arduino LCM1602 CII Unido #define DS1307_ADDRESS 0x68 //RTC addressLiquidCrystal_I2C lcd(0x27,20,4); Configurar la dirección de LCD a 0x27 para un 16 caracteres y 2 línea Servo myservo; Hacer un servo objeto int pos = 50; Establecer una posición del servo en grados 50 int apagado = A0; Conectar la LDR al umbral del pin A0 int = 500; Establece el umbral de luz en un valor const int zona horaria = -5; Configurar su zona horaria; mina es EST const flotante latitud = 27.9506; Establecer su latitud y longitud; mina son de Tampa, FL const float longitud =-82.4572; Tras int = 0; bool bandera = 1; Aquí tenemos un indicador booleano que va a cambiar cuando realizamos nuestra acciones activación int sunriseMin; minutos de que amanecer calculado días para comparación < /p >< p > void setup() {void digitalClockDisplay(); //digital reloj de la printDigits() vacío de tiempo //utility la función de reloj digital: impresiones anteriores a colon y lleva 0 sunriseCalc() void //calculate sunrise actionAM() void //function para realizar wake-up checkPM() nulas acciones; //for depuración void lowLight(); //function para mostrar el valor del sensor si es menor que el umbral Serial.begin(9600); //begin comunicación serie pinMode (13 SALIDA); myservo.Attach(9); servo conectado al pin 9 lcd.init(); inicializar el lcd lcd.backlight(); encender el LCD luz de fondo setSyncProvider(RTC.get); función para obtener el tiempo de la if(timeStatus() RTC
! = timeSet) {Serial.println ("no se puede sincronizar con el RTC");} else {Serial.println ("RTC ha establecido la hora del sistema"); digitalClockDisplay();} sunriseCalc(); } < /p >< p > void loop() {if(wake = 0) {si (isAM()) {Serial.println ("isAM true"); raíz = 1; //if es mañana 'wake' cambia de 0 a 1 bandera = 0; //we también cambiará la variable bandera 0 Serial.println ("primera si se ejecuta"); //debugging Serial.print ("Bandera:"); para la depuración Serial.println(flag); para depurar}} si (wake = 1 & & bandera == 0) {//Because estela es 1 y bandera es 0, y podemos empezar la luz detección digitalClockDisplay(); lectura de //consistent de la el indicador de tiempo actual = 1; //We cambiará bandera a 1 porque se realizan las acciones de activación Serial.println(analogRead(lightPin)); //readout de la luz actual detectándose if(analogRead(lightPin) > umbral) {//if la luz detectada es mayor que el umbral : actionAM(); realizar tras acciones Serial.println ("segundo si se ejecuta"); depuración} que {bandera = 0; printDigits(minute()); //debugging Serial.println(); //If la luz no se ha detectado que para realizar tras acciones, vamos a comprobar para ver si no ha pasado tiempo actual sunriseMin + 10 si (sunriseMin < minute()) {//if el minuto actual valor es mayor que la salida del sol valor minuto actionAM(); //perform despertar bandera de acciones = 1; Serial.println ("salida del sol min es menor que min actual"); depuración para hacernos saber que el circuito ha pasado por esta declaración} lowLight(); Si no hay luz, vamos a comprobar} delay(1000); } Si (isPM()) {checkPM();}} / *** FUNCIONES *** / void sunriseCalc() {llama tardis; tardis. Zona horaria (-4 * 60); Dile llama qué zona horaria su RTC se sincroniza con. Puede ignorar DST tardis. Posición (latitud, longitud); Dile llama donde estamos en el mundo hoy de bytes [] = {0, 0, 12, 6, 4, 2016}; almacenar la fecha de hoy (al mediodía) en una matriz de llama a utilizar si (tardis. SunRise(today)) {/ / si el sol se levantará hoy (no, en el Ártico [ant]) Serial.print ("salida del sol:"); Today[tl_hour]) de serial.Print((int); Serial.Print(":"); Today[tl_minute]) de serial.Print((int); Serial.Print ("AM"); Serial.println(); sunriseMin = (int) hoy [tl_minute] + 10; almacenar el valor del tiempo del amanecer + 10 Serial.print ("sunriseMin:"); Serial.println(sunriseMin); }} void digitalClockDisplay() {/ / digital reloj de pantalla de la hora Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.Print(""); Serial.Print(Day()); Serial.Print("/"); Serial.Print(month()); Serial.Print("/"); Serial.Print(Year()); Serial.println(); Delay(200); } void printDigits (int dígitos) {/ / función de utilidad para la visualización del reloj digital: impresiones colon anterior y líder Serial.print(":") 0; if(digits < 10) Serial.print('0'); Serial.Print(digits); } void actionAM() {//function que contiene todas las acciones a realizar cuando es hora de levantarse! digitalWrite (13, HIGH); //turns el LED a bordo en Serial.println("High"); //we imprimir el estado de la cantidad de luz detectada lcd.setCursor(3,0); //setting el lcd.print de posición del cursor ("despertar Bee"); //printing un mensaje despierta! lcd.setCursor(2,1); lcd.print ("es amanecer!"); lcd.setCursor(0,2); //servo acciones para (pos = 0; pos < = 50; pos += 1) {/ / va desde 0 grados a 50 grados en pasos de 1 myservo.write(pos) de grado; Delay(5); } para (pos = 50; pos > = 0; pos-= 1) {/ / pasa de 50 grados a 0 grados myservo.write(pos); delay(5);} para (pos = 0; pos < = 50; pos += 1) {//0---> 50 repita myservo.write(pos); delay(5);} para (pos = 50; pos > = 0; pos-= 1) {//50---> 0 repetir myservo.write(pos); delay(5);}} void checkPM() {//function que devuelve una instrucción en el monitor serial si es PM; utiliza para la depuración lcd.noDisplay(); //turning fuera de la pantalla en la pantalla para conservar la energía de Serial.println("isPM() True"); digitalClockDisplay(); Serial.println(analogRead(lightPin)); lectura de la luz actual se detecta delay(1000); } void lowLight() {//if la luz detectada es menor que el umbral, vamos a imprimir en el monitor serial para realizar un seguimiento de lo Serial.println(analogRead(lightPin)); //readout de la luz actual se detecta digitalWrite (13, bajo); Serial.println("Low"); myservo.Write(0); regresar a servo a 0 grados}