Talking Plant Clara

Einführung in die Mikroelektronik

Weitere Kurse:
maytastix.de

Anleitung zum Kurs:
cloud.maytastix.de

Ello 👋

ich bin Maylis (sie/ihr)
  • Studentin
  • Nerd
  • Animefan
  • Computer Enthusiastin

Wie heißt ihr?

Wie heißt ihr?

Was macht ihr gerne?

Wie heißt ihr?

Was macht ihr gerne?

Was interessiert euch am Programmieren besonders?

Wie heißt ihr?

Welche Erwartungen habt ihr?

Was macht ihr gerne?

Was interessiert euch am Programmieren besonders?

Vorbereitung

Öffnet die Präsentation auf:
https://maytastix.de/clara

Ihr braucht folgende Programme:

Du brauchst diese Materialien


Raspberry Pi Pico Breadboard Feuchtigkeitssensor Bewegungssensor Lautsprecher

Raspberry Pi Pico funktioniert nicht?

  • Lade die CircuitPython Firmware runter
  • Kopiere die uf2-Datei auf den Raspberry Pi Pico
  • Auf dem Raspberry Pi Pico sollte code.py auftauchen

Thonny einstellen

Eigenen Sound erstellen

Er werde Licht

Das braucht ihr:


Raspberry Pi
Pico
Breadboard Rote LED Widerstand
220 Ohm

Kann's losgehen?

Ziel: Eine leuchtende LED

Breadboard

Breadboard

Nimm dir dein Breadboard zur Hand

Platziere den Raspberry Pi Pico auf dem Breadboard

LED

Das wollen wir jetzt bauen

Warum das ganze jetzt lol?

Warum das ganze jetzt lol?
  • Ohm: Widerstand
    220 Ohm
  • Volt: Spannung
    3V
  • Amp: Stromstärke
    50 mA

Okay und wie setzen wir das jetzt um?

Strom auf dem Raspberry Pi Pico

Erster Schritt geschafft

Erster Schritt geschafft

Habt ihr was noch nicht verstanden?

War die Geschwindigkeit gut?

Sind euch die Begriffe Widerstand Spannung und Stromstärke ein Begriff?

LED Blickzauber

Das braucht ihr:


Raspberry Pi
Pico
Breadboard 2X Rote LED 2X Widerstand
220 Ohm

Dein Raspberry Pi Pico muss programmierbar sein!

Klick mich falls dein Raspberry noch nicht läuft

Klick mich falls dein Raspberry noch nicht programmieren kannst

Bevor wir anfangen

Fügt eine weitere LED auf eurem Breadboard hinzu

Leuchten beide LEDs?

Okay let's go

Ziel: Eine LED so programmieren, sodass sie blinkt

Get your Raspberry Pi Pico ready?

Gibt es eine code.py Datei in dem Ordner deines Raspberry Pis?

Wenn nicht , dann Klick hier

Wenn ja, dann öffne die Datei in Thonny

Hier findest du wie du die Datei öffnest

Lege die positiven Verbindungen der LEDs auf einen Kontroll-Pin des Raspberry Pi Picos

Auf welchem Pin liegen die Verbindungen zu den LEDs?

Auf welchem Pin liegen die Verbindungen zu den LEDs?

  • Rote Led: GP16
  • Rote Led: GP17
Importiere die Bibliothek time, board, digitalio
							
							import board, digitalio, time
						
Definiere die Kontroll-Pins von den LEDs
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
						
Stelle die Kontroll-Pins als Ausgang ein, sodass die LEDs leuchten können
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

						
Verändere die Werte der Kontroll-Pins, sodass die LEDs blinken
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							while True:
								rote_led.value = True
								gruene_led.value = False
								time.sleep(1)
								rote_led.value = False
								gruene_led.value = True
								time.sleep(1)
						

Super gemacht!

Ghostbusters

Das braucht ihr:


Raspberry Pi
Pico
Breadboard 2X Rote LED 2X Widerstand
220 Ohm
Bewegungssensor

Dein Raspberry Pi Pico muss programmierbar sein!

Klick mich falls dein Raspberry noch nicht läuft

Klick mich falls dein Raspberry noch nicht programmieren kannst

Bevor wir anfangen

Verbinde den Bewegungssensor mit dem Raspberry Pi Pico

Hast du deinen Sensor angeschlossen?

Hast du deinen Bewegungssensor so angeschlossen?

Bereit zu hacken?

Ziel: Frage ab ob der Bewegungssensor ausgelöst

Ausgangscode
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							while True:
						
Füge den Bewegungssensor hinzu und stelle ihn als Input ein
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							PIR = board.GP18

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT

							while True:
						
Lasse die rote led leuchten wenn sich jemand bewegt und sie wieder ausgehen wenn niemand in der Umgebung ist.
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							PIR = board.GP18

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT

							while True:
								if pir.value == True:
									rote_led.value = True
								else:
									rote_led.value = False


						

Der Bewegungssensor geht 10 Sekunden nach dem Erkennen einer Bewegung aus!

Gebe dir aus was eigentlich im Hintergrund passiert und warte für eine Sekunde
							
							import board, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							PIR = board.GP18

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT

							while True:
								if pir.value == True:
									rote_led.value = True
								else:
									rote_led.value = False
								print("Bewegungsensor: ", str(pir.value))
								time.sleep(1)


						

True steht für wahr oder für 3 Volt
False steht für unwahr oder 0 Volt

Bewegungstastisch

Humidity Hunt

Das braucht ihr:


Raspberry Pi
Pico
Breadboard 2X Rote LED 2X Widerstand
220 Ohm
Feuchtigkeitssensor

Dein Raspberry Pi Pico muss programmierbar sein!

Klick mich falls dein Raspberry noch nicht läuft

Klick mich falls dein Raspberry noch nicht programmieren kannst

Bevor wir anfangen

Verbinde den Feuchtigkeitssensor mit dem Raspberry Pi Pico

Wähle dafür einen Pin, der analoge Signale versteht

Hast du deinen Sensor angeschlossen?

Wirst du dieses Problem meistern?

Ziel: Lese den Feuchtigkeitssensor ein und gebe dir den Wert aus

Warum brauchen wir einen Anologen Eingang

  • Das Signal des Sensors sind Nuancen zwischen 0 und 3 Volt
  • Das Signal muss in ein für den Computer verständliche Information umgewandelt werden
  • Der ACD(Analog-Digital-Wandler) wandelt das Signal in eine Zahl von 0 bis 65536 um
Importiere analogio als Helfsprogramm
							
							import board, analogio, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							while True:

						
Definiere den Eingang-Pin für den Feuchtigkeitssensor
							
							import board, analogio, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)

							while True:

						
Wenn der Sensor feucht ist gibt dieser einen niedrigen Wert aus.
Wenn der Sensor trocken ist gibt dieser einen hohen Wert aus.
Maximal liegt dieser bei 49300
Minimal liegt dieser bei 19200
							
							import board, analogio, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300

							while True:

						

Die Wert des Sensors in eine Prozentzahl umrechnen

(max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)

Beispiel

\[\begin{aligned} = (49300 - 38489) * 100 / (49300 - 19200) \end{aligned} \]
\[\begin{aligned} = (10811) * 100 / (49300 - 19200) \end{aligned} \]
\[\begin{aligned} = (1081100) / (49300 - 19200) \end{aligned} \]
\[\begin{aligned} = (1081100) / (30100) \end{aligned} \]
\[\begin{aligned} = 35.9 \end{aligned} \]
Rechne das Signal in eine Prozentzahl um und gebe den rohen und umgerechneten Wert aus.
							
							import board, analogio, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300
							
							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )
								time.sleep(1)
						
						

Nun kann du den Prozentwert nehmen um zu bestimmen ob die Pflanze gegossen werden muss.

Ein Wert unter 50 % könnte zum Beispiel bedeuten, dass die Pflanze gegossen werden muss.
Während ein Wert über 50 % bedeuten könnte, dass die Pflanze noch genug Wasser hat.
							
							import board, analogio, digitalio, time

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26

							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300
							
							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )

								if moisture_level < 50:
									rote_led.value = True
									gruene_led.value = False
									
								if moisture_level > 50:
									rote_led.value = False
									gruene_led.value = True 

								time.sleep(1)
						
						

Experimente

  • Halte den Sensor in die Luft
  • Halte deinen Finger an den Feuchtigkeitssensor
  • Halte den Sensor unter Wasser/Wasserglas
  • Halte den Sensor in eine Pflanze

Melody Magic

Das braucht ihr:


Raspberry Pi
Pico
Breadboard 2X Rote LED 2X Widerstand
220 Ohm
Bewegungsensor Feuchtigkeitssensor Lautsprecher

Dein Raspberry Pi Pico muss programmierbar sein!

Klick mich falls dein Raspberry noch nicht läuft

Klick mich falls dein Raspberry noch nicht programmieren kannst

Füge zwei Kabel für einen Lautsprecher hinzu oder schließe den Lautsprecher direkt an

Kannst du deine Planze zum leben erwecken?

Ziel: Spiele einen Sound ab wenn deine Pflanze nicht genug Wasser hat

Sound raussuchen

Lade dir einen von 15 Memesounds runter

Meme Sounds

Oder erstelle deinen eigenen

Eigener Sound
Ausgangscode
							
							import board, analogio, digitalio, time
	
							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26
							PIR = board.GP18
	
							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT
	
							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300
	
							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )
							
								if moisture_level < 50:
									rote_led.value = True
									gruene_led.value = False
									
								if moisture_level > 50:
									rote_led.value = False
									gruene_led.value = True 
							
								time.sleep(1)
						
Füge die Zusatzprogramme fürs abspielen von Sounds hinzu
							
							import board, analogio, digitalio, time
							from audiocore import WaveFile
							from audiopwmio import PWMAudioOut as AudioOut

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26
							PIR = board.GP18
	
							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT
	
							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300
	
							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )
							
								if moisture_level < 50:
									rote_led.value = True
									gruene_led.value = False
									
								if moisture_level > 50:
									rote_led.value = False
									gruene_led.value = True 
							
								time.sleep(1)
						
Definiere den Ausgangs-Pin für den Lautsprecher und lade den Sound.
Achte auf den Namen hier: aaguh.wav
							
							import board, analogio, digitalio, time
							from audiocore import WaveFile
							from audiopwmio import PWMAudioOut as AudioOut

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26
							PIR = board.GP18
							SPEAKER = board.GP27

							wave_file = open("aaguh.wav", "rb")
							wave = WaveFile(wave_file)
							audio = AudioOut(SPEAKER)
	
							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT
	
							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300

							
	
							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )
							
								if moisture_level < 50:
									rote_led.value = True
									gruene_led.value = False
									
								if moisture_level > 50:
									rote_led.value = False
									gruene_led.value = True 
							
								time.sleep(1)
						
Frage ab ob der Bewegungssensor ausgelöst wird und spiele den Sound ab
							
							import board, analogio, digitalio, time
							from audiocore import WaveFile
							from audiopwmio import PWMAudioOut as AudioOut

							ROTE_LED = board.GP16
							GRUENE_LED = board.GP17
							MOISTRUE_PIN = board.GP26
							PIR = board.GP18
							SPEAKER = board.GP27

							wave_file = open("aaguh.wav", "rb")
							wave = WaveFile(wave_file)
							audio = AudioOut(SPEAKER)
	
							rote_led = digitalio.DigitalInOut(ROTE_LED)
							rote_led.direction = digitalio.Direction.OUTPUT
							gruene_led = digitalio.DigitalInOut(GRUENE_LED)
							gruene_led.direction = digitalio.Direction.OUTPUT

							pir = digitalio.DigitalInOut(PIR)
							pir.direction = digitalio.Direction.INPUT
	
							moisture_sensor = analogio.AnalogIn(MOISTRUE_PIN)
							min_moisture=19200
							max_moisture=49300

							while True:
								moisture_level = (max_moisture - moisture_sensor.value) * 100 / (max_moisture - min_moisture)
								print(str(moisture_level), str(moisture_sensor.value) )
							
								if moisture_level < 50:
									rote_led.value = True
									gruene_led.value = False

									if pir.value == 1:
										audio.play(wave)
										while audio.playing:
											pass
									
								if moisture_level > 50:
									rote_led.value = False
									gruene_led.value = True 
							
								time.sleep(1)
						

Fantastisch

Feedback

Danke euch für's mitmachen

Bei Fragen und Anmerkung gerne melden.