Embedded System Design Getting Started HW - Ressourcen 3 Arduino Installation-Guide 6 Arduino IDE/Download 6 Arduino Treiber Installation 7 Arduino IDE starten 9 Arduino IDE - Getting Started (Code-Basiert) 10 Vorbereitung 10 Übertragung von Programm-Code bzw. Flash-Vorgang 11 Aufbau von externe Versorgungsquelle 12 Blink LED 13 Lauflicht/Ampel 13 Auslesen von Sensoren (ADC) und serielle Übertragung über USB Com-Port 14 Serial-LCD 17 Wetterstation 17 Thermostat 18 Drehzahlgeber 18 Bluetooth 19 Embedded System Design Android-App 20 MATLAB/Simulink Installation-Guide 52 Hinzufügen/Download von Arduino Library (Arduino support packages) 52 Arduino Library starten 62 1
MATLAB/Simulink - Getting Started (Modellbasiert) 53 Blink LED 53 ADC auslesen 62 External-Mode (Online Calibration) 64 2
HW - Ressourcen - Arduino Mega 2560 - USB Kabel - Steckbrett - Potentiometer Vcc (+5V) Analog voltage out Ground (-) - LED Ground (-) VCC (+5V) 3
- Temperatur-Sensor LM35 - Feuchtigkeit-Sensor Honeywell HIH-4020-16x2 LCD gelb auf blau (serielle Ansteuerung 5V) 4
- Bluetooth-Modul RN-42 (Optional) o Prinzipielle Verbindungen von serielle Schnittstellen TX (Transmit/Sender) und RX (Receive/Empfänger) Ganz wichtig, TX und RX werden überkreuzt angeschlossen und die Masse GND muss überall gleich angelegt sein. - DC-Adapter Terminalblock - Motortreiber/H-Brücke L289N +12V GND +5V Input Output - PC-Lüfter (FAN) DC 12V 5
Arduino Installation-Guide Arduino IDE/Download http://arduino.cc/en/main/software 6
Arduino Treiber Installation 7
8
Arduino IDE starten Wie üblich werden die Codes des Programms von oben nach unten abgearbeitet. Der setup Bereich dient zur Initialisierung und wird nur einmalig am Anfang des Programms ausgeführt. Der loop Bereich wird nach dem setup Bereich aufgerufen und wiederholt sich so lange bis ein Reset durchgeführt wird oder die Versorgung abgeschaltet wird. 9
Arduino IDE - Getting Started (Code-Basiert) Vorbereitung 10
Übertragung von Programm-Code bzw. Flash-Vorgang 11
Aufbau von externe Versorgungsquelle Zwar besitzt das Arduino an Board 3.3 und 5 Volt Ausgangsspannung aber sie besitzen einen sehr geringen Stromausgang. Da die Komponenten, wie z.b. LCD, viel Strom verbrauchen ist es sehr wichtig, dass sie extern versorgt werden und die Masse überall gleich angelegt wird. Bei uns im Labor verwendeten Motortreiber L298N bietet neben seiner Hauptfunktion zusätzlich eine +5V DC- Ausgangsspanung die durch den verbauten Spannungsregler an Board realisiert wird. Das nutzen wir für die Versorgung unsere Komponenten wie z.b. das LCD. Das Arduino-Board dient lediglich nur für die Steuerung. Hier der Aufbau im Labor: +12V +12V GND +5V Output 12
Blink LED Referenz: http://www.arduino.cc/en/tutorial/blink Ground (-) VCC (+5V) 220 ohm bis 1K ohm +12V GND +5V Output Lauflicht/Ampel Referenz: https://arduinomylifeup.com/arduino-traffic-light-project/ +12V GND +5V Output 220 ohm bis 1K ohm 13
Auslesen von Sensoren (ADC) und serielle Übertragung über USB Com-Port Referenz: http://www.arduino.cc/en/tutorial/analogreadserial +12V GND +5V Output Vcc (+5V) Analog voltage out Ground (-) 14
Nach erfolgreichem Flash-Vorgang, Serieller Monitor Starten und es werden die Roh-Werte von ANALOG-IN-A0 angezeigt: Wichtig bei der Serielle Übertragung ist die Auswahl der entsprechende Baudrate : Als externes serielles Kommunikationsprogramm kann auch HTerm verwendet werden Download: http://www.der-hammer.info/terminal/ 15
Wie in oberes Beispiel können auch der Temperatursensor LM35 und der Feuchtigkeitssensor HIH-4020 genauso bloß mit der richtige Verdrahtung (Vcc, Output, GND), siehe unten oder unter der Kapitel HW Ressourcen, verwendet werden. Da die Sensoren nicht viel Strom verbrauchen und um den Massenversatz zu vermeiden, sollten sie direkt von Arduino-Board versorget werden. +12V GND +5V Output - Temperatur-Sensor LM35 - Feuchtigkeit-Sensor Honeywell HIH-4020 16
Serial-LCD Referenz: https://www.sparkfun.com/tutorials/246 Auf der Homepage ist zu beachten, dass keine #include <SoftwareSerial.h> und SoftwareSerial myserial(3,2); nötig ind da das Arduino Mega extra (Hardware-seitig) serielle Schnittstelle TX und RX besitzt. In dem gesamten Beispiel-Code ist myserial mit Serial1 zu ersetzen, siehe unten im Code. +12V GND +5V Output Code-Beispiel: // SparkFun Serial LCD example 1 // Clear the display and say "Hello World!" void setup() { Serial1.begin(9600); // set up serial port for 9600 baud delay(500); // wait for display to boot up } void loop() { Serial1.write(254); // move cursor to beginning of first line Serial1.write(128); Serial1.write(" "); // clear display Serial1.write(" "); Serial1.write(254); // move cursor to beginning of first line Serial1.write(128); Serial1.write("Hello, world!"); while(1); // wait forever } Wetterstation Versuchen Sie jetzt Ihre eigene Wetterstation aufzubauen in dem Sie die Sensorwerte von den Temperatur- und Feuchtigkeitssensor an dem LCD-Display ausgeben. 17
Thermostat Mit den vorhandenen PC-Lüfter und der Motortreiber LN298N sind Sie in der Lage Ihre eigene Thermostat aufzubauen. Hier in Schaltung wird der PC-Lüfter als ein DC-Elektromotor abgebildet. Aufgrund der Beispielcodes sollten VCC(+) und GND(-) wie im Bild an den PC-Lüfter angeschlossen werden: +12V GND +5V Output Drehzahlgeber In den folgenden Code wird ein Drehzahlgeber dargestellt. Mit Hilfe der Werte von dem Potentiometer an den ADC-Eingang des Arduino-Boardes kann der Soll-Drehzahl der PC-Lüfter ermittelt und mittels PWM-Ausgang an Port 5 an den Motortreiber eingestellt werden. Die ermittelte Drehzahl wird an dem USB Serial-Com-Port ausgegeben. int enablemotor = 5; int in3 = 7; int in4 = 6; int Potentiometer = 0; int motorstep = 0; int motorspeed = 0; int ADCMax = 1023; int MotorspeedMax = 255; void setup() { Serial.begin(9600); // set all the motor control pins to outputs pinmode(enablemotor, OUTPUT); pinmode(in3, OUTPUT); pinmode(in4, OUTPUT); digitalwrite(in3, LOW); digitalwrite(in4, HIGH); void loop() { Potentiometer = analogread(0); motorspeed = Potentiometer/motorStep; if (motorspeed > MotorspeedMax) { motorspeed = MotorspeedMax; } if (motorspeed < 0) { motorspeed = 0; } analogwrite(enablemotor, motorspeed); Serial.print(" motorspeed: "); Serial.println(motorSpeed); } motorstep = ADCMax/MotorspeedMax; } Referenz: https://tronixlabs.com.au/news/tutorial-l298n-dual-motor-controller-module-2a-andarduino/ Versuchen Sie jetzt anhand des oberen Beispiels und den vorhandenen Temperatursensor Ihren eigenen Thermostat aufzubauen. 18
Bluetooth Bluetooth-Modul RN-42 +12V GND +5V Output ACHTUNG: Da hier unterschiedliche Versionen von Bluetooth-Modulen gibt, auf die Pinbelegung (Gnd -, VCC +, TX, RX) achten! Hier ist dieselbe Prinzip der seriellen Übertragung wie über USB-COM-Port oder Serial-LCD. Es ist zu beachten, dass das Bluetooth-Modul mit eine Baudrate von 115200 Baudrate arbeitet. Um die Sensordaten zusätzlich über den Bluetooth-Modul zu versenden muss das Modul wie oben angezeigt angeschlossen werden. Im Programmcode muss noch in setup Bereich die Serial2 initialisiert werden danach kann im loop Bereich die entsprechende Daten mit der Funktion Serial2.write(); übertragen werden. Um mit ein externes Gerät die Verbindung mit dem Bluetooth-Modul herzustellen muss man bei der Ankoppelung den Sicherheitscode 1234 eingeben. - Verbindung über Laptop: o Als serielle Kommunikationsprogramm kann HTerm verwendet werden Download: http://www.der-hammer.info/terminal/ - Verbindung über Android-Mobile: o Als serielle Kommunikationsapp kann Embedded System Design App verwendet werden Download: Unter https://www.hs-esslingen.de/de/mitarbeiter/mohammad-anuschefar.html Embedded_System_Design Lessons necessary Embedded System Design App Download 19
Embedded System Design Android-App App-Download unter https://www.hs-esslingen.de/de/mitarbeiter/mohammad-anuschefar.html Embedded_System_Design Lessons necessary Embedded System Design App Download Arduino-Code unter https://www.hs-esslingen.de/de/mitarbeiter/mohammad-anuschefar.html Embedded_System_Design Lessons necessary Arduino Download Arduino-Code SerialInOut_USB_Bluetooth.zip Android-Mobile: 20
21
22
23
24
25
Embedded System Design App starten: 26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
MATLAB/Simulink Installation-Guide Hinzufügen/Download von Arduino Library (Arduino support packages) - Im Labor: o http://www2.hsesslingen.de/~manusch/embedded_system_design/embedded_system_design_lab or/matlab/matlab_note_&_files.zip o Folgen Sie die Anweisungen in der Datei MATLAB_Note.txt - Auf privatrechnern: 52
MATLAB/Simulink - Getting Started (Modellbasiert) Blink LED Starten von Arduino Beispiele: 53
54
Unter Tutorials findet man eine Reihe von Beispielen die durch gearbeitet werden können und wir fangen gleich mit Getting Started with Arduino Hardware an (Blink LED) 55
Um den Beispiel durchzuführen muss man lediglich den unteren Anweisungen unter Task 3 - Create a Model for Arduino Hardware folgen 56
Man kann auch das Beispielprojekt direkt aufrufen 57
Für Änderungen an Parametern oder Einstellungen, mit Doppelklick auf den jeweiligen Block Um ein Projekt zu verifizieren kann man es simulieren Simulation starten Simulationszeit Simulation stoppen Durchgeführte Simulationszeit 58
Einen Blick auf die Model Configuration Parameters Erforderliche Konfigurationen sind unter Code Generation System target file: realtime.tlc und unter Run on Target Hardware Target hardware: das entsprechende Ziel-Hardware. In den Beispielen sind sie automatisch richtig eingestellt. 59
Das Projekt auf Arduino-Hardware zu flashen Deploy to Hardware 60
Bei erfolgreichen Flash-Vorgang: Versuchen Sie anhand des oberen Beispiels den Lauflicht/Ampelschaltung zu realisieren. 61
Arduino Library starten 62
ADC auslesen Da der ADC-Eingang ein uint16 Typ ist und die Serielle Ausgang uint8 braucht man hier gewisse Konvertierung. Als Lösungsvorschlag ADC_Serial.slx : http://www2.hs-esslingen.de/~manusch/matlab.html In Modell gibt es den Block calc uint16 to uint8 der genau zu diesem Zweck dient. 63
External-Mode (Online Calibration) In Simulink gibt es zusätzlich die Funktion External-Mode die dazu dient um Online-Calibration durchzuführen. D.h. es wird ein spezieller Code-Version mit bestimmte Schnittstellen generiert womit man während der Laufzeit Überwachen und Parametern ändern kann. Da diese Funktion auf die USB-Schnittstelle zugreift, darf die serielle Schnittstelle an USB nicht in Modell verwendet werden. Als Ansatz ADC_OnlineCalib.slx : http://www2.hs-esslingen.de/~manusch/matlab.html 64
65
66
67
68
69
Versuchen Sie jetzt anhand der Beispiele die Übungen Wetterstation und Thermostat modellbasiert in Simulink zu realisieren. 70