====== Bauteile ======
Allerlei Bauteile aus meiner [[Hardwarekiste]].
===== 5 Wege Schalter - 5 Way Switch =====
{{:schule:hardware:5way_switch.jpg?direct&300|}}
===== 7-Segment-Anzeige =====
{{:schule:hardware:7segment_front.jpg?direct&300|}}
{{:schule:hardware:7segment_back.jpg?direct&300|}}
Vier-stellige 7-Segmentanzeige mit einem [[https://www.mcielectronics.cl/website_MCI/static/documents/Datasheet_TM1637.pdf|TM1637]] Displaytreiber. Informationen von der Herstellerseite:
>The module is a 12-foot clock with 4 points of positive digital (0.36 inches) display module driver IC TM1637, only two signal lines can make SCM four 8-segment LED.
>
>Module features are as follows:
>
> Display of male red for the four digital tube
> Adjustable digital tube 8 gray
> Level control interface for 5V or 3.3V
> 4 M2 screws positioning holes for easy installation
>
> Control Interface: A total of four pins (GND, VCC, DIO, CLK), GND to ground, VCC is the power supply, DIO of data input and output pin, CLK is the clock signal pin;
>
> Digital tube: 4 common anode score points with 0.36 inches LED, red highlights;
>
> Positioning holes: 4 M2 screws positioning hole diameter is 2.2mm, the positioning of the module is easy to install, to achieve inter-module combination;
Mit [[https://github.com/lawerencem/raspberrypi-python-tm1637|raspberry-pi-python-tm1637]] existiert eine Bibliothek für die Ansteuerung mit einem Raspberry Pi und Python.
===== AD633 Analog-Multiplizierer =====
{{:schule:hardware:ad633.jpg?direct&300|}}
{{:schule:hardware:ad633_pinout.png}}
Der [[http://www.analog.com/media/en/technical-documentation/data-sheets/AD633.pdf|AD633]] kann zwei analoge Eingangsspannungen miteinander multiplizieren und wird in einem [[https://hackaday.com/2016/06/19/make-math-real-with-this-analog-multiplier-primer/|Artikel bei Hackaday]] beschrieben.
===== Analog Joystick HW-504 =====
{{:schule:hardware:analog_stick.jpg?direct&300|}}
===== C1602A LCD-Modul =====
{{:schule:hardware:lcd.jpg?direct&300|}}
Eine ausführliche Beschreibung zur Verwendung befindet sich im [[https://tbs1-bo.github.io/hardware-101/hd44780/|hardware-101 Repo]].
===== DHT11, DHT22 - Temperatur und Luftfeuchtesensor =====
{{:schule:hardware:dht11.jpg?direct&300|}}
{{:schule:hardware:dht11.pdf|Datenblatt}}
===== DS18B20 1-Wire Temperatursensor =====
{{:schule:hardware:ds18b20.jpg?direct&300|}}
{{:schule:hardware:ds18b20_shield.jpg?direct&300|}}
{{:schule:hardware:ds18b20_breakout.jpg?direct&300|}}
Eine ausführliche Beschreibung befindet sich im [[https://tbs1-bo.github.io/hardware-101/ds18b20/|hardware 101 repo]].
===== HC-SR501 - Infrarot Bewegungsmelder =====
{{:schule:hardware:hc_sr501.jpg?direct&300|}}
Ein Bewegungssensor, in dem [[https://www.mpja.com/download/31227sc.pdf|Datenblatt]] beschrieben wird.
===== Infrarot Sender-Empfänger (Sender/Receiver) =====
{{:schule:hardware:ir-sender-receiver.jpg?direct&300|}}
Infrarot-Module, die zum Beispiel mit dem [[https://www.mysensors.org/build/ir|MySensors]]-Projekt über einen Arduino-µC oder das Linuxprojekt [[http://www.lirc.org/|LIRC]] angesteuert werden können.
===== LED Matrix (5x7 und 8x8) =====
{{:schule:hardware:ledmatrix.png|}}
{{:schule:hardware:led_head_wemosd2mini_front.jpg?direct&300|}}
{{:schule:hardware:led_head_wemosd2mini_back.jpg?direct&300|}}
Die LEDs werden mit einem Vorwiderstand von 220 Ohm betrieben. Jede LED ist über eine Zeile und Spalte ansteuerbar. Insgesamt werden 5+7=12 GPIO für die Ansteuerung benötigt. Weitere Informationen stehen im [[https://tbs1-bo.github.io/hardware-101/led_matrix/|hardware-101 Repo]]. Die Bilder zeigen ein [[https://wiki.wemos.cc/products:d1_mini_shields:matrix_led_shield|LED-Shield für einen Wemos D2 Mini]]. Für die Ansteuerung des 8x8-Shields mit Micro-Python ist eine [[https://github.com/mcauser/micropython-tm1640|Bilbiothek]] vorhanden. In dem Projekt [[https://github.com/pintman/ledbadge|ledbadge]] kommt dies etwas zum Einsatz.
===== LED-Taster =====
{{:schule:hardware:led_taster.jpg?500|}}
===== LM75 Temperatursensor =====
{{:schule:hardware:lm75-pins.png?direct&300|}}
Eine ausführliche Beschreibung ist im [[https://tbs1-bo.github.io/hardware-101/lm75/|hardware-101 Repo]] verfügbar.
===== MCP23017 Portexpander =====
{{:schule:hardware:mcp23017.jpg?direct&300|}}
Der MCP23017 ist ein Portexpander, mit dem Anzahl der verfügbaren GPIOs an einem [[schule:Raspberry Pi]] vergrößert werden kann. Das [[https://cdn-shop.adafruit.com/datasheets/mcp23017.pdf|Datenblatt]] des MCSP23017 beschreibt die Belegung der Pins. Er wird über einen I²C-Bus angesprochen.
{{:schule:hardware:mcp23017-pinout.png?direct&300|}}
Über verschiedene Registeradressen können unterschiedliche Funktionen angesteuert werden.
{{:schule:hardware:mcp23017-register.png?direct&600|}}
Wichtig sind die mit einem roten Punkt markierten Register. Für Pins aus der Bank A bzw. B stehen jeweils eigene Befehle zur Verfügung. Mit den Registern IODIRA und IODIRB können die Pins als Eingabe- oder Ausgabe-Pins konfiguriert werden (0=out, 1=in). Mit den Registern OLATA und OLATB kann auf den Pins eine Ausgabe erzeugt werden. Die Register GPIOA und GPIOB können schließlich verwendet werden, um von den Pins zu lesen.
==== Zugriff mit i2ctools ====
Um den Baustein mit dem [[schule:Raspberry Pi]] zu verwenden, muss zunächst der I²C-Overlay aktiviert werden in den Einstellungen von ''raspi-config''. Evt. muss mit ''modprobe i2c-dev'' noch ein Kernelmodul geladen werden.
Nun wird das Paket ''i2c-tools'' installiert, um mit [[debman>i2cdetect]] auf den Bus zugreifen zu können.
$ i2cdetect -y 1
scannt den Bus nach verfügbaren Geräten ab. Dort sollte der Baustein auftauchen - z.B. an Adresse 0x20. Diese Adresse werden wir in den folgenden Befehlen jeweils mitsenden.
$ i2cset -y 1 0x20 0x00 0xFE
konfiguriert mit [[debman>i2cset]] den Pin IO0 (0xFE ist binär 1111 1110) als Ausgang. Nun können wir ein Signal senden.
$ i2cset -y 1 0x20 0x14 0x01
sendet eine 1 an den Pin IO0.
$ i2cget -y 1 0x20 0x12
liest mit [[debman>i2cget]] die Eingänge in Bank A aus. Aus dem Hexwert lässt sich dann der Status eines Pins herauslesen, wenn man den Wert als Binärtwert betrachtet.
==== Zugriff mit Python ====
Für den Zugriff mit Python wird das Paket ''python3-smbus'' benötigt.
import smbus
bus = smbus.SMBus(1)
adresse = 0x20
bus.write_byte_data(adresse, 0x00, 0xFE)
bus.write_byte_data(adresse, 0x14, 0x01)
wert = bus.read_byte_data(adresse, 0x12)
===== NE555 Timer =====
{{:schule:hardware:ne555_blockdiagram.png?direct&300|}}
Der Klassiker unter den ICs. In [[https://archive.org/download/Forrest_Mims-engineers_mini-notebook_555_timer_circuits_radio_shack_electronics/Forrest%20Mims-engineer's%20mini-notebook%20555%20timer%20circuits%20(radio%20shack%20electronics).pdf|Engineer's Mini-Notebook – 555 Timer IC Circuits]] werden viele Grundschaltungen beschrieben. Einige Schaltungen können in einem [[http://www.falstad.com/circuit/|Simulator]] nachvollzogen werden.
===== MPU6050 Beschleunigungssensor und Gyrometer =====
Der [[http://playground.arduino.cc/Main/MPU-6050|MPU 6050]] ist ein Beschleunigungssensor und Gyrometer, der sich über I²C auslesen lässt. Eine Beschreibung befindet sich im [[https://tbs1-bo.github.io/hardware-101/mpu6050/|hardware-101 Repo]].
===== NRF24L01+PA+LNA =====
{{:schule:hardware:nrf24l01.jpg?direct&300|}}
{{:schule:hardware:nrftop.png?direct&300|}}
{{:schule:hardware:nrf2401l01-pa-lna.jpg?direct&300|}}
Funksender mit und ohne Antenne - {{:schule:hardware:nrf24l0plus.pdf|Datenblatt}}. Der Funksender wird z.B. im Projekt [[https://www.mysensors.org|MySensors]] verbaut.
===== Power Converter DC 0,8-3,3V zu DC 3,3V =====
{{:schule:hardware:power_converter_to_3.3v.jpg?direct&300|}}
Power Converter, der Signale unterhalb von 3.3V auf 3.3V hoch regelt. {{:schule:hardware:power_converter_to_3v.pdf|Datenblatt bzw. Shop-Beschreibung}}
===== RFID =====
{{:schule:hardware:rfid.jpg?direct&300|}}
Ein RFID-Lesegerät, das die gelesene Seriennummer über die serielle Schnittstelle ausgibt.
===== RGB-LED =====
{{:schule:hardware:rgb_led.jpg?direct&300|}}
{{:schule:hardware:rgb_led_pinout.png?direct|}}
Jeder Farb-Pin muss über einen Vorwiderstand angeschlossen werden. Die Farben können über PWM kombiniert werden. Eine [[http://wiring.org.co/learning/basics/rgbled.html|Beispielbeschaltung]] zeigt eine mögliche Verwendung.
===== Servomotor =====
{{:schule:hardware:schrittmotor.jpg?direct&300|}}
Eine Beschreibung zur Verwendung befindet sich im [[https://tbs1-bo.github.io/hardware-101/servo/|hardware-101 repo]].
===== SN74HCT125N - Spannungswandler =====
{{:schule:hardware:sn74ahct125n.jpg?direct&400|}}
Spannungswandler z.B. zum Ansteuern von [[#ws281x_led-controller|WS281x]] LEDs.
===== SN74HCT245N - 8-fach Sende-Empfänger =====
{{:schule:hardware:sn74hct245.png?direct&300|sn74hct245}}
Der [[http://www.ti.com/lit/ds/symlink/sn74hct245.pdf|SN74HCT245N]] ist ein 8-fach Sende-Empfänger für eine Zwei-Wege-Kommunikation.
===== SN74HC595N 8Bit Shiftregister =====
{{:schule:hardware:sn74hc595n_8bitshiftregister.jpg?direct&300|}}
Ein Schieberegister, über das mehrere Werte gleichzeitig ausgegeben werden können, nachdem sie in das Register geschoben wurden. Im [[https://tbs1-bo.github.io/hardware-101/74HC595/|hardware-101 Repo]] existiert eine ausführliche Beschreibung.
===== Sound Detector =====
{{:schule:hardware:sound_detector.jpg?direct&400|}}
Sound Detector, der über einen analogen Pin (AO) einen Schallpegel ausgibt und über den digitalen Pin (DO) die Überschreitung eines mit einem Potentiometer einstellbaren Schwellwertes signalisiert.
===== SSD1306 128x64 OLED-Display =====
{{:schule:hardware:ssd136.jpg?direct&300|}}
Das Display kann über [[https://github.com/adafruit/Adafruit_Python_SSD1306|eine high-level Python-Bibliothek für den Raspberry Pi]]((Leider liegt die Bibliotheken nur für Python2 vor.)) oder eine [[https://github.com/micropython/micropython/tree/master/drivers/display|low-level Bibliothek für den ESP8266/ESP32]] angesteuert werden. Da die Displays auch von Adafruit vertrieben werden, gibt es dort eine ausführliche [[https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black?view=all|Anleitung]].
{{:schule:hardware:ssd1306_an_pi.png?direct&500|}}
Die Adresse auf der Rückseite des Displays zeigt zwar 0x78 an (vgl. das obige Bild), die I²C-Adresse ist jedoch 0x3C oder 0x3D. Eine Erklärung habe ich [[http://robotcantalk.blogspot.de/2015/03/interfacing-arduino-with-ssd1306-driven.html|hier]] gefunden:
> The back of the PCB shows that the 0x78 jumper has been soldered. The sheet says that the slave adress is a 7-bit code that can be either 0x3C (011-1100) or 0x3D (011-11001), based on the SAO bit (LSB of the adress). The SAO bit can be controlled by the D/C# pin of the SSD1306 (not to be confused with the D/C# bit of the control byte in the above image!). I guess, heltec must have soldered the pin to GND. Moreover, since, the OLED will always be interfaced in WRITE mode, the I2C First Byte will be the 7-bit SLA and the WRITE mode bit (0) - which becomes the byte, 0x78. Ha!
Bei Problemen mit Timeouts auf dem I²C-Bus hilft folgender Hinweis:
> If you get I2C timeouts, you may need to add two 4.7 kOhm resistors, one from SDA to 3.3v, and one from SCL to 3.3v.
> [[http://www.espruino.com/SSD1306|Quelle]]
Weitere Infos zu dem Display im [[https://hw101.tbs1.de/ssd1306/|hw101]].
===== WS281x LED-Controller =====
{{:schule:hardware:ws2812b_led_strip.jpg?direct&300|}}
Eine ausführliche Beschreibung der WS2811 bzw. WS2812 LEDs befindet sich im [[https://tbs1-bo.github.io/hardware-101/ws281x/|hardware-101 Repo]].
* [[https://github.com/pintman/flaschenwand|flaschenwand]] nutzt die LEDs, um eine Wand aus Getränkekisten anzusteuern.
* [[https://blog.bakera.de/wlampe.html|WLampe]] nutzt die LEDs, um eine einfache Ikea-Lampe damit zu steuern.