Fácil automatización del hogar bricolaje (usando interruptores servo) (3 / 4 paso)

Paso 3: programación

Con su interruptor de servos todo montado y fijado a la pared todo lo que queda es la programación. Vamos a conseguir ese programa prueba cargado (si ha solicitado un arduino con su juego que este programa vendrá pre cargado)

Lo que hace

  • El programa de puesta en marcha, encender el interruptor de la luz. Espere cinco segundos antes de apagarlo nuevamente. Va a tener su propio interruptor de la luz rave.
  • También hay un par de modos de demostración en el programa como se muestra en este video.

Para obtener detalles sobre cómo cablear para cada modo de demostración, por favor consulte el código. Aquí está un resumen de las piezas utilizadas.

  • Demo Mode 1 - botón - Simple interruptor Micro encontrado (aquí)
  • Sensor de proximidad Demo Mode 2 - Sensor de proximidad - IR encontrado (aquí)
  • Demo Mode 3 - fotorresistencia encontrado (aquí)

Cómo descargar el código para el Arduino

Opción 1 - descargar y descomprimir

  • Descargar el archivo zip adjunto (05_SESW_Test.zip)
  • Descomprímalo en el directorio de sketch de Arduino (por defecto /My documentos/Arduino /)
  • Iniciar el entorno de Arduino y cargar el bosquejo (_SESW_Test)
  • subir y empezar a jugar

Opción 2 - copiar y pegar

  • Copie el código de Arduino desde abajo
  • Péguelo en el entorno de desarrollo Arduino.
  • subir y empezar a jugar

Cómo usar interruptores de Servo en su propio código

  • copiar y pegar las secciones del programa de prueba entre (/ / interruptor Servo - (SESW) preámbulo Inicio) y (/ / interruptor Servo - (SESW) preámbulo final) a la parte superior de su bosquejo
  • copiar y pegar las secciones del programa de prueba entre (/ / interruptor Servo - inicio de rutinas (SESW)) y (/ / interruptor Servo - (SESW) final de las rutinas) en la parte inferior del boceto
  • Call servoSwitchSetup(); en su rutina de setup()
  • luego para utilizar encender() y turnOff()
  • pueden hacerse ajustes para apoyar más interruptores de servo.

Apéndice 1 - código de Arduino (_SESW_Test)

Inicio del preámbulo del NUNCHUCK - para más información en profundidad, visite la fuente original de este http://www.windmeadow.com/node/42 código / /---/ * * detalles de cableado * blanco - tierra * rojo - 3.3 + v - 5 voltios parece funcionar * verde - datos - analógico 4 * amarillo - reloj - analógica 5 * / #include #include #undef int #include uint8_t telefonía [6]; array para almacenar arduino salida int cnt = 0; contador utilizado para nunchuck comunicación int ledPin = 13; int nunchuckValues [] = {0,0,0,0,0,0,0,0,0,0}; Una matriz para almacenar los valores de nuncheck / * * el índice de cada valor dentro de la matriz de [] nunchuckValues * ie. XSTICK valor se almacena en nunchuckValues [XSTICK] (0) * / joystick de //The 0 #define XSTICK valores #define YSTICK 1 #define XAXIS 2 //The tres acelerómetro valores #define ejeY respectivamente 3 #define ZAXIS 4 #define ZBUTTON 5 //Front botón (0 cuando presiona) #define CBUTTON 6 #define XAXISDELTA 7 //Change en datos de acelerómetro de última lectura; #define YAXISDELTA 8 #define ZAXISDELTA 9 //Nunchuck G cálculo de constantes de / * * para escalar los valores crudos del nunchuck en valores de G * detalles de calibración y de las matemáticas pueden encontrarse en * http://www.wiili.org/index.php/Motion_analysis (copiado de http://www.wiili.org/index.php/Motion_analysis) cero puntos x_0 = (x_1 + x_2) / 2\, y_0 = (y_1 + y_3) / 2\, z_0 = (z_2 + z_3) / 2\ Puntos uno G x = \frac{x_{raw}-x_0} {x_3 - x_0} y = \frac{y_{raw}-y_0} {y_2 - y_0} z = \frac{z_{raw}-z_0} {z_1 - z_0} * / / * no todos los éstos se utilizan y podrían suprimirse (para hacer la matemática interpretting * más fácil 0-cero G 1-valor al colocar en la tabla 2-valor cuando descansando en la nariz * 3-valor cuando se apoye en el lado (izquierda arriba) * / #define X0 #define 500 X1 500 # definir X2 500 #define X3 711 #define Y0 465 #define 481 Y1 #define Y2 621 #define Y3 449 #define Z0 578 #define Z1 785 #define Z2 575 #define Z3 582 //END NUNCHUCK preámbulo - para más información en profundidad, visite la fuente original de este http://www.windmeadow.com/node/42 código / /---/ /---/ / inicio de ARDUINO controlado SERVO ROBOT (Serbia) preámbulo #include #define LEFTSERVOPIN 10 #define MAXSPEED 10 #define RIGHTSERVOPIN 9 //due para el funcionamiento de los servos de rotación continua velocidad máxima es llegar a un valor mucho menor de 90 (este valor cambiará dependiendo de tus servos) (para servos Parallax) Servo leftServo; Servo rightServo; int leftSpeed = 100; establece la velocidad del robot (izquierdas servos) //a porcentaje entre - MAXSPEED y MAXSPEED int rightSpeed = 100; establece la velocidad del robot (ambos servos) //a porcentaje entre - MAXSPEED y MAXSPEED int velocidad = 100; utilizado para control simple (goForward, goBackward, goLeft y goRight //a porcentaje entre 0 y MAXSPEED / / final de ARDUINO controlado SERVO ROBOT (Serbia) preámbulo / /---lastPrint largo; //a largo variable para almacenar el estado de wiimote era último impreso #define PRINTINTERVAL 1000 //the número de milisegundos entre salir el estado nunchuck sobre el porcentaje usb puerto #define margen de oscilación 20 //A distancia del centro que es interpretado como siendo cero void setup() {Serial.begin(9600); //Starts el puerto serial (usado para depuración sin embargo hace saltos servos) nunchuck_init (); enviar el nunchuck inicialización apretón de manos serbSetup(); agrega los servos y prepara a todos los serbios relacionadas con variables lastPrint = millis(); } void loop() {readNunchuck(); //Reads el estado actual de los nunchucks botones y acelerómetros si ()
! getNunValue(ZBUTTON)) {moveWiiAcelerometer(); //moves el deoending de wii en los valores de aceleración de nunchucks} else {moveWiiJoystick();} if((millis() - lastPrint) > PRINTINTERVAL) {//If un segundo ha pasado desde que los últimos valores de nunchuck impresión impresión printData(); //print nunchuck valores Serial.println(); //add un lastPrint de enter = millis(); //store hora actual como lastPrint}} void moveWiiAcelerometer() {moveDifferential(getYGs() * (float)100,getXGs()*(float)100);} void moveWiiJoystick() {moveDifferential(map(getNunValue(YSTICK) , 30,220,-100,100),map(getNunValue(XSTICK),30,220,-100,100)); } //Takes en una velocidad y una dirección de entrada (como un joystick) y lo traduce a velocidad comandos void moveDifferential (int speed1, int direction1) {speed1 = deadBandFilter(speed1); direction1 = deadBandFilter(direction1); setSpeedLeft (speed1 + direction1); setSpeedRight (speed1 - direction1);} int deadBandFilter (int valor) {si (valor > - banda muerta & & valor < banda muerta) {valor = 0;} otro {if(value > 0) {valor = valor - banda muerta * 100 / (100-banda muerta);} más {valor = valor + banda muerta * 100 / (100-margen de oscilación);}} devolver valor;} //START de NUNCHUCK rutinas / /---//Calculates y devuelve la aceleración xAxis en Gs float getXGs() {volver ((float)getNunValue(XAXIS) - X0) / (X 3 - X 0);} //Calculates y devuelve la aceleración ejeY respectivamente en Gs float getYGs() {volver ((float)getNunValue(YAXIS)-Y0) / (Y2 - Y0);} //Calculates y devuelve la aceleración zAxis en Gs flotador getZGs() {volver ((float)getNunValue(YAXIS)-Z0) / (Z1 - Z0);} //START de NUNCHUCK lectura código - para más información en profundidad, visitan el //of fuente original esta http://www.windmeadow.com/node/42 código / /---void readNunchuck() {Wire.requestFrom (0x52 , 6); solicitar datos del nunchuck mientras (Wire.available ()) {telefonía [cnt] = nunchuk_decode_byte (Wire.receive ()); / recibir el byte como un número entero digitalWrite (ledPin, HIGH); / / establece el LED en cnt ++;} / / si hemos recibido los bytes de 6, y luego ir imprimirlos si (cnt > = 5) {nunchuckValues [XSTICK] = telefonía [0]; nunchuckValues [YSTICK] = telefonía [1]; int tempNun_xAxis = telefonía [2] * 2 * 2; int tempNun_yAxis = telefonía [3] * 2 * 2; int tempNun_zAxis = telefonía [4] * 2 * 2; nunchuckValues [ZBUTTON] = 0; nunchuckValues [CBUTTON] = 0; / telefonía byte [5] contiene los bits para botones z y c / / también contiene los bits menos significativos de los datos del acelerómetro / / así que tenemos que comprobar cada bit del byte telefonía [5] si ((telefonía [5] >> 0) & 1) {nunchuckValues [ZBUTTON] = 1;} //checking si se presiona el botón Z (0 = 1 presionado = sin prensar) si ((telefonía [5] >> 1) & 1) {nunchuckValues [CBUTTON] = 1;} //checking si se presiona el botón C (0 = 1 presionado = sin prensar) si ((telefonía [5] >> 2) & 1) {tempNun_xAxis += 2;} //adding segundo bit menos significativo a eje_x (x_axis) si ((telefonía [5] >> 3) & 1) {tempNun_xAxis += 1;} //adding menos significativo bit a eje_x (x_axis) si ((telefonía [5] >> 4) & 1) {tempNun_yAxis += 2;} //adding segundo menos significativo bit a y_axis si ((telefonía [5] >> 5) & 1) {tempNun_yAxis += 1;} //adding menos significativo bit a eje_x (x_axis) si ((telefonía [5] >> 6) & 1) {tempNun_zAxis += 2;} //adding segundo menos significativo poco a z_ eje si ((telefonía [5] >> 7) & 1) {tempNun_zAxis += 1;} ///adding menos significativo poco a eje_x (x_axis) nunchuckValues [XAXISDELTA] = tempNun_xAxis - nunchuckValues [EJEX]; nunchuckValues [EJEX] = tempNun_xAxis; nunchuckValues [YAXISDELTA] = tempNun_yAxis - nunchuckValues EjeY [respectivamente]; nunchuckValues [EjeY respectivamente] = tempNun_yAxis; nunchuckValues [ZAXISDELTA] = tempNun_zAxis - nunchuckValues [ZAXIS]; nunchuckValues [ZAXIS] = tempNun_zAxis; } cnt = 0; send_zero (); enviar la solicitud de los siguientes bytes} int getNunValue(int valueIndex) {return nunchuckValues [valueIndex];} void nunchuck_init () {Wire.begin (); / / join i2c bus con dirección 0x52 Wire.beginTransmission (0x52); / / transmitir al dispositivo 0x52 Wire.send (0 x 40); / / envía la dirección de memoria Wire.send (0 x 00); / / envía envía un cero. Wire.endTransmission (); parada de transmisión} void send_zero () {Wire.beginTransmission (0x52); / / transmitir al dispositivo 0x52 Wire.send (0 x 00); / / envía un byte Wire.endTransmission (); / / interrumpir la transmisión} / / codificar datos para formato que mayoría de wiimote los conductores excepto / sólo necesaria si utilizas uno de los conductores regulares wiimote char nunchuk_decode_byte (char x) {x = (x ^ 0x17) + 0x17; return x;} //END del NUNCHUCK código - para más información en profundidad, visite la fuente de //original de este http://www.windmeadow.com/node/42 código / /---/ /---//START rutinas de ARDUINO controlado SERVO ROBOT (Serbia) / * * configura tu arduino a tu servio utilizando las rutinas incluidas * / void serbSetup() {pinMode (LEFTSERVOPIN, salida); //sets el servo izquierdo señal pin //to salida pinMode (RIGHTSERVOPIN, salida), setSpeed(speed); //sets el leftServo.attach(LEFTSERVOPIN) de salida del servo derecho señal pin //to; //attaches izquierda servo rightServo.attach(RIGHTSERVOPIN); //attaches servo derecho goStop();} / * * ajusta la velocidad del robot entre 0-(stopped) y 100-(velocidad máxima) * Nota : velocidad no va a cambiar la velocidad de la corriente debe cambiar velocidad * entonces llame a uno de los métodos irás antes los cambios ocurren. * / void setSpeed (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if velocidad es mayor que 100 //make 100 if (newSpeed < = 0) {newSpeed = 0;} //if la velocidad es menos de 0 velocidad //it 0 = newSpeed * MAXSPEED / 100; //scales la velocidad //between 0 y MAXSPEED} / * * ajusta la velocidad de la rightServo de robots entre-100-(reversed) y 100-(forward) * Nota : llama a esta rutina llevará a efecto inmediatamente * / void setSpeedRight (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if velocidad es mayor que 100 //make 100 if (newSpeed < = -100) {newSpeed = -100;} //if velocidad es menos de -100 //it -100 rightSpeed = newSpeed * MAXSPEED / 100; //scales la velocidad que //between - MAXSPEED y MAXSPEED rightServo.write (90 - rightSpeed); //sends el nuevo valor al servo} / * * ajusta la velocidad de la leftServo de robots entre-100-(reversed) y 100-(forward) * Nota : llama a esta rutina llevará a efecto inmediatamente * / void setSpeedLeft (int newSpeed) {si (newSpeed > = 100) {newSpeed = 100;} //if velocidad es mayor que 100 //make 100 if (newSpeed < = -100) {newSpeed = -100;} //if velocidad es menos de -100 //it -100 leftSpeed = newSpeed * MAXSPEED / 100; //scales la velocidad que //between - MAXSPEED y MAXSPEED leftServo.write (90 + leftSpeed); //sends el nuevo valor al servo} / * * envía el robot remite * / void goForward() {leftServo.write (90 + velocidad); rightServo.write (90 - velocidad);} / * * envía el robot hacia atrás * / void goBackward() {leftServo.write (90 - velocidad); rightServo.write (90 + velocidad);} / * * envía el robot derecha * / void goRight() {leftServo.write (90 + velocidad); rightServo.write (90 + velocidad);} / * * envía el robot izquierda * / void goLeft() {leftServo.write (90 - velocidad); rightServo.write (90 - velocidad);} / * * detiene el robot * / void goStop() {leftServo.write(90); rightServo.write(90);} //END rutinas de ARDUINO controlado SERVO ROBOT (Serbia) / /---//START OF imprimir rutinas (puede eliminar si no se utiliza) / leer---//Prints los Nunchucks últimos datos (debe llamar NUN_readNunchuck(); antes llamada printData() vacío {Serial.print ("XJoy ="); Serial.Print (getNunValue(XSTICK), DEC); Serial.Print ("\t"); Serial.Print ("YJoy ="); Serial.Print (getNunValue(YSTICK), DEC); Serial.Print ("\t"); Serial.Print ("XGs ="); Serial.Print (getXGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("YGs ="); Serial.Print (getYGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("ZGs ="); Serial.Print (getZGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("ZBut ="); Serial.Print (getNunValue(ZBUTTON), DEC); Serial.Print ("\t"); Serial.Print ("YBut ="); Serial.Print (getNunValue(CBUTTON), DEC); Serial.Print ("\t"); } //END OF PRINT ROUTINES //--------------------------------------------------------------------

Artículos Relacionados

Automatización del hogar usando MQTT y NodeMcu o arduino

Automatización del hogar usando MQTT y NodeMcu o arduino

Domótica es un rumor nuevo hoy en día... hay tantos hardware de código abierto disponibles para construir su propia automatización del hogar. Muchas herramientas, es fáciles de confundir para decidir cual es mejor / conveniente para usted. Manteniend
Web-Enabled termostato casero (y centro de automatización del hogar)

Web-Enabled termostato casero (y centro de automatización del hogar)

Este Instructable explica cómo construí termostatos WiFi habilitado para mi casa. Los termostatos programables con 6 diferentes períodos de tiempo durante el día, a pesar de aumento a un número arbitrario sería bastante triviales. Que pueden ser prog
Linux: empezando en un servidor de automatización del hogar.

Linux: empezando en un servidor de automatización del hogar.

Linux: empezando en un servidor de automatización del hogar.Esto es sólo un quickie prueba de concepto sobre el uso de un servidor web para Domótica remotamente. a todos nos va a hacer es encender algunos leds, pero el plan de acción estará allí para
Ingeniería inversa: USB controlado hack de automatización del hogar

Ingeniería inversa: USB controlado hack de automatización del hogar

hackear un sistema inalámbrico de automatización del hogar para ser controlada usando dos Microcontroladores AVR USB!¡ Mira el video! El sistema es realmente más sensible, pero el navegador de mi celular es lento.Si te gusta esto, posiblemente le gus
Guía para principiantes en el uso Webhooks para automatización del hogar con Prota OS

Guía para principiantes en el uso Webhooks para automatización del hogar con Prota OS

TL:DR: webhooks son fáciles de usar y configurar con Prota OS. Utilice webhooks para cientos de flujos de trabajo de automatización.Aprender a configurar y utilizar OS Prota para Raspberry Pi aquí.Descargar OS Prota para Raspberry Pi aquí.¿Cuáles son
Creación de un sistema de automatización del hogar!

Creación de un sistema de automatización del hogar!

Aquí es cómo había automatizado mi casa. Necesitaba un medio para;-administrar mi sistema de energía solar incluyendo la habilidad de cambiar de fuente de utilidad debo necesitarlo.-administrar el alimento y el agua a mis tres perritos.-controlar las
Automatización del hogar Datura 6 - mejoras de 2015

Automatización del hogar Datura 6 - mejoras de 2015

Noticias: En estos últimos meses he hecho algunos importantes correcciones y mejoras al código y al servidor Web del proyecto. Ver datura_mega_v19.ino para el último código.El proyecto más funcional en internet, utilizarlo como un sistema de riego co
Compruebe que está en casa! Automatización del hogar. Vigilancia. Gran hermano tecnología frambuesa PI.

Compruebe que está en casa! Automatización del hogar. Vigilancia. Gran hermano tecnología frambuesa PI.

En este instructable brevemente explicaré cómo se puede construir una página web para ver quién está en casa o utilizar el script para la automatización del hogar.Se necesita:* Un router con posibilidad de configurar la dirección ip dirección mac* Fa
Servidor de automatización del hogar con router

Servidor de automatización del hogar con router

convertir un router barato en un servidor de automatización del hogar!Este proyecto permitirá cambiar enchufes y luces desde su iPhone, o cualquier navegador.También podrás enviar comandos serie control remoto.Este proyecto se basa en SmartLinc.http:
Bluetooth basado en automatización del hogar

Bluetooth basado en automatización del hogar

Bluetooth basado en automatización del hogar, proyecto permite controlar aparatos eléctricos utilizando su teléfono móvil android. Consiste en el microcontrolador ATmega8, módulo Bluetooth HC-06, Relays.There son muchos Inicio sistemas de automatizac
DIY IoT $10 base de automatización del hogar

DIY IoT $10 base de automatización del hogar

Se realiza IOT basado en proyecto de automatización del hogar con bajo costo ESP8266 ESPino ESP-12 módulo de WiFi, utiliza relés y algunos componentes simples, se suministra completa código y pcb layout, para más detalles sobre la configuración del s
Edison de Intel basado en monitor de sonido para la automatización del hogar!

Edison de Intel basado en monitor de sonido para la automatización del hogar!

Hola todo el mundo!Soy Geeve George un fabricante con orgullo de la INDIA! Empecé a hacer en la edad de 10 y mi afán por hacer todavía continúa como estoy fascinado por las infinitas posibilidades y oportunidades que la tecnología ofrece.Sombrero! es
Automatización del hogar con un Smartphone (TV, Arduino, luz, seguridad, proyector, reproductor de DVD...)

Automatización del hogar con un Smartphone (TV, Arduino, luz, seguridad, proyector, reproductor de DVD...)

Estos días los dispositivos de domótica y el hogar sistemas de control son muy populares. Incluso en la comunidad de DIY-ers. Así decidí hacer mi propio dispositivo de control Inicio con Arduino. El dispositivo puede controlarse con un teléfono celul
Sensores inalámbricos de 432 MHz y tomas de corriente para la automatización del hogar usando Arduino

Sensores inalámbricos de 432 MHz y tomas de corriente para la automatización del hogar usando Arduino

domótica se convierte cada vez más popular y asequible y fascina a la gente. Internet ofrece tales posibilidades como nunca antes. Impresiona a tus amigos mostrando en Iphone que puedes activar/desactivar la lámpara en su apartamento de 1000 km y al