Show Posts
Pages: [1]
1  International / Deutsch / Re: Alarmanlage mit Arduino? on: March 05, 2014, 07:41:32 pm
sschultewolter du hast wohl recht mit der Rechtlichen Seite, die währe wohl auch bei Pfefferspray gegeben.
Auch die Katze/n hatte ich außer acht gelassen, den würde auch eine 90db heule kurzfristig einen irreversiblen schaden zufügen. Somit bleibt ja eigentlich nur der stille Alarm den ich auch für am geeigneten finde, und mit Sicherheit am meisten Videomaterial liefert solange die Kameras und Speichersystem nicht entdeckt werden.

Das mit dem Druck funktioniert allerdings super als Auslöser, solange man die  Toleranzen hierfür gut einstellt. Ich kann mir allerdings auch vorstellen das grössere Laster oder Bahnverkehr oder ein Erdbeben diese durchaus auch bei geschlossenen Räumen zu einem Fehlalarm führen können. Diese Gegebenheiten hatte ich bis auf theoretisch Eruptionen die nie eingetreten sind damals nicht. Ich hatte den Sensor hinter 3 Türen (Remise-Flur-Bad-Klo <- Sensor) aufgestellt, und er Löste ohne Probleme aus.

Piezo Sensor Löst auch bei Vogelkontakt auf der Scheibe aus nicht aber beim gewaltsamen öffnen eines Fensters, solange nicht das Glas zerspringt.
Reed Relay löst nur beim gewaltsamen Öffnen des Fensterrahmens aus, nicht aber bei Glasbruch.
Bei Bewegungsmeldern gibt es durchaus Methoden diese außer kraft zu setzen.
Da fand ich die Barometer Variante am einfachsten, zumal ich diese mit feinem Kupferlack-draht und weißer Dispersionsfarbe an der Wand entlang legen konnte. Den eigentlichen Sensor hatte ich dann hinter der Tapete verklebt mit einem kleinen Loch das nicht ersichtlich war.

Als erste Sicherheitsmaßnahme würde ich die Schlösser austauschen, damit sie nicht einfach durch einen Bump Key geöffnet werden können. Auch Sicherheitsschlösser mit abgesetzten Pilzen helfen da nicht. Ich würde hier Schlösser mit Schrägen Zylindern verwenden. Auch Versicherungen haben grundsätzlich ein Problem mit Leeren Firmen hallen ohne Einbruchsspuren.

Inergen...  Da isses wieder... Große Warnschilder überall.. Ich glaube das man das sowieso zulassen muss, und das Gas wohl auch nicht gerade günstig ist.


2  International / Deutsch / Re: Alarmanlage mit Arduino? on: March 05, 2014, 06:17:43 pm
Aso ich hatte mal sowas mit Arduino gebastelt, und habe den Luftdruck für den Alarm verwendet.
http://www.adafruit.com/products/391

Bei einer 70qm Wohnung funktionierte das extrem super, selbst wenn mal irgendwo ein Fenster offen war. Die Idee mit Reed Relays kam mir zwar auch mal kurzfristig, aber die Kabellei war mir dann zu anstrengend.

Wenn's richtig was zum ausräumen gäbe würde ich ja eher einen Drucksensor + stillen Alarm  GSM zum Sicherheitsdienst +  Foto/Video verwenden. Das wäre dann durchaus auch für die Versicherung Interessant solange es in den einengen räumen Stattfindet.

Um sie zu Verjagen und ein zusäzlichen Brandschutz zu erfüllen wäre auch ein (Emergen <- weiss nicht ob ich das richtig geschrieben habe) Alarm. Das hatte ich in ein paar Sendezentren mal gesehen. Dabei wird wohl der Sauerstoff in den räumen ausgepresst und mit einem nicht Brennbaren Gas gefüllt, was man aber auch nicht Atmen kann.
Ich denke mit Hochdruck verstäubter Pfefferspray ist man da auf der rechtlich sicheren Seite.

Auch die Variante mit dem Druckmesser sollte man intensiv Testen....

3  International / Deutsch / Re: Time.h & processSyncMessage() itoa ? on: March 05, 2014, 05:46:40 pm
Ahhh... Danke Serenifly.. Das macht sinn..

Wie verfahre ich denn mit Buchstaben? Nicht das ich dies nun bräuchte, aber mal rein aus Interesse? Gibt es eine denn Funktion die mir aus einem Char = 065  ein "A" ausgibt?

Alle sagen ja Strings sind schlecht für den Speicher, daher würde ich ja schon gerne grundsätzlich mit Char Arrays arbeiten wollen.
4  International / Deutsch / Re: Time.h & processSyncMessage() itoa ? on: March 05, 2014, 04:55:29 pm
alles klar... nun habe ich es..
Code:
int T_hr =pctime[0] - '0'

Warum  -'0' habe ich nun nicht begriffen, aber es funktioniert..

: - )

[EDIT]

Und hier nochmal im ganzen.. bin bestimmt nicht der einzige der da auf das Problem stößt?

Code:
void processSyncMessage() {
  while(Serial.available() >=  TIME_MSG_LEN ){  
    char c = Serial.read() ;
      if( c == TIME_HEADER ) {    
char pctime[10];
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( isDigit(c)) {    
pctime[i] = c ;
}
      }
 
int T_hr =(pctime[0] - '0') * 10 +  (pctime[1] - '0');
int T_min =(pctime[2] - '0') * 10 +  (pctime[3] - '0');
int T_sec = 0;
int T_day = (pctime[4] - '0') * 10 +  (pctime[5] - '0');
int T_mon = (pctime[6] - '0') * 10 +  (pctime[7] - '0');
int T_yea = (pctime[8] - '0') * 10 +  (pctime[9] - '0');

      setTime(T_hr,T_min,T_sec,T_day,T_mon, T_yea);   // Sync clock to the time received on serial port
    }
  }
}
5  International / Deutsch / Time.h & processSyncMessage() itoa ? on: March 05, 2014, 03:57:34 pm
Hallo,
ich nutze die <Time.h> und die im Beispiel beschriebene
void processSyncMessage()

Leider funktioniert das bei mir nicht die zeit über den Com Port zu syncroniesieren.
Beim senden von T1410050314 also 14:10 05.03.14 stellt sich die Zeit auf irgendwas um..

char pctime[10]; = 1410050314

Nun versuche ich selbst die Funktion setTime() aufzurufen um die werte zu übergeben, und es passiert der gleiche blödsinn, weil pctime[0] eben nicht 1 sondern 49 in der Ascii tabelle ist.
setTime(pctime[0] + pctime[1] ,00,pctime[4] + pctime[5],pctime[6] + pctime[7], pctime[8] + pctime[9]);

..und nun verbringe ich 2 Tage damit pctime[0] + pctime[1]  aber eben nicht den Ascii wert 049 & 052 sondern Ihren wert 1 + 4..

itoa habe ich nun auch ausprobiert, aber dabei bekomme ich ja wieder ein char[] zurück, und das habe ich ja schon...

Wie bekomme ich aus dem Ascii wert 049 eine "1" hin?

Danke schonmal vorab für hilfe. smiley
6  International / Deutsch / Re: RTC DS1307 & LCD 12864B mit SPT Modul (? ST7920) on: January 11, 2013, 10:40:03 am
Nun habe ich heute mal alle Kabel getauscht, und das Breadboard entfernt, um auch diese Fehlerquellen ausschließen zu können.
Dann habe mal den Scanner ausprobiert, und der zeigt mir auch 2 Devices an..
0x68 für die RTC
0x50 ... Ich glaube das ist der Speicher auf der RTC. Irgendwas hatte ich mal gelesen das man da ein paar Bytes Speichern kann?
Leider zeigt die Uhr Nicht wirklich was an. Die 165/165/165 45:165:165 bekomme ich auch wenn die RTC gar nicht am Board dran hängt.
Ich würde also meinen das die gar nicht gefunden wird.

Da ich im Fritzing das LCD mit dem SPI Anschluss sowie die RTC irgendwie nicht gefunden habe habe ich mal ein paar Bilder gemacht.

www.corsmeyer.de/user/arduino/RTCProblem.jpg

Brauche ich vielleicht 4,7K Pullups? Ich dachte die bräuchte man nur beim 1-Wire?

Code:

// LCD
#include "U8glib.h"
U8GLIB_ST7920_128X64 u8g(52, 51, 53, U8G_PIN_NONE );// SPI Com: SCK = en = 30, MOSI = rw = 32, CS = di = 31

int count = 0;

//RTCModule
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527


void setup(void) {
Serial.begin(9600);

// *******  Hatte ich Vergessen!
        Wire.begin();
}

void loop(void) {
  u8g.firstPage(); 
  do {
    draw();
    Serial.println(printDate());
  } while( u8g.nextPage() );
  delay(5);
}

void draw(void) {

  u8g.setFont(u8g_font_4x6);
  u8g.setPrintPos(0, 6);
  int LineNumber = 0;

  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Temperatur View   "); 
  LineNumber++;
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Vorlauf   =+32 C |");
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Ruecklauf =+27 C |"); 
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Aussen    =- 3 C |"); 
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Solar     =+14 C |"); 
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("W.Wasser  =+40 C |"); 
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print("Licht     =" + (String)analogRead(7));
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print(printDate());
  LineNumber++;u8g.setPrintPos(0, 6*LineNumber);  u8g.print(count);
  count++;
}

String printDate(){
    // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

 
String DTString =(String)LeadZero(monthDay) + "/" +
(String)LeadZero(month) + "/" +
(String)LeadZero(year) + " " +
(String)LeadZero(hour) + ":" +
(String)LeadZero(minute) + ":" +
(String)LeadZero(second);
  return DTString;
}

byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void setDateTime( byte monthDay,byte month,byte year , byte hour,byte minute, byte second, byte weekDay){

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator

  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}

void setDateTime(){
  byte second =      00; //0-59
  byte minute =      17; //0-59
  byte hour =        23; //0-23
  byte weekDay =     2; //1-7
  byte monthDay =    01; //1-31
  byte month =       01; //1-12
  byte year  =       13; //0-99
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}

String LeadZero(int Number){
String ReturnNumber = (String)Number;
if (Number <= 9){
ReturnNumber = "0" + (String)Number;
}
//Serial.println(ReturnNumber);
return ReturnNumber;
}


... so an dieser Stelle brech ich mal ab...
Ich Dummdussel habe das Wire.begin() im Setup vergessen. (Ich schweige und versinke im Boden..)

Ich poste das Bild und den Code trotzdem, vielleicht Interessierts ja noch andere.

Vielen, vielen Dank für den Beistand, und gelernt habe ich trotzdem viel dabei..

Grüsse,
Gerrit
7  International / Deutsch / Re: RTC DS1307 & LCD 12864B mit SPT Modul (? ST7920) on: January 10, 2013, 03:07:27 pm
Okay soweit Ordnet sich das ein wenig bei mir.

Ich nehme mal an das das LCD-SPI dann wohl über die U8GLIB per Software Emuliert wird, denn wenn ich die Pins umkonfiguriere z.b.
Code:
U8GLIB_ST7920_128X64 u8g(30, 32, 31, U8G_PIN_NONE );// SPI Com: SCK = en = 30, MOSI = rw = 32, CS = di = 31
läuft das Display auch an diesen Pins.

Dann nehme ich auch mal an das I2C ebenso per Hardware fest liegt (Mega 20/21) & (Uno 4/5), denn wo anders läuft die RTC nicht, und lässt sich auch nicht stellen oder auslesen. würde dann auch erklären warum ich nirgends bei der <Wire.h> einen Pin definieren kann, sondern nur eine Adresse und auch keinen CS oder SS Pin am RTC Modul habe. Richtig?

Nun habe ich das LCD mal an folgende pins gehängt.
Code:
U8GLIB_ST7920_128X64 u8g(52, 51, 53, U8G_PIN_NONE );// SPI Com: SCK = en = 52, MOSI = rw = 51, CS = di = 53
MISO brauche ich wohl beim LCD eher weniger weil ich ja nur Daten an das Display sende, und den Pin hätte ich nun auch gar nicht auf dem LCD Modul.
Ja das LCD funktioniert auch an Pin 52,51,53.. smiley

Also sind I2C und SPI eigendlich komplett voneinander getrennte Wege? Dann müsste ich doch villeicht den Fehler eher in der Software suchen?
Ich dachte wenn das Display im einen Sketch funktioniert, aber die RTC nicht | Im anderen die RTC aber das Display nicht, das ich da villeicht was falsch verkabelt habe.

Sonst weis ich momentan auch nicht so ganz weiter...
Vielleicht Schlaf ich nochmal ne Nacht drüber.

8  International / Deutsch / RTC DS1307 & LCD 12864B mit SPT Modul (? ST7920) on: January 10, 2013, 12:34:31 pm
Hallo erstmal im Deutschsprachigen Teil, Super das es sowas gibt.

Ich habe da ein kleines Problem mit meiner RTC Uhr und meinem neu erworbenen Display. Ich kann sie zwar einzeln nutzen, aber leider irgendwie nicht zusammen.

Die RTC habe ich wie folgt an meinen Mega angeschlossen.
SQ -
DS -
SCL - Pin21
SDA - Pin20
VCC - +5V
GND - GND
Diese benötigt wohl die Wire.h.
Code:
#include "Wire.h"
#define DS1307_ADDRESS 0x68

Das LCD Modul habe ich über das SPT Modul Angeschlossen, und dort auch den kleinen switch von Paralel auf SPI umgestellt.
Nutze hierfür die U8GLib.
Code:
U8GLIB_ST7920_128X64 u8g(30, 32, 31, U8G_PIN_NONE );// SPI Com: SCK = en = 30, MOSI = rw = 32, CS = di = 31

SCK -> Pin30
CS -> Pin31
SID -> Pin32
VCC -> +5V
GND -> GND

Nun muss ich zugeben, das ich mittlerweile auch immer mehr mit den Kürzeln durcheinander komme, und vermute das beide Module irgendwie Kollidieren.
Ich dachte das die RTC ein I2C und das Display mit SPI Seriell angesprochen wird(Mich wundert dabei das ich keinen Hardware Port belegen muss, sondern die Pins frei Definieren kann Ohne Soft Serial zu verwenden.). Oder sind beides I2C Module, so das ich beide Module miteinander verbinden muss?

Also:
RTC_SCK - LCD_SCK -> Pin21
RTC_SDA - LCD_SID?? -> Pin20??
Wohin dann mit dem LCD_CS sowohl auch der RTC_DS der ja nirgends angeschlossen ist?
Warum kann ich die Pins für den I2C Bus nicht frei wählen, sondern müssen auf dem Pin20-SDA & Pin21-SCL beim Mega und 4/5 beim Uno sein?

Also wenn mir da jemand auf die Sprünge helfen könnte fände ich sehr nett.

Lieben Dank,
Gerrit
Pages: [1]