Figaro
Projektstart | 2010/08/04 |
---|---|
Projektleiter | Benedikt.schumm |
Betreuer | Philippe.Käufer |
Status | obsolete |
Projektname | Figaro |
Bildbeschribung | Bild des LPT Boards |
Inhaltsverzeichnis |
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.
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
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.
Sourcecode
Der Aktuelle Sourcecode: ( Noch verbesserungsbedürftig )
#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); }