Show Posts
Pages: [1] 2 3 ... 34
1  International / Deutsch / Re: Intertechno Funksteckdosen mit Arduino ansteuern on: August 17, 2014, 01:36:57 pm
Hallo,
schau dir mal diese Projekt an, das sollte dir weiterhelfen.
https://code.google.com/p/rc-switch/wiki/HowTo_Send?tm=6
Gruß
Reinhard
2  International / Deutsch / Re: Serielle Kommunikation zwischen php und Arduino on: August 12, 2014, 11:22:59 am
Quote
Was scheint darin zu stecken
Na, das, was meine Frage war.
Quote
Jetzt möchte ich den Fehler abfangen, wenn der Arduino nicht angeschlossen ist, also die Schnittstelle /dev/ttyACM0 nicht existiert.
Nach dem Öffnen der Schnittstelle wird ein Fehlercode abgefragt
Code:
catch (phpSerialException $e) {
$this->_jsonError($e->getMessage());
die();
} catch (Exception $e) {
$this->_jsonError($e->getMessage());
die();
}

Quote
und was genau verstehst du am Code nicht ?

wie ich die Abfrage in meinen Code integrieren kann. Wär super, wenn du weiterhelfen kannst.
3  International / Deutsch / Re: Serielle Kommunikation zwischen php und Arduino on: August 11, 2014, 03:19:19 pm
mmh ...
irgendwie scheint das hier drin zu stecken, aber ich verstehe die Programmierung nicht. (https://github.com/JanStevens/ArduinoPi-Controller/blob/master/api/arduino_pi.class.php)
Code:
public function __construct($device)
{
// Setup the serial connection, call the parent constructor
try {
parent::__construct();
$this->deviceSet("/dev/rfcomm0");
$this->confBaudRate(115200);
$this->confParity("none");
$this->confCharacterLength(8);
$this->confStopBits(1);
$this->_setDevice($device);
} catch (phpSerialException $e) {
$this->_jsonError($e->getMessage());
die();
} catch (Exception $e) {
$this->_jsonError($e->getMessage());
die();
}
}


In Bezug auf das andere Beispiel: leider habe ich keine Ahnung von json
4  International / Deutsch / Re: Serielle Kommunikation zwischen php und Arduino on: August 10, 2014, 04:17:57 pm
Super, hört sich gut an.
Zusatz noch: das Ganze funktioniert nur wenn vorher die Arduino IDE die stty Einstellungen verändert hat. -ixon, -icanon und -echo scheinen die entscheidenden Einstellungen zu sein.
Muss mal sehen, ob ich das mit der Klasse setzen kann.
5  Topics / Science and Measurement / Re: Need help: SerialPort and PHP under Linux on: August 10, 2014, 03:33:03 pm
Hi,
are you sure that php (apache) is permitted to read the seriell interface ?
In Linux the user and group for apache ist www-data. You have to add this user to the group dialout.

6  International / Deutsch / Serielle Kommunikation zwischen php und Arduino on: August 10, 2014, 03:26:40 pm
Hallo,

ich habe einen Arduino über seriell mit meinem Linux Webserver verbunden. Die Kommunikation zwischen php und seriell funktioniert mit folgendem Beispielprogramm. Die Datei php_serial.class.php kommt von hier http://www.phpclasses.org/browse/file/17926.html
Code:
<?php
error_reporting
(E_ALL);
ini_set('display_errors''1');
include 
"php_serial.class.php";

$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->deviceOpen();
$serial->sendMessage("Hello!");
// usleep(50);
$read $serial->readPort();
echo 
"read_data ##- ".$read." -##</br>";

$serial->deviceClose();

echo 
"Message gesendet! \n\r";
?>


Momentan echo'ed der Arduino jedes Zeichen. Das funktioniert und die Antwort wird korrekt auf der Webseite dargestellt.

Jetzt möchte ich den Fehler abfangen, wenn der Arduino nicht angeschlossen ist, also die Schnittstelle /dev/ttyACM0 nicht existiert. Dazu finde ich keine Beispiele mit der php_serial.class.php. (über fopen bekomme ich das hin, aber das ist nicht das Ziel)
Wer kann helfen?

Gruß
Reinhard
7  International / Deutsch / Re: Atmega328 Power / Sleep mode on: August 04, 2014, 04:03:11 pm
Schau dir mal dieses Projekt an https://github.com/nathanchantrell/TinyTX/blob/master/TinyTX_DHT22/TinyTX_DHT22.ino
Hier wird die Sleep Funktion aus der JeeLib benutzt. Ich betreibe damit mehrere Funksensoren, funktioniert zuverlässig.
8  International / Deutsch / Re: Wetterstation mit Yahoo Wetterdaten baut keine Verbindung auf on: August 02, 2014, 12:58:29 pm
Hallo,

die eingetragene IP
Code:
IPAddress server(87,248,122,181);
lässt sich nicht pingen.
Ein wget unter der Adresse liefert
Code:
$ wget http://weather.yahooapis.com/forecastrss?w=12893459&u=c
[1] 4142
$ --2014-08-02 19:54:44--  http://weather.yahooapis.com/forecastrss?w=12893459
Auflösen des Hostnamen »weather.yahooapis.com (weather.yahooapis.com)«... 66.196.66.157, 66.196.66.212, 66.196.66.213, ...
Verbindungsaufbau zu weather.yahooapis.com (weather.yahooapis.com)|66.196.66.157|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK

Besser wäre es den Hostnamen einzutragen und nicht die IP.

Gruß
Reinhard
9  International / Deutsch / Re: Poti mit einem DAC ersetzen on: July 23, 2014, 03:06:12 am
Ich habe das Poti schon mal gegen ein SPI steuerbares Poti ersetzt (z.B. MCP4151): Hat prinzipiell funktioniert, man muss nur darauf achten, dass das SPI Poti nur max 5V verträgt.
Auf jeden Fall muss man darauf achten, dass der Baustein ohne Poti kaputt geht.

Gruß
Reinhard
10  International / Deutsch / Re: TTL auslesen (Quad 2-input NAND Schmitt trigger) on: July 10, 2014, 10:57:01 am
Hallo Stefan,

du kannst den Ausgang des NAND Gates direkt auf deinen Eingang des UNO legen.

Gruß
Reinhard
11  International / Deutsch / Re: RFM12B Arduino on: June 13, 2014, 05:18:29 pm
Hallo Jörg,
ist schon etwas her, aber das müsste der Sketch sein
Code:
/// Receive / decode OOK signals using a RFM12B as 434 MHz OOK receiver for K9010 temp/humidity sensor
//
// Adapted from the experiments and code by JGJ Veken, as posted on the wiki at:
// http://jeelabs.net/projects/cafe/wiki/Receiving_OOKASK_with_a_modified_RFM12B 
// and  Arduino sketch to receive KW9010 temperature/humidity RF sensor telegrams
// Written by 'jurs' for German Arduino Forum

#include <JeeLib.h>


#define RX433DATA 3       // receive pin for hardware interrupts
#define RX433INTERRUPT 1  // interrupt number for receive pin

#define KW9010_SYNC 8900  // length in µs of starting pulse
#define KW9010_ONE 4020   // length in µs of ONE pulse
#define KW9010_ZERO 1950  // length in µs of ZERO pulse
#define KW9010_GLITCH 350 // pulse length variation for ONE and ZERO pulses
#define KW9010_MESSAGELEN 36  // number of bits in one message



static void rf12_init_OOK ()
{
  /*0x8017,   http://www.mikrocontroller.net/attachment/80918/main.c
   0xC431,
   0xa608,
   0x94c2,
   0xC220,
   0x82D8,
   0xCA00,
   0xCC67,
   0xC623,
   0,
   0*/
  rf12_control(0x8017); // 8027    Configuration Settings: 433 Mhz; !TX; !RX FIFO; 12pF
  rf12_control(0x82D8); // 82C0    Power Management: enable receiver; enable basebandblock; enable synth; en cryst osc
  rf12_control(0xA608); // A68A    Frequency Setting: Fc =430+ F x0.0025MHz; F = 1544; 433,86 MHz
  rf12_control(0xC623); // C691    Data Rate: 9579 kbps 
  rf12_control(0x94c2); // 9489    Receiver Control: LNA Gain max; Pin VDI; RX BW 67kHz; VDI fast; DRSSI -91 db
  rf12_control(0xC220); // C220    Data Filter & Clock Recovery:  ** not documented cmd
  rf12_control(0xCA00); // CA00    FIFO and Reset Mode: FIFO full disabled
  rf12_control(0xC431); // C473    Automatic Frequency Control: AFC Auto OFF; enable AFC; offset register; +3 -4
  rf12_control(0xCC67); // CC67    PLL Settings: Clock rise low; PLL Band 256 kbps; !Dither;
  // rf12_control(0xB800); // TX register write command not used
  // rf12_control(0xC800); // Low Duty-Cycle: disable low dutycycle
  // rf12_control(0xC040); // Low Battery Detect and µC Clock: 1.66MHz, 2.2V not used see 82c0 
  // register calculator: http://tools.jeelabs.org/rfm12b.html
}


void setup () {
  Serial.begin(115200);
  pinMode(RX433DATA, INPUT);
  Serial.println(F("Sec\tCRC\tPak\tID\tChan\tTemp C\tTrend\trH %\tLowBat\tForced send"));
  rf12_initialize(0, RF12_868MHZ);
  rf12_init_OOK();
  attachInterrupt(RX433INTERRUPT, rx433Handler, CHANGE);
}

unsigned long lastread;
boolean pending=false;
unsigned long lastData;
int dataCounter=0;

void loop () {
  if (pending && millis()-lastread > 500) {   // es ist noch was zu drucken
    if (lastData!=0)         // letzten Datensatz drucken
    {
      Serial.print(millis()/1000);
      Serial.print(F("\tOK"));
      Serial.print(F("\t"));
      Serial.print(dataCounter);
      printResults(lastData);
      Serial.println(); 
      dataCounter=0;
      lastData=0;
    } 
    else
    { 
      Serial.print(F("F"));
      Serial.println(); 
    } 
    pending = false;
    lastData=0;
  }   
  if (fifoAvailable())  // es sind neue Daten da
  {
    unsigned long dataReceived=fifoRead();
    lastread=millis();              // Zeitpunkt des letzten Datensatzes
    if (dataReceived==lastData) {   // gleicher Datensatz
      dataCounter++;             // Anzahl gleicher Pakete
      pending=true;
    }
    else {                        //                           
      if (pending) {             // ungleicher Datensatz kam innerhalb 500ms und da war noch was zum printen
        if (lastData!=0)
        {
          Serial.print(millis()/1000);
          Serial.print(F("\tOK"));
          Serial.print(F("\t"));
          Serial.print(dataCounter);
          printResults(lastData);
          Serial.println(); 
          dataCounter=0;
          lastData=0;
        } 
        else
        { 
          Serial.print(F("F"));
          Serial.println(); 
        } 
        pending = false;
      }
      lastData=dataReceived;
      dataCounter++;
      pending=true;
    }
  }
}

void printResults(unsigned long value)
{
  // Sensor ID
  byte id = value & 0b11001111; // bit 0, 1, 2, 3, 6, 7, random change bits when battery is changed
  Serial.print('\t');
  Serial.print(id);
  // Channel (as set on sensor)
  byte channel = 2*bitRead(value,4)+bitRead(value,5); // bit 4, 5 are channel number
  Serial.print('\t');
  Serial.print(channel);
  // Temperature
  int temperature = value>>12 & 0b111111111111;  // bit 12..23
  // if sign bit is set, adjust two's complement to fit a 16-bit number
  if (bitRead(temperature,11)) temperature= temperature | 0b1111000000000000;
  Serial.print('\t');
  Serial.print(temperature/10.0,1);
  // temperature tendency
  byte trend = value>>9 &0b11; // bit 9, 10
  Serial.print('\t');
  if (trend==0) Serial.print('=');       // temp tendency steady
  else if (trend==1) Serial.print('-');  // temp tendency falling
  else if (trend==2) Serial.print('+');  // temp tendency rising
  // Humidity
  byte humidity = (value>>24 & 0b11111111) - 156; // bit 24..31
  Serial.print('\t');
  Serial.print(humidity);
  // Battery State
  bool lowBat = value>>8 & 0b1;      // bit 8 is set if battery voltage is low
  Serial.print('\t');
  Serial.print(lowBat);
  // Trigger
  bool forcedSend = value>>11 &0b1;  // bit 11 is set if manual send button was pressed
  Serial.print('\t');
  Serial.print(forcedSend);
}

boolean crcValid(unsigned long value, byte checksum)
// check if received crc is correct for received value
{
  byte calculatedChecksum = 0;
  for (int i = 0 ; i < 8 ; i++) calculatedChecksum +=(byte)(value >> (i*4));
  calculatedChecksum &= 0xF;
  return calculatedChecksum == checksum;
}

void rx433Handler()
{
  static long rx433LineUp, rx433LineDown;
  static unsigned long rxBits=0;
  static byte crcBits=0;
  static byte bitsCounted=0;
  long LowVal, HighVal;
  byte rx433State = digitalRead(RX433DATA); // current pin state
  if (rx433State) // pin is now HIGH
  {
    rx433LineUp=micros(); // line went HIGH after being LOW at this time
    LowVal=rx433LineUp - rx433LineDown; // calculate the LOW pulse time
    if (LowVal>KW9010_SYNC-2*KW9010_GLITCH && LowVal<KW9010_SYNC+2*KW9010_GLITCH)
    {
      rxBits=0;
      crcBits=0;
      bitsCounted=0;
    }
    else if (LowVal>KW9010_ONE-KW9010_GLITCH && LowVal<KW9010_ONE+KW9010_GLITCH)
    { // set the one bits
      if (bitsCounted<32)
        bitSet(rxBits,bitsCounted);
      else 
        bitSet(crcBits,bitsCounted-32);
      bitsCounted++;
    }
    else if (LowVal>KW9010_ZERO-KW9010_GLITCH && LowVal<KW9010_ZERO+KW9010_GLITCH)
    { // setting zero bits is not necessary, but count them
      bitsCounted++;
    }
    else // received bit is not a SYNC, ONE or ZERO bit, so restart
    {
      rxBits=0;
      crcBits=0;
      bitsCounted=0;
    }
    if (bitsCounted>=KW9010_MESSAGELEN) // all bits received
    {
      if (crcValid(rxBits,crcBits)) fifoWrite(rxBits); // write valid value to FIFO buffer
      else fifoWrite(0);  // write 0 to FIFO buffer (0 = invalid value received)
      rxBits=0;
      crcBits=0;
      bitsCounted=0;
    }
  }
  else
  { // High values have no information with them
    rx433LineDown=micros(); // line went LOW after being HIGH
    HighVal=rx433LineDown - rx433LineUp; // calculate the HIGH pulse time
  }
}


#define FIFOSIZE 8  // Fifo Buffer size 8 can hold up to 7 items
volatile long fifoBuf[FIFOSIZE]; // ring buffer
volatile byte fifoReadIndex,fifoWriteIndex;  // read and write index into ring buffer

void fifoWrite(long item)
// write item into ring buffer
{
  fifoBuf[fifoWriteIndex]=item; // store the item
  if (!(fifoWriteIndex+1==fifoReadIndex || (fifoWriteIndex+1>=FIFOSIZE && fifoReadIndex==0)))
    fifoWriteIndex++;  // advance write pointer in ringbuffer
  if (fifoWriteIndex>=FIFOSIZE) fifoWriteIndex=0; // ring buffer is at its end
}


unsigned long fifoRead()
// always check first if item is available with fifoAvailable()
// before reading the ring buffer using this function
{
  unsigned long item;
  item=fifoBuf[fifoReadIndex];
  cli(); // Interrupts off while changing the read pointer for the ringbuffer
  fifoReadIndex++;
  if (fifoReadIndex>=FIFOSIZE) fifoReadIndex=0;
  sei(); // Interrupts on again
  return(item);


boolean fifoAvailable()
// item is available for reading if (fifoReadIndex!=fifoWriteIndex)
{
  return (fifoReadIndex!=fifoWriteIndex);
}

Gruß
Reinhard
12  International / Deutsch / Re: RFM12b und Arduno Mega 2560 wie? :( on: May 28, 2014, 03:12:53 pm
Hallo,
wenn du den Spannungsteiler nicht korrekt auf 3,3V einstellst, kann es sein, dass du den RFM12B zerstörst. Wenn du nur einen 15k auf GND hast und keinen 4,7k ist das nur ein PullDown und kein Spannungsteiler, und du gibst 5V auf die Eingänge des RFM12B. Funktionieren tut der, frag sich nur wie lange ....
13  International / Deutsch / Re: RFM12b und Arduno Mega 2560 wie? :( on: May 27, 2014, 04:59:48 pm
Quote
Aber anstelle der 10k+4.7K wiederstände habe ich 15k genommen (habe momentan keine 4.7k)
Was heißt das: anstelle des 4,7k hast du 15k genommen? Oder nur einen einzelnen 15k?
Ansonsten ist die Verschaltung der Signalleitungen korrekt.
IRQ hast du auch auf  PIN2 gelegt?
14  International / Deutsch / Re: Tutorial - Messdaten auf Webspace ablegen und grafisch darstellen on: May 25, 2014, 11:10:20 am
Hallo,
nach den fehlgeschlagenen Versuchen von Ingo und Scherheinz, habe ich den Code nochmal kontrolliert. Es fehlte eine Zeile. Im Blog habe ich es korrigiert. Die mittlere Zeile fehlte
Code:
$mysql_pw = "<hier MySQL Passwort eintragen>";
$connection = mysql_connect($mysql_host, $mysql_user, $mysql_pw) or die("Verbindung zur Datenbank fehlgeschlagen.");
mysql_select_db($mysql_db, $connection) or die("Datenbank konnte nicht ausgewaehlt werden.");

@jomelo
ist mir schon klar, dass es hier Nachholbedarf gibt. Mit dem Thema muss ich mich noch beschäftigen. Wird dann vielleicht der nächste Blogpost.

Gruß
Reinhard
15  International / Deutsch / Re: Tutorial - Messdaten auf Webspace ablegen und grafisch darstellen on: May 25, 2014, 10:30:02 am
Hallo Ingo,

nein, da muss nichts umgestellt werden. Die Daten werden beim Einlesen in die korrekte Form gebracht.
Hast du die Datenbankabfrage 1:1 übernommen?
Hast du du den dygraph-combined.js File auf den Webspace abgelegt?
Zugangsdaten zur Datenbank korrekt gesetzt?
Gibt es eine Fehlermeldung? Wird der Grafikbereich leer angezeigt?
Welcher Browser?

Es gibt eine Möglichkeit, den Fehler einzugrenzen. Wenn du im Firefox die Entwicklerwerkzeuge einschaltest, kannst du sehen, was an die dygraphs Funktion übergeben wird. Ich hänge mal einen Screenshot Ausschnitt an, wie das aussieht.
Du kannst mir auch den Link mal per pn senden, wenn der Webspace öffentlich zugänglich ist. Vielleicht sehe ich was.

Gruß
Reinhard
Pages: [1] 2 3 ... 34