Du bist nicht berechtigt, die Seite zu bearbeiten. Grund:
Diese Aktion ist auf Benutzer beschränkt, die der Gruppe „Benutzer“ angehören.
Freitext:
[[Category:Projekte]] = Figaro V1 = Figaro wird in der Version 1 nicht weiterentwickelt, siehe [[Figarov2]] == Projektbeschreibung == Figaro ist ein Projekt, das es uns ermöglicht den Status des Bunkers abzubilden. In der Aktuellen version lässt sich über einen Magnetschalter an der Türe auslesen ob die Türe geöffnet oder geschlossen ist. Für spätere Versionen ist angedacht zusätzlich: * Die Temperatur * Lautstärke * Luftfeuchtigkeit * Helligkeit auszulesen. == Materialien == Folgende Materialien haben wir verwendet. * Rechner mit Parallelport * Parallelkabel * Widerstände 10kO * Sensor ( in unserem Fall ein Magnetsensor ) * Kabel * Lötkolben * Schrumpfschlauch == Meilensteine == * Brainstorming * Entwurf des Schaltplans * Programmierung * Inbetriebnahme ====Brainstorming ==== Zuerst haben wir uns einige Gedanken zum generellen Ablauf gemacht. Dabei haben wir uns dazu entschlossen über einen Port am Cumputer möglichst einfach den Status der Türe herauszufinden. <graphviz caption='Hello SVG and PNG' alt='phylogenetic tree' format='svg+png'> digraph G { rankdir=LR; node [style=filled]; Rechner -> Port; Port -> Sensor -> Türe; Türe -> Port; } </graphviz> Nach einiger Recherche haben wir uns für den Parallelport entschieden. ====Schaltplan==== Der Schaltplan wurde mit Hilfe von xyz erstellt. Zum verständniss möchte ich kurz die Belegung der Pins am Parallelport erklären. ==== Parallelport ==== Der Paralellport besteht aus 25 Pins. Diese Pins sind in 4 Gruppen unterteilt. * Input Pins ( Können nur lesen ) * Output Pins ( können nur schreiben ) * Controll Pins ( Können Lesen und Schreiben ) * Erdung ( Dienen zur vervollständigung des Schaltplans ) Die Belegund sieht daher wie folgt aus: 2-9 Output Pins 10-13,15 Input Pins 14,16,17 Controll Pins 18-25 Erdung Ein Outputpin kann 1 (5V) und 0 (0V) als Status annehmen. ==== Schaltplan ==== <graphviz caption='Hello SVG and PNG' alt='phylogenetic tree' format='svg+png'> digraph G { rankdir=LR; node [style=filled]; Rechner -> Parallelport; Parallelport -> Pin2; Parallelport -> Pin10; Pin2 -> Schalter; Schalter -> Pin10; } </graphviz> ====Programmierung==== Bei der Programmierung habe wir auf das Framwork Parapin gesetzt. Damit konnten wir einfach den Status der Pins setzen bzw auslesen. Parapin kommt bereits mit Beispielprogrammen. Mit diesen Beispielprogrammen haben wir zuerst etwas experimentiert. Ein kurzer ausschweif in Parapin: pin_init_user(LPT1) // Inizialisiert den Parallelport set_pin(LP_PIN[2]) // Setzt Pin 10 high / 1 ( 5V ) pin_is_set(LP_PIN[10]) // Frägt den Status des Ports 10 ab ==== Inbetriebnahme ==== Bilder folgen... Der Status kann über die Homepage www.pilarkto.org abgerufen werden. Dazu haben wir den Aktuellen Status in eine MySQL Datenbank schreiben lassen. Diese kann dan bequem über PHP auf der Homepage ausgelesen werden. <graphviz caption='Hello SVG and PNG' alt='phylogenetic tree' format='svg+png'> digraph G { rankdir=LR; node [style=filled]; PC -> Sensor Sensor -> PC PC -> Datenbank Datenbank -> Webseite } </graphviz> == Sourcecode == Der Aktuelle Sourcecode: ( Noch verbesserungsbedürftig ) <syntaxhighlight lang="c"> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <mysql/mysql.h> #include <string.h> #include "parapin.h" void mysqlConnect(int status) ; int main(int argc, char *argv[]) { int status = -1; if (pin_init_user(LPT1) < 0) exit(0); pin_input_mode(LP_DATA_PINS); pin_input_mode(LP_SWITCHABLE_PINS); pin_output_mode(LP_DATA_PINS | LP_SWITCHABLE_PINS); for (;;) { if(status != pin_is_set(LP_PIN[10])) { usleep(2000 * 1000); if(status != pin_is_set(LP_PIN[10])) { status = pin_is_set(LP_PIN[10]); time_t t; struct tm *ts; t = time(NULL); ts = localtime(&t); printf("%s um %s \n", status ? "Open" : "Close", asctime(ts)); mysqlConnect(status ? 1 : 0); usleep(2000 * 1000); } } } printf("\n\n"); return 0; } void mysqlConnect(int status) { MYSQL *conn; MYSQL_RES *res; char *server = "HOST"; char *user = "USER"; char *password = "PASSWORT"; /* set me first */ char *database = "DATENBANK"; conn = mysql_init(NULL); /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } /* send SQL query */ char sqlquery[41]; sprintf(sqlquery,"INSERT INTO doorlog(status) VALUES(%i)",status); if (mysql_query(conn, sqlquery)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } res = mysql_use_result(conn); /* close connection */ mysql_free_result(res); mysql_close(conn); } </syntaxhighlight>
Zusammenfassung:
Nur Kleinigkeiten wurden verändert Diese Seite beobachten
Abbrechen