Aufpassen: Es werden zwei ähnliche Module abgeboten. Der hier beschriebene HC-SR04 hat 4 Pins. 5V GND Trig und Masse.

HC-SR04

  1. Betriebspannung: 5V DC
  2. Ruhestromt: <2mA
  3. Abstrahlwinkel: <15°
  4. Messbereich: 2cm – 500 cm
  5. Auflösung: 1 cm
  6. Ultrasonic Frequency: 40kHz

Auf de Arduino Seiten findet man ohne grosses suchen einen Anschlussplan und einen Test-Sketch der Entfernung misst und über serialPrint ausgibt

Wer schon in den Exampels rum gesucht hat wird wird auch das Progrämmchen zur Tonerzugung gefunden haben. Es wäre doch mal eine schöne Aufgabe den Rückwärtspiepser zu programmieren.

 

hc-sr04diagramm

Die Funktion ist anhand des Zeitdiagramms leicht zu verstehen.

  • Setzte den "Trigger Pin" am Sensor für 10µs auf high. Dadurch wird die Sensorfunktion gestartet.
  • 8 40kHz Impulse werden gesendet Der Echopin geht nach dem senden von low auf high.
  • Der 40Khz Ton wird vom nächsten Objekt Refelktiert.
  • Wenn der Sensor ein Echo empfängt wechselt der "Echopin" auf Low.
  • Die Distance zum Object wird aus der länge der Zeit berechent in der der Echopin high ist.
  • Wird er Ton nicht von einem Hindernis reflektiert. Dann geht der Echopin nach 38ms auf low. (Timeout)




     
 

Luftfeuchtigkeit messen mit dem dem DHT11,

ist eigentlich ganz einfach da das ganze handling und timig von einer Libary ausgeführt wird. Die Libary benennt die Pins etwas anders. Der Pin 15 im Scetch ist tatsächlich A1 am Arduino.

anschluss

Der Anschluss ist ganz einfach.

Hier der fertige Scetch mit LCD und Ausgabe aufs Terminal. Ganz einfach da hier eine Libary (von Ladyada) verwendet wird.

Der Widerstand wird auf einigen Seiten auch mit kleineren Werten angeben. Bei mir funzt es nur mit 10kOhm.

 

#include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library
#define DHTPIN 15 // benutzter ARDUINO-Pin (Analog-Pin 1)

#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8,4,5,6,7); // diese Pins werden für das Display benötigt.

#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
Serial.begin(9600);
Serial.println("DHT11-Test");

lcd.clear(); // LCD loeschen
lcd.begin(16, 2); // fuer LCD1602
dht.begin();
}

void loop() {
// Das Erfassen von Temperatur und Luftfeuchtigkeit benoetigt ca. 250 Millisekunden.
float h = dht.readHumidity();
float t = dht.readTemperature();

// Check, ob die Daten Zahlen sind, falls nicht (NaN: not a number), ist was falsch gelaufen!
if (isnan(t) || isnan(h))
{
Serial.println("Fehler beim Lesen vom DHT-Sensor");
}
else
{

Serial.print("Feuchtigkeit: ");
Serial.print(h);
Serial.print(" %\t ");
Serial.print("Temperatur: ");
Serial.print(t);
Serial.println(" Grad Celsius");

lcd.setCursor(0,0);
lcd.print("Feuchtigk.:");
lcd.print(h);
lcd.setCursor(0,1);
lcd.print("Temperatur:");
lcd.print(t);

}
}

 

Vergest den Beitrag nehmt einen EPS8266 oder Wemos D1 mini. Alles drauf billiger und läuft in der ArduinoIDE

Mit Arduino ins Netzwerk oder sogar ins Internet kein Problem.

In den Beisplielen muss lediglich die IP-Adresse an Euer Netzwerk angepasst werden.
Auch die MAC-Adresse wird über das Programm gesetzt (Das hat mich überrascht). Es muss darauf geachtet werden, das sie genau wie die IP nicht schon mal im Netztwerk existiert.
In den Examples unter Ethernet ist das Programm "Webserver"  Es gibt den Wert der Analogschnittstellen  in HTML aus.
Weiterhin in den Examples unter SD ein Programm, mit dem sich die SD-Karte (nicht im Lieferunfang) testen lässt.
Ethernetshield für Arduino


Hier vorab ein Programm mit dem sich ein Led an Digital 8 ein und ausschalten lässt.  Die Libary ist in dem Standarddownload von der Arduinoseite enthalten. 

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);

EthernetServer server(80);

void setup()
{
  Serial.begin(9600);    
  pinMode(8, OUTPUT);    
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
 
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer = "";  
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);   
        buffer+=c;       
        if (c == '\n' && currentLineIsBlank) {
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          if (digitalRead(8)){  
            client.print(" LED is <font color='red'>OFF</font>");
          }else{
            client.print(" LED is <font color='green'>ON</font>");
          }
          client.println("<br />");
          
          
          client.print("<FORM action=\"http://192.168.1.177\" >");
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"0\">Off");
          client.print("<P> <INPUT type=\"radio\" name=\"status\" value=\"1\">On");
          client.print("<P> <INPUT type=\"submit\" value=\"Submit\"> </FORM>");
            
          break;
        }
        if (c == '\n') {
          
          currentLineIsBlank = true;
          buffer="";       
        } else if (c == '\r') {            
          if(buffer.indexOf("GET /?status=0")>=0)
            digitalWrite(8,HIGH);  
          
          if(buffer.indexOf("GET /?status=1")>=0)
            digitalWrite(8,LOW);  
        }
        else {
          
          currentLineIsBlank = false;
        }
      }
    }
    
    delay(1);
    
    client.stop();
  }
}

Das Funktioniert im lokalem Netztwerk. Um den Zugriff übers Internet zu ermöglichen muss der Port ( meistens) 80 auf die dem Ethershield zugeordnete IP-Adresse geroutet werden. Findet man bei einigen Routern unter Firewalleinstellungen oder virtuell Server.
Da die meisten von Euch ja die öffentliche IP-Adresse von Ihrem Provider dynamisch zugewiesen bekommen, muss hier auch noch Dyn Dns aktiviert werden.

Leider ist der amerikanische DynDns.org nicht mehr kostenlos.
Wenn ich eine Lösung gefunden habe teile ich das hier mit.

 

 

 

 

Ethershield 1.1 Yes it works.

Es wird noch ein anderes Ethershield angeboten für das es eine andere Libary gibt.

#include "etherShield.h"
#include "ETHER_28J60.h"

static uint8_t mac[6] = {
  0x54, 0x55, 0x58, 0x10, 0x00, 0x24};                                                     
static uint8_t ip[4] = {
  192, 168, 1,15};
static uint16_t port = 80;

ETHER_28J60 e;
int ledPin = 5;
void setup()


{
  pinMode(ledPin, OUTPUT);
  e.setup(mac, ip, port);
  analogReference(INTERNAL);
  Serial.begin(9600);
}

void loop()
{
  float analog = analogRead(0);
  float temp = (analog * 1.1/1024*100);
  delay(10);
  char celsius[4];
  dtostrf(temp,4,1,(celsius));


  if (e.serviceRequest())
  {
    e.print("<html><head><title>Temperatur TEST</title><meta http-equiv='Refresh' content='1'></head><body>");
    e.print("<h2><center>Temperatur in Celsius: ");
   
    e.print (celsius);
    e.print("<br>");
    e.print("<br>LED ein bei 26");
    if (temp >= 26) {
      digitalWrite(ledPin,HIGH);
      e.print("<br><img src='http://ebay.jkrumm.de/lichtan.png'></img>");
      }
    else {
      digitalWrite(ledPin,LOW);
      e.print("<br><img src='http://ebay.jkrumm.de/lichtaus.png'></img>");
          
    }
    e.respond();
  }
  if (temp >= 26) {
    digitalWrite(ledPin,HIGH);
  }
  else {
    digitalWrite(ledPin,LOW);
  }


  delay(10);
}


 

 

Hier ein Sketch der einen LM35 auswertet, abhängig von der Temperatur ein Led ein und ausschaltet.

 

 

 

 

 

 

 

 

 

smr200

 

Login Form