KY-035 Bihor Magnet Sensor Modul: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
Zeile 9: Zeile 9:
  
 
==Codebeispiel Arduino==
 
==Codebeispiel Arduino==
<pre class="brush:cpp">/*
+
Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.
KY-035 Hall analog sensor
+
*/
+
  
int sensorPin = A5;   // select the input pin
+
<pre class="brush:cpp">int sensorPin = A5; // Hier wird der Eingangs-Pin deklariert
int ledPin = 13;      // select the pin for the LED
+
int sensorValue = 0;  // variable to store the value coming from the sensor
+
  
void setup () {
+
// Serielle Ausgabe in 9600 Baud
pinMode (ledPin, OUTPUT);
+
void setup()
Serial.begin (9600);
+
{
 +
Serial.begin(9600);
 
}
 
}
  
void loop () {
+
// Das Programm misst den aktuellen Spannungswert am Sensor,
sensorValue = analogRead (sensorPin);
+
// berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen
digitalWrite (ledPin, HIGH);
+
// Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus
delay (sensorValue);
+
 
digitalWrite (ledPin, LOW);
+
void loop()
delay (sensorValue);
+
{    
Serial.println (sensorValue, DEC);
+
        // Aktueller Spannungswert wird gemessen...
 +
int rawValue = analogRead(sensorPin);
 +
        float voltage = rawValue * (5.0/1023) * 1000;
 +
       
 +
        float resitance = 10000 * ( voltage / ( 5000.0 - voltage) );
 +
       
 +
// ... und hier auf die serielle Schnittstelle ausgegeben
 +
Serial.print("Spannungswert:"); Serial.print(voltage); Serial.print("mV");
 +
Serial.print(", Widerstandswert:"); Serial.print(resitance); Serial.println("Ohm");
 +
Serial.println("---------------------------------------");
 +
 
 +
delay(500);
 
}
 
}
 +
 
</pre>
 
</pre>
 +
 +
'''Anschlussbelegung Arduino:'''
 +
 +
{| style="height: 58px; padding-left: 30px;" width="228"
 +
|-
 +
||Sensor GND
 +
||=
 +
||[Pin GND]
 +
|-
 +
||Sensor +V
 +
||=
 +
||[Pin 5V]
 +
|-
 +
||Sensor Signal
 +
||=
 +
||[Pin A5]
 +
|}
 +
 +
'''Beispielprogramm Download'''
 +
 +
[[Medium:Single_Analog_Sensor.zip|Single_Analog_Sensor.zip]]
  
 
==Codebeispiel Raspberry Pi==
 
==Codebeispiel Raspberry Pi==
Programmierbeispiel in der Programmiersprache Python
+
<span style="color: #ff6600;">!! <span style="color: #ff0000;">Achtung</span> !! <span style="color: #99cc00;">Analoger Sensor</span>  !! <span style="color: #ff0000;">Achtung</span> !!</span>
  
<pre class="brush:py"># Benoetigte Module werden importiert und eingerichtet
+
Der Raspberry Pi besitzt im Gegensatz zum Arduino keine analogen Eingänge bzw. es ist kein ADC (analog digital Converter) im Chip des Raspberry Pi's integriert. Dies schränkt den Raspberry Pi ein, wenn man Sensoren einsetzen möchte, wo nicht digital Werte ausgegeben werden [Spannungswert überschritten -> digital EIN | Spannungswert unterschritten -> digital AUS | Beispiel: Knopf gedrückt [<span style="color: #99cc00;">EIN</span>] Knopf losgelassen [<span style="color: #ff0000;">AUS</span>]], sondern es sich hier um einen kontinuierlichen veränderlichen Wert handeln sollte (Beispiel: Potentiometer -> Andere Position = Anderer Spannungswert)
import RPi.GPIO as GPIO
+
import time
+
  
 +
Um diese Problematik zu umgehen, besitzt unser ''Sensorkit X40'' mit dem '''KY-053''' ein Modul mit 16 Bit genauen ADC, welches Sie am Raspberry nutzen können, um diesen um 4 analoge Eingänge erweitern zu können. Dieses wird per I2C an den Raspberry Pi angeschlossen, übernimmt die analoge Messung und gibt den Wert digital an den Raspberry Pi weiter.
 +
 +
Somit empfehlen wir, bei analogen Sensoren dieses Sets das KY-053 Modul mit dem besagten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum [[KY-053 Analog Digital Converter|'''KY-053'''   Analog Digital Converter]]
 +
 +
<span style="color: #ff6600;">!! <span style="color: #ff0000;">Achtung</span> !! <span style="color: #99cc00;">Analoger Sensor</span>  !! <span style="color: #ff0000;">Achtung</span> !!</span>
 +
 +
Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries der Firma Adafruit. Diese wurden unter dem folgenden Link [[https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]] unter der BSD-Lizenz [[https://opensource.org/licenses/BSD-3-Clause Link]] veröffentlicht. Die benötigten Libraries sind im unteren Download-Paket enthalten.
 +
 +
Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.
 +
 +
<pre class="brush:py">
 +
# coding=utf-8
 +
#!/usr/bin/python
 +
 +
 +
#############################################################################################################
 +
### Copyright by Joy-IT
 +
### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
 +
### Commercial use only after permission is requested and granted
 +
###
 +
### Single Analog Sensor - Raspberry Pi Python Code Example
 +
###
 +
#############################################################################################################
 +
 +
 +
# Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi
 +
# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht
 +
# [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]
 +
from Adafruit_ADS1x15 import ADS1x15
 +
from time import sleep
 +
 +
# Weitere benoetigte Module werden importiert und eingerichtet
 +
import time, signal, sys, os, math
 +
import RPi.GPIO as GPIO
 
GPIO.setmode(GPIO.BCM)
 
GPIO.setmode(GPIO.BCM)
 +
GPIO.setwarnings(False)
  
# Hier wird der Eingangs-Pin deklariert, an dem der Sensor angeschlossen ist
+
# Benutzte Variablen werden initialisiert
GPIO_PIN = 24
+
delayTime = 0.2
GPIO.setup(GPIO_PIN, GPIO.IN)
+
voltageMax = 3300 # maximal möglicher Spannungswert am ADC
  
print "KY-003 Test [druecken Sie STRG+C, um den Test zu beenden]"
+
# Adresszuweisung ADS1x15 ADC
  
# Diese AusgabeFunktion wird bei Signaldetektion ausgefuehrt
+
ADS1015 = 0x00  # 12-bit ADC
def ausgabeFunktion(null):
+
ADS1115 = 0x01  # 16-bit
        print("Signal erkannt")
+
  
# Beim Detektieren eines Signals (fallende Signalflanke) wird die Ausgabefunktion ausgeloest
+
# Verstaerkung (Gain) wird ausgewaehlt
GPIO.add_event_detect(GPIO_PIN, GPIO.FALLING, callback=ausgabeFunktion, bouncetime=100)
+
gain = 4096  # +/- 4.096V
 +
# gain = 2048  # +/- 2.048V
 +
# gain = 1024  # +/- 1.024V
 +
# gain = 512  # +/- 0.512V
 +
# gain = 256  # +/- 0.256V
  
 +
# Abtasterate des ADC (SampleRate) wird ausgewaehlt
 +
# sps = 8    # 8 Samples pro Sekunde
 +
# sps = 16  # 16 Samples pro Sekunde
 +
# sps = 32  # 32 Samples pro Sekunde
 +
# sps = 64  # 64 Samples pro Sekunde
 +
# sps = 128  # 128 Samples pro Sekunde
 +
sps = 250  # 250 Samples pro Sekunde
 +
# sps = 475  # 475 Samples pro Sekunde
 +
# sps = 860  # 860 Samples pro Sekunde
 +
 +
# ADC-Channel (1-4) wird ausgewaehlt
 +
adc_channel = 0    # Channel 0
 +
# adc_channel = 1    # Channel 1
 +
# adc_channel = 2    # Channel 2
 +
# adc_channel = 3    # Channel 3
 +
 +
# Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatz
 +
adc = ADS1x15(ic=ADS1115)
 +
 +
#############################################################################################################
 +
 +
# ########
 
# Hauptprogrammschleife
 
# Hauptprogrammschleife
 +
# ########
 +
# Das Programm misst mit Hilfe des ADS1115 ADC den aktuellen Spannungswert am ADC, berechnet aus diesem
 +
# und den bekannten Widerstandswert des Serien-Vorwiderstands den aktuellen Widerstandwert des Sensors
 +
# und gibt diese in der Konsole aus.
 +
 
try:
 
try:
 
         while True:
 
         while True:
                 time.sleep(1)
+
                #Aktueller Wert wird aufgenommen,...
 +
                voltage = adc.readADCSingleEnded(adc_channel, gain, sps)
 +
 
 +
                # ... der Widerstand wird berechnet...
 +
                resitance = 10000 * voltage/(voltageMax - voltage)
 +
 
 +
                # ... und beides hier in die Konsole ausgegeben
 +
                print "Spannungswert:", voltage,"mV, Widerstand:", resitance,"Ω"
 +
                print "---------------------------------------"
 +
 
 +
                # Delay
 +
                 time.sleep(delayTime)
 +
 
 +
 
  
# Aufraeumarbeiten nachdem das Programm beendet wurde
 
 
except KeyboardInterrupt:
 
except KeyboardInterrupt:
 
         GPIO.cleanup()
 
         GPIO.cleanup()
  
 
</pre>
 
</pre>
 +
 
'''Anschlussbelegung Raspberry Pi:'''
 
'''Anschlussbelegung Raspberry Pi:'''
  
{| style="height: 58px; padding-left: 30px;" width="228"
+
Sensor
 +
 
 +
{| style="height: 85px; padding-left: 30px;" width="441"
 
|-
 
|-
||Signal
+
||GND
 
||=
 
||=
||GPIO24
+
||GND
||[Pin 18]
+
||[Pin 06 (RPi)]
 
|-
 
|-
 
||+V
 
||+V
 
||=
 
||=
 
||3,3V
 
||3,3V
||[Pin 1]
+
||[Pin 01 (RPi)]
 +
|-
 +
||analoges Signal
 +
||=
 +
||Analog 0
 +
||[Pin A0 (ADS1115 - KY-053)]
 +
|}
 +
 
 +
ADS1115 - KY-053:
 +
 
 +
{| style="height: 127px; padding-left: 30px;" width="436"
 +
|-
 +
||VDD
 +
||=
 +
||3,3V
 +
||[Pin 17]
 
|-
 
|-
 
||GND
 
||GND
 
||=
 
||=
 
||Masse
 
||Masse
||[Pin 6]
+
||[Pin 09]
 +
|-
 +
||SCL
 +
||=
 +
||GPIO03 / SCL
 +
||[Pin 05]
 +
|-
 +
||SDA
 +
||=
 +
||GPIO02 / SDA
 +
||[Pin 03]
 +
|-
 +
||A0
 +
||=
 +
||s.o.
 +
||[Sensor: analoges Signal]
 
|}
 
|}
  
 
'''Beispielprogramm Download'''
 
'''Beispielprogramm Download'''
  
'''[[Medium:KY-003.zip|KY-003.zip]]'''
+
[[Medium:RPi_Single_Analog_Sensor.zip|RPi_Single_Analog_Sensor.zip]]
  
 
Zu starten mit dem Befehl:
 
Zu starten mit dem Befehl:
  
<pre class="brush:bash">sudo python KY-003.py
+
<pre class="brush:bash">sudo python RPi_Single_Analog_Sensor.py
 
</pre>
 
</pre>

Version vom 8. April 2016, 12:50 Uhr

Bild

KY-0035.png

Technische Daten / Kurzbeschreibung

Chipsatz: AH49EDer Sensor gibt über seinen Ausgang ein analoges Spannungssignal, welches die Stärke des Magnetfelds angibt.

Pin-Belegung

3 S V G.png

Codebeispiel Arduino

Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.

int sensorPin = A5; // Hier wird der Eingangs-Pin deklariert

// Serielle Ausgabe in 9600 Baud
void setup()
{
	Serial.begin(9600);
}

// Das Programm misst den aktuellen Spannungswert am Sensor,
// berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen
// Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus

void loop()
{      
        // Aktueller Spannungswert wird gemessen...
	int rawValue = analogRead(sensorPin);
        float voltage = rawValue * (5.0/1023) * 1000;
        
        float resitance = 10000 * ( voltage / ( 5000.0 - voltage) );
        
	// ... und hier auf die serielle Schnittstelle ausgegeben
	Serial.print("Spannungswert:");	Serial.print(voltage); Serial.print("mV");
	Serial.print(", Widerstandswert:"); Serial.print(resitance); Serial.println("Ohm");
	Serial.println("---------------------------------------");

	delay(500);
}

Anschlussbelegung Arduino:

Sensor GND = [Pin GND]
Sensor +V = [Pin 5V]
Sensor Signal = [Pin A5]

Beispielprogramm Download

Single_Analog_Sensor.zip

Codebeispiel Raspberry Pi

!! Achtung !! Analoger Sensor  !! Achtung !!

Der Raspberry Pi besitzt im Gegensatz zum Arduino keine analogen Eingänge bzw. es ist kein ADC (analog digital Converter) im Chip des Raspberry Pi's integriert. Dies schränkt den Raspberry Pi ein, wenn man Sensoren einsetzen möchte, wo nicht digital Werte ausgegeben werden [Spannungswert überschritten -> digital EIN | Spannungswert unterschritten -> digital AUS | Beispiel: Knopf gedrückt [EIN] Knopf losgelassen [AUS]], sondern es sich hier um einen kontinuierlichen veränderlichen Wert handeln sollte (Beispiel: Potentiometer -> Andere Position = Anderer Spannungswert)

Um diese Problematik zu umgehen, besitzt unser Sensorkit X40 mit dem KY-053 ein Modul mit 16 Bit genauen ADC, welches Sie am Raspberry nutzen können, um diesen um 4 analoge Eingänge erweitern zu können. Dieses wird per I2C an den Raspberry Pi angeschlossen, übernimmt die analoge Messung und gibt den Wert digital an den Raspberry Pi weiter.

Somit empfehlen wir, bei analogen Sensoren dieses Sets das KY-053 Modul mit dem besagten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum KY-053   Analog Digital Converter

!! Achtung !! Analoger Sensor  !! Achtung !!

Das Programm nutzt zur Ansteuerung des ADS1115 ADC die entsprechenden ADS1x15 und I2C Python-Libraries der Firma Adafruit. Diese wurden unter dem folgenden Link [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code] unter der BSD-Lizenz [Link] veröffentlicht. Die benötigten Libraries sind im unteren Download-Paket enthalten.

Das Programm misst den aktuellen Spannungswert am Sensor, berechnet aus diesen und dem bekannten Serienwiderstand den aktuellen Widerstandswert des Sensors und gibt die Ergebnisse auf der serielle Ausgabe aus.

# coding=utf-8
#!/usr/bin/python


#############################################################################################################
### Copyright by Joy-IT
### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
### Commercial use only after permission is requested and granted
###
### Single Analog Sensor - Raspberry Pi Python Code Example
###
#############################################################################################################


# Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi
# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht
# [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]
from Adafruit_ADS1x15 import ADS1x15
from time import sleep

# Weitere benoetigte Module werden importiert und eingerichtet
import time, signal, sys, os, math
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# Benutzte Variablen werden initialisiert
delayTime = 0.2
voltageMax = 3300 # maximal möglicher Spannungswert am ADC

# Adresszuweisung ADS1x15 ADC

ADS1015 = 0x00  # 12-bit ADC
ADS1115 = 0x01  # 16-bit

# Verstaerkung (Gain) wird ausgewaehlt
gain = 4096  # +/- 4.096V
# gain = 2048  # +/- 2.048V
# gain = 1024  # +/- 1.024V
# gain = 512   # +/- 0.512V
# gain = 256   # +/- 0.256V

# Abtasterate des ADC (SampleRate) wird ausgewaehlt
# sps = 8    # 8 Samples pro Sekunde
# sps = 16   # 16 Samples pro Sekunde
# sps = 32   # 32 Samples pro Sekunde
# sps = 64   # 64 Samples pro Sekunde
# sps = 128  # 128 Samples pro Sekunde
sps = 250  # 250 Samples pro Sekunde
# sps = 475  # 475 Samples pro Sekunde
# sps = 860  # 860 Samples pro Sekunde

# ADC-Channel (1-4) wird ausgewaehlt
adc_channel = 0    # Channel 0
# adc_channel = 1    # Channel 1
# adc_channel = 2    # Channel 2
# adc_channel = 3    # Channel 3

# Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatz
adc = ADS1x15(ic=ADS1115)

#############################################################################################################

# ########
# Hauptprogrammschleife
# ########
# Das Programm misst mit Hilfe des ADS1115 ADC den aktuellen Spannungswert am ADC, berechnet aus diesem
# und den bekannten Widerstandswert des Serien-Vorwiderstands den aktuellen Widerstandwert des Sensors
# und gibt diese in der Konsole aus.

try:
        while True:
                #Aktueller Wert wird aufgenommen,...
                voltage = adc.readADCSingleEnded(adc_channel, gain, sps)

                # ... der Widerstand wird berechnet...
                resitance = 10000 * voltage/(voltageMax - voltage)

                # ... und beides hier in die Konsole ausgegeben
                print "Spannungswert:", voltage,"mV, Widerstand:", resitance,"Ω"
                print "---------------------------------------"

                # Delay
                time.sleep(delayTime)



except KeyboardInterrupt:
        GPIO.cleanup()

Anschlussbelegung Raspberry Pi:

Sensor

GND = GND [Pin 06 (RPi)]
+V = 3,3V [Pin 01 (RPi)]
analoges Signal = Analog 0 [Pin A0 (ADS1115 - KY-053)]

ADS1115 - KY-053:

VDD = 3,3V [Pin 17]
GND = Masse [Pin 09]
SCL = GPIO03 / SCL [Pin 05]
SDA = GPIO02 / SDA [Pin 03]
A0 = s.o. [Sensor: analoges Signal]

Beispielprogramm Download

RPi_Single_Analog_Sensor.zip

Zu starten mit dem Befehl:

sudo python RPi_Single_Analog_Sensor.py