Arduino Powered Home (7 / 10 étapes)

Étape 7: Programmation de l’Arduino

Joint ci-dessous est l’esquisse de l’Arduino pour ma dernière version de ce projet. Pour votre commodité, il est compressé dans un dossier portant le même nom que le croquis. Cela est nécessaire pour pouvoir l’utiliser avec le logiciel Arduino IDE. *** croquis peuvent être visualisées avec n’importe quel éditeur de texte ***

Soyez prudent avec le placement d’ouverture et de fermeture des accolades {et} parce que pour le code pour utiliser les accolades doivent être équilibrés. Si vous vous perdez en essayant de rattraper les accolades, vous devriez remarquer qu’à l’aide de l’IDE Arduino (j’ai été en utilisant 1.0 IDE sous Linux et précédemment 1.0.5 sur Windows) si vous placez le curseur juste après une accolade d’ouverture ou fermeture, l’IDE va entourer son accolade correspondante dans un rectangle. Vous devrez peut-être faire défiler vers le haut ou vers le bas dans votre code pour Rechercher l’accolade correspondante, comme de grandes parties de votre code peuvent contenir des accolades avec beaucoup d’autres paires d’accolades entre eux. Vous pouvez utiliser cette fonctionnalité de l’IDE pour trouver l’orthèse déséquilibrée ou supplémentaires, ou peut-être doit être mises en correspondance avec une accolade manquante.

Va sur le code à un niveau élevé, principalement, je tiens à souligner la partie du code qui rend la page web. Il commence par client.println("") ; Cela indique l’Arduino pour imprimer une ligne vers le navigateur de web connexion au serveur via la connexion établie. Si vous êtes quelque peu familiers avec le HTML, vous pouvez modifier le contenu de la page et les liens suivant celui correspondant à vos besoins. Suffit de garder à l’esprit a besoin ces déclarations client.print au début de chaque ligne qui contient le contenu de la page web ; soit client.println qui imprime une ligne avec l’effet d’un retour chariot saut de ligne à la fin, ou un client.print qui imprime ce qui suit, mais devra se terminer par le code html
pour le saut de ligne obtenir le même effet. Pour imprimer plusieurs choses sur la même ligne, utilisez quelque chose comme :

client.Print ("I") ;

client.Print ("J’aime") ;

client.Print (« Arduino ») ;

client.println ("projets de domotique") ;

Ce qui précède sera imprimé

J’aime les projets domotique Arduino

à la page web avec un retour chariot-saut de ligne par la suite.

J’ai ajouté une touche à la page web de CDCosma quand j’ai décidé sur l’ajout de PC et MV passer commande, si vous ' ll voir une petite quantité de code entre les parties du code HTML qui est seulement utilisé par l’Arduino pour décider ce que le code HTML s’affiche dans le navigateur. Par exemple :

Si (digitalRead(8) > 0) {}

client.Print ("MV est ON") ;

client.println("") ;

client.println (« arrêt de MV") ;

} else {}

client.Print ("MV est OFF") ;

client.println("") ;

client.println ("allumer MV") ;

}

Cela signifie que l’Arduino lira la broche numérique 8 pour déterminer si elle est haute ou basse. La broche numérique 8 est connectée sur le rail d’alimentation alimentation + 5 v de la MV donc l’Arduino peut détecter l’état de l’alimentation. Si la broche 8 est lu comme une haute numérique, elle effectuera les 3 prochaines lignes de code, impression « Media Vault est ON » (ON sera en texte gras et vert), sauts de ligne 2 si le texte doesn' t se chevauchent le bouton en dessous, ayant la teneur « Shut Media Vault Off » et l’url liée de ce bouton est? mvoff ou http://192.168.1.97/?mvoff. (Voir l’image plus haut de la page web.) Autrement dit, il va envoyer? mvoff comme l’en-tête à l’Arduino, et lorsque l’Arduino lit cette chaîne, il s’acquittera de code vers la fin de l’esquisse à partir de

if(ReadString.IndexOf("?mvoff") > 0) //checks chaîne d’en-tête de requête

Sinon, étant ce qui est effectué si la broche 8 est faible, le code s’impriment à la page web de client « Media Vault est OFF » (arrêt sera en texte gras et rouge), ligne 2 pauses ainsi le texte doesn' t se chevauchent le bouton en dessous, qui lira Media Vault s’allume et l’url liée de ce bouton est? mvon et l’Arduino effectueront le code vers la fin de l’esquisse correspondant à? mvon.

J’ai aimé la façon dont cela a fonctionné assez pour revenir en arrière et modifier la lumière et des parties du contrôle ventilateur au plafond de la page web d’inclure ce comportement conditionnel. La seule chose que je n’aime pas sur l’utilisation de ceci est que la page n’est pas vraiment dynamique, ce qui signifie qu’il ne met pas à jour après avoir cliqué sur un bouton. Je crois que cela exigerait l’ajout d’AJAX ou JSON dont je n’ai pas encore appris. J’ai expérimenter largement avec JavaScript simple et n’était pas en mesure de réussir. J’ai ensuite ajouté les boutons « Refresh » pour chacune des sections qui ne rafraîchir en fait comme le ferait le bouton actualiser, mais ils ont juste un lien vers http://192.168.1.97/ pour l’Arduino renvoyer une page douce sans l’envoi de n’importe quelle chaîne d’en-tête supplémentaire à la fin de l’URL du navigateur. À l’aide de mes boutons de Pseudo-actualisation ne causera pas l’Arduino changer l’état de des broches. Si le navigateur affiche http://192.168.1.97/?pcon, en utilisant le bouton Actualiser du navigateur provoque le navigateur de le renvoyer à qui demander et provoquer mon PC à suspendre. C’est depuis que j’utilise l’interrupteur d’alimentation pour s’interfacer avec l’Arduino et la même action est requise pour l’interrupteur allumer comme éteint. C’est une bonne idée de ne pas utiliser les boutons de navigation du navigateur en pareil cas.

Suite à ce code à la fin de l’esquisse, vous serez en mesure de voir les actions provoquées par chacune des chaînes en-tête, y compris les demandes de tournage légers ou fan sur et en dehors. Ces broches que j’ai connecté à la carte de relais Sainsmart sont initialisés comme élevé dans la fonction de réglage de l’esquisse commençant par void setup() afin que lorsque l’Arduino alimente tout d’abord sur et exécute l’esquisse, ces relais sont désengagent. Ceci doit être pris en compte. Parce que ce qui arrive quand l’Arduino perd de la puissance, puis reprend le pouvoir ? Il démarre et s’exécute l’esquisse dès le début. La fonction de configuration où les broches de l’Arduino sont initialisées exécute une seule fois chaque fois le croquis est exécuté. Vous auriez probablement plutôt être parfois laissés dans l’ignorance pendant quelques secondes si votre électrique du domicile cycles brièvement pendant que vous accueillent, que pour venir du travail ou de vacances pour trouver toutes les lumières sur parce que le pouvoir s’en alla et revint pendant que vous étiez là.

J’ai aussi l’Arduino à écrire sur le port série, quelle action est effectuée. Cela aide lors du dépannage à l’aide du moniteur de série de la Arduino IDE.

Avis que le code dans l’esquisse pour allumer le PC fonctionne un peu différemment pour le MV. C’est en raison des différences dans les types de commutateurs du panneau avant. Le PC a besoin de seulement une courte momentanée de l’interrupteur de sa façade (ou de n’importe quel interrupteur extérieur imitant l’interrupteur du panneau avant). Pour cette raison, broche 9 doit provoquer le relais de fermer momentanément et puis ouvrez à nouveau. Pour ce faire, j’ai mis en broche 9 à bas, ce qui engage le relais Sainsmart (rappel j’utilise la carte de relais au lieu d’un relais reed externe), l’esquisse attend un quart de seconde avant réglage du pin 9 de haut encore une fois, dégageant le relais, tous ce imitant l’effet d’appuyer sur le commutateur d’alimentation brièvement et relâchez-le. La même action exacte de l’esquisse est nécessaire pour provoquer le PC pour se réveiller de son état de veille, comme il le fait pour le suspendre. J’ai écrit également la possibilité de réinitialiser le PC en imitant une pression de 4 secondes de l’interrupteur d’alimentation dans le cas où le PC se bloque sur moi. Je mets t attends jamais besoin d’utiliser celui-ci, mais pensé à ajouter il alors que je traversais les entrées des touches de façade possible dans mon esprit.

Tout en bas de la page web, j’ai ajouté quelques lignes pour me rappeler quel sketch a été chargé, lorsque je l’ai téléchargé et de l’ordinateur sur lequel. J’ai récemment déménagé un ordinateur portable et un PC de Windows à Linux et ne savais pas si j’aurais des différences dans le comportement de mes croquis téléchargés basé sur l’OS, j’ai utilisé pour exécuter l’EDI. La seule chose que j’ai remarqué en raison de mon déménagement d’OS est que sous Linux, lorsque vous ouvrez le moniteur série dans l’IDE, il réinitialise votre croquis. Donc dans mon cas, tous mes relais haute puissance switch off. Il n’y a eu aucune différence dans le comportement de mes croquis concernant mon déménagement d’OS.

Mise à jour août 2014 :

Ajoutant le circuit imprimé avec les commutateurs de tact, j’ai ajouté quelques trucs que j’ai ramassé de plonger plus profondément dans l’Arduino intermédiaires d’amandaghassaei : entrées et sorties. Afin d’imprimer vers le port série de l’état de chaque aiguille quand je veux qu’elle, j’ai ajouté une section sur mon croquis avant le setup() qui déclare une variable d’état de la chaque broche, comme :

int pinState1 = digitalRead(4) ; J’ai fait cela pour chaque broche dans mon projet, broches 4-9, 11 et 22-25, toutes les entrées et les sorties.

et avec son exemple pour debouncing un interrupteur avant de déterminer son état, a déclaré variables booléennes pour currentState, lastState, debouncedState pour chaque bouton (comme currentState1, currentState2), unsigned long timeOfLastButtonEvent pour chaque bouton et une debounceInterval standard à utiliser pour tous comme ceci :

booléen currentState1 = faible ; stockage pour l’actuel état de button1 mesurée,... etc pour 2, 3 et 4

booléen lastState1 = faible ; stockage pour mesuré dernier État button1,... etc pour 2, 3 et 4

booléen debouncedState1 = faible ; debounced état de button1,... etc pour 2, 3 et 4

int debounceInterval = 20 ; attendre 20 ms pour les boutons régler

unsigned long timeOfLastButtonEvent1 = 0; magasin le dernier état de button1 temps changé,... etc pour 2, 3 et 4

À la fin de mon esquisse à l’extérieur de ma boucle setup(), j’ai ajouté la fonction suivante que j’ai nommé "États" :

void States() {}

pinState1 = digitalRead(4) ;

pinState2 = digitalRead(5) ;

pinState3 = digitalRead(6) ;

pinState4 = digitalRead(7) ;

pinState5 = digitalRead(8) ;

pinState6 = digitalRead(9) ;

pinState7 = digitalRead(11) ;

pinState8 = digitalRead(22) ;

pinState9 = digitalRead(23) ;

pinState10 = digitalRead(24) ;

pinState11 = digitalRead(25) ;

Serial.Print ("fan Active lr faible état de la broche de sortie circuit de 4:") ;

Serial.println(pinState1) ;

Serial.Print ("lumière Active br faible état de la broche de sortie circuit de 5:") ;

Serial.println(pinState2) ;

Serial.Print ("fan actif br faible état de la broche de sortie circuit de 6:") ;

Serial.println(pinState3) ;

Serial.Print ("État MV broche de sortie interrupteur 7:") ;

Serial.println(pinState4) ;

Serial.Print ("puissance MV État broche d’entrée de 8 de la situation:") ;

Serial.println(pinState5) ; Serial.Print ("État PC interrupteur sortie pin 9:") ;

Serial.println(pinState6) ;

Serial.Print ("power PC État broche d’entrée de 11 de la situation:") ; Serial.println(pinState7) ;

Serial.Print ("état de la broche d’entrée bouton LR fan de 22:") ;

Serial.println(pinState8) ; Serial.Print ("état de la broche d’entrée BR touche lumineuse de 23:") ;

Serial.println(pinState9) ;

Serial.Print ("état de la broche d’entrée bouton BR fan de 24:") ; Serial.println(pinState10) ;

Serial.Print ("État MV interrupteur bouton entrée pin de 25:") ;

Serial.println(pinState11) ; }


Et j’ai debounce chaque commutateur, déterminer son état, décider si qui a changé et appeler ma fonction States() de chaque section dans mon loop() comme ceci :

Chambre des maîtres de lumière
currentState2 = digitalRead(buttonPin2) ;

unsigned long currentTime2 = millis() ;

Si (currentState2! = lastState2) {}

timeOfLastButtonEvent2 = currentTime2 ;

}

si (currentTime2 - timeOfLastButtonEvent2 > debounceInterval) { //if suffisamment de temps écoulé

si (currentState2! = debouncedState2) { //if l’état actuel est toujours différente de celle de notre dernière stockée debounced État

debouncedState2 = currentState2 ; mise à jour de l’État debounced

déclenchement d’un événement pour la lumière de la Chambre des maîtres

Si (debouncedState2 == HIGH) {}

States() ;

Serial.println ("Button2 pressé") ;

digitalWrite (5,! digitalRead(5)) ; inverser l’état de la broche 5 en première lecture sa valeur numérique, puis écrire le contraire

Serial.println("---") ;

Serial.println() ;

}

else {}

States() ;

Serial.println ("Button2 libéré") ;

Serial.println("---") ;

Serial.println() ;

}

}

}

lastState2 = currentState2 ;

J’ai également appeler States() chaque fois qu’une action est entreprise basée sur la contribution de la page web, permettant une sortie série sérieusement considérable. C’était surtout pour dépanner certains comportement étrange qui s’est avéré être causée par une surface légèrement conductrice (haut de Malle tachée) où mon circuit imprimé Arduino et commutateur pondent, toujours sans un cas de projet. J’ai besoin de corriger ça bientôt, mais pour l’instant, j’ai placé une feuille de papier sous tout. Avant cela, je pourrais mettre ma main sur le dessus de la poitrine et un relais pourrait inverser les États. Résultats pas vraiment souhaitables ! Je vais réduire l’utilisation massive de States() ou de whiddle vers le bas de son contenu bientôt. Aussi près du haut de ma "liste à faire" est à la fin de mon boîtier plexi pour l’Arduino Mega et ethernet bouclier et faire quelque chose de similaire pour la platine de l’interrupteur.

Les trois dernières images ci-dessus sont des captures d’écran de la sortie de la série monitor avec notes.

-Fin de la mise à jour-

Articles Liés

Un contrôle sans fil, babillard électronique Arduino-Powered

Un contrôle sans fil, babillard électronique Arduino-Powered

construire vous-même un babillard électronique sans fil contrôlé, Arduino-powered !Voici un projet simple qui crée un babillard électronique programmable sans fil. Il utilise des modules XBee pour fournir une liaison série sans fil entre votre ordina
Axée sur le solaire, horloge Arduino-Powered

Axée sur le solaire, horloge Arduino-Powered

c'est une horloge conçus pour garder l'heure exacte (indépendante d'atomique ou GPS), affichage local lever du soleil, le midi solaire et coucher de soleil et aussi s'ajuster à l'heure d'été.J'ai voulu l'horloge pour être facile à utiliser et à faire
Arduino-Powered binaire thermomètre

Arduino-Powered binaire thermomètre

j'ai récemment acquis un Arduino Uno et était à la recherche d'un projet de « getting started » cool. J'ai décidé de faire un thermomètre, que le kit, j'ai eu toutes les pièces nécessaires (thermistance, fils, résistances, diodes). Par le biais de qu
Le Raspberry Pi-Arduino-SignalR Home Automation moyeu

Le Raspberry Pi-Arduino-SignalR Home Automation moyeu

Suite à un couple de mon prélude IBLEs publié ici et ici, ce projet prend la première étape vers la création d'une version de base d'un Home Automation Hub fonctionnelle.J'ai utilisé différentes technologies dans le but de comprendre comment je peux
Arduino-Powered Game'n' montre réveil

Arduino-Powered Game'n' montre réveil

j'ai téléchargé quelques instructions sur la façon de construire un réveil basé surArduino qui peut également être utilisé comme un thermomètre, un accéléromètre-poweredSnake-jeu et il a des messages secrets construits : http://arduino.komakino.ch
Un connecté à Facebook, la fête de la musique Arduino-Powered

Un connecté à Facebook, la fête de la musique Arduino-Powered

fête de la musique est une nouvelle façon d'écouter de la musique avec d'autres. En appuyant sur un dispositif RFID/NFC qui est synchronisé à un compte Facebook sur un lecteur RFID Arduino bouclier et envoyant que ID unique au serveur de fête de la m
Arduino powered Solar Battery Charger

Arduino powered Solar Battery Charger

Le dessin suivant est pour un chargeur de batterie solaire a couru par un Arduino Nano. Il peut gérer une batterie acide 12V au plomb standard, comme pour une voiture ou un scooter. En outre, la conception a été testée et fonctionne avec une efficaci
Sapin de Noël de mur Arduino-Powered w / Star Wars Theme LED Lights

Sapin de Noël de mur Arduino-Powered w / Star Wars Theme LED Lights

Il s'agit d'un arbre de Noël bricolage parfait pour les petites maisons, des appartements ou un bureau où vous ne voulez pas un arbre réel et que vous souhaitez un petit esprit de Noël.Vous pouvez aller simples ou complexes avec la conception ici mai
Arduino Powered Tubes Nixie : Assemblage de protection pilote ArduiNIX Nixie

Arduino Powered Tubes Nixie : Assemblage de protection pilote ArduiNIX Nixie

www.ArduiNIX.com présente : assemblage de protection pour le pilote ArduiNIX NixieLe bouclier de ArduiNIX est une plateforme programmable de l'utilisateur pour la conduite multiplexé tube Nixie ou autres affichages haute tension **. Le ArduiNIX est l
3 canal arduino Powered Noël contrôleur d’éclairage !

3 canal arduino Powered Noël contrôleur d’éclairage !

Pour Noël cette année, j'ai voulu faire un projet vraiment cool mais ne sais pas trop quoi faire. Comme je recevais l'out de lumières de Noël pour décorer, il y avait un vieux minuterie de lumière Noël éclaté. J'ai a pris à part et regarda du circuit
Contrôlé par Arduino Smart Home

Contrôlé par Arduino Smart Home

Ce Instructable a été écrit par Evangéliste PubNub Ian Jennings . Histoire de Ian se promène à travers son processus de construction d'un modèle de maison intelligent contrôlé par Arduino à partir de zéro.--Retour en septembre, notre fondateur Stephe
Arduino-powered LED horloge

Arduino-powered LED horloge

Une amusante, simple LED horloge, qui vous donnera le temps à la demi-heure plus proche à l'aide de simple-couleur LED. Pièces nécessaires sont les suivantes :Arduino Nano400 points cravate BreadboardCâble en nappeDS1307 IC RTC32,768 kHz Crystal(12)
Construire une tête de robot parlant Arduino-powered !

Construire une tête de robot parlant Arduino-powered !

Cette tête de robot a été construite comme une fin du projet année pour ma classe informatique physique, mais au cours de l'été, il a « appris » comment parler.La tête est propulsée par deux Freeduinos, 3 TLC5940NT chips et un bouclier de vague Adafr
Radio WiFi autonome-panneau de contrôle (Arduino-Powered)

Radio WiFi autonome-panneau de contrôle (Arduino-Powered)

j'ai voulu une Radio Internet pendant une longue période et a été ravi de trouver le projet de Wifi Radio de Tinkernut (http://tinkernut.com/archives/2387 ), que j'ai construit et jouissent depuis quelques mois.Cependant, je n'aimais pas vraiment pou