WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Arduino + Simulink + Simulink Coder

 

AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 08:42     Titel: Arduino + Simulink + Simulink Coder
  Antworten mit Zitat      
Hallo liebe Gemeinde,

folgendes habe ich vor:
In mein Simulink Modell möchte ich einen realen Ultraschallsensor einbinden. Dafür möchte ich mein Ardunio nutzen. Ich habe mir einen SRF08 Ultraschallsensor gekauft, den ich mit einer Arduino Library auslesen kann (http://arduino.cc/playground/Main/SonarSrf08).

Jetzt komme ich aber nicht weiter. Folgende Fragen habe ich:
1. Wie kommen die Daten von der Ardunio Software zu Matlab/Simulink?
2. Ich habe Simulink Coder noch nicht benutzt, wie kann ich nun ein Echtzeitfähiges Modell erstellen?

Ziel soll es sein, via Scope die Entfernungen aus dem Ultraschallsensor in Echtzeit anzeigen zu lassen.

Ich würde mich sehr über Hilfe freuen.


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 15.06.2012, 09:48     Titel:
  Antworten mit Zitat      
Hallo AntonDieter,
wenn ich deinem Link folge und dort auf der Seite Interfacing with Software klicke und auf der folgenden Seite auf Arduino + Matlab komme ich auf diese Seite: http://arduino.cc/playground/Interfacing/Matlab Und dort gibt es unten einen Link zur Simulink Anbindung: http://www.mathworks.de/academia/ar.....are/arduino-simulink.html

Auf beiden Seiten steht doch recht ausführlich wie man das zusammen bringen kann. Hast du das überhaupt gelesen?

Und zu deiner zweiten Frage kann ich dir das Getting Started empfehlen. Dort Kann man sich gut in Matlab/Simulink einarbeiten.
http://www.mathworks.de/help/toolbo.....link/gs/gs_intropage.html
http://www.mathworks.de/help/toolbox/rtw/
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 19:13     Titel:
  Antworten mit Zitat      
All deine genanten Webseiten kenne ich. Leider ist die Matlab Library dazu da, um direkt die PINs vom Arduino auzulesen. Ich habe aber mein Arduino Code schon, denke nicht, dass ich dazu in der Lage bin, das in Simulink zu erstellen.
Die Seite von arduni, da geht es um Matlab, ich will Simulink.

Ich habe bereits angefangen mir die Hilfe vom Simulink Coder durchzulesen, aber ist halt noch vieles Spanisch für mich, hatte naiverweise auf knappe Hilfe gehofft, aber das Thema ist wohl nix für knappe Sachen Smile
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 16.06.2012, 18:27     Titel:
  Antworten mit Zitat      
Aber bei der Seite über die Simulink Anbindung hast du doch unter "Support Package" Links um die Simulink Librarys für die Uno oder Mega Variante zu installieren.
Damit müsste das doch gehen? Da sind doch direkt Simulink Blöcke abgebildet?!

Oder ich verstehe dein Problem leider nicht.

Das mit der Hilfe ist so eine Sache, ich könnte dich genauso fragen was du erwartet hast? Auf so allgemeine Fragen, kann man nur allgemein antworten.
Man könnte zwar hier lange diskutieren und denjenigen an die Hand nehmen, aber soviel zeit und Lust hat keiner. Wink Ausserdem würde man nichts weiter vermitteln und vermitteln können was nicht im Getting started steht.

Leichter ist es, wenn du mit einem konkreten Problem um Hilfe bittest. Dabei solltest du beachten alle wichtigen Infos zu liefern. Dazu gehören unter anderem:
- Relevanter Codeabschnitt
- Fehlermeldungen falls vorhanden komplett posten
- Soll und Ist Verhalten klar stellen
- ggf. ein Beispiel.
- was dir noch so einfällt was helfen könnte dein Problem zu lösen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 18:26     Titel:
  Antworten mit Zitat      
Das Problem mit der Kopplung Arduino - Simulink gehe ich später an.

Erstmal möchte ich es hinbekommen, dass ich eine Echtzeitsimulation durchführe an einem völlig simplem Beispiel:
Ich will eine Konstante zu einem Scope schicken. Diese möchte ich, während die Simulation läuft, ändern, so dass ich auf dem Scope dann auch die Änderung sehe.

Dazu habe ich das einfach Modell gebaut.
Dann gehe ich auf Tools - Code Generation - Options.
Erst setze ich beim Solver folgende Einstellungen:
- Fixed Step
- Ode5
- Stopzeit 1000.0

Dann die bei Code Generation: Siehe Bild Anhang 1
Dann "Build".

Wenn ich jetzt die Simulation starte, dann rechnet er kurz durch.
Matlab zeigt mir auch folgende Warning:
Code:
"Warning: Unable to determine a fixed step size based on the sample
times in the model 'fff', because the model does not have any discrete
sample times.  Picking a fixed step size of (20.0) based on simulation
start and stop times.  You can disable this diagnostic by explicitly
specifying a fixed step size in the Solver pane of the Configuration
Parameters dialog box, or setting the 'Automatic solver parameter
selection' diagnostic to 'none' in the Solver group on the Diagnostics
pane of the Configuration Parameters dialog box. "


Was mache ich falsch?

1.JPG
 Beschreibung:
Code Generation Einstellungen

Download
 Dateiname:  1.JPG
 Dateigröße:  89.27 KB
 Heruntergeladen:  2199 mal
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 19:29     Titel:
  Antworten mit Zitat      
haha bin ich ein Depp.

Ich habe einfach mal die Simulationszeit hochgeschraubt und kann nun die Konstante beliebig ändern. Man bin ich doof, dazu brauch ich gar kein RTW (bzw. neu Simulink Coder).

hm jetzt muss ich nur noch hinbekommen die Daten vom Arduino ins Modell zu bekommen.
Zu deiner Frage warum es mit dem Plugin nicht geht:
Ich habe bereits einen kompletten Code für den Ultraschallsensor. Dieser wurde mir fürs Arduino bereitgestellt (inkl. Bibliothek).
Simulink bietet mir die Möglichkeit die PINs auszulesen und damit zu arbeiten, genauso wie in der Arduino Programmieroberfläche. ABER: ich müsste mir das auslesen des Sensors dort komplett neu erstellen, dafür fehlt mir die Expertise. Klar wäre es mir lieber in Simulink alles zu haben, aber ich glaube einfacher ist es, wenn ich die Daten einfach an Simulink sende.
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 18.06.2012, 09:03     Titel:
  Antworten mit Zitat      
ich weiß jetzt nicht was Arduino für Möglichkeiten hat, deswegen sag ich dir was es für Möglichkeiten bei Simulink gibt und hoffe, dass dir das hilft.

1. Die Daten als *.mat File ablegen und dann über den Matlab - Simulink - Sources - From File Block die Daten ins Modell holen.

2. Die Daten in Matlab aufbereiten und dann mittels Matlab - Simulink - Sources - From Workspace Block in Simulink drauf zugreifen. (Simulation kannst du von Matlab aus starten mit dem Befehl
Code:


3. Du könntest das über eine S-function versuchen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2012, 18:52     Titel:
  Antworten mit Zitat      
hm schon mal vielen Dank.

Bevor ich deine Möglichkeiten validiere, habe ich glaube ich eine einfachere Variante, die ich testen möchte. ich lese die Daten des Ultraschallsensors aus und gebe sie an einen COM Port weiter. Kann ich diesen in Simulink auslesen? Wenn ja wie? Ich habe in der Library nach einem COM Baustein gesucht, aber leider nix gefunden, ebenso in den Einstellungen.

Ich glaube dieser Weg ist einfacher, wenn ich nur wüsste wie Smile
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 19.06.2012, 07:03     Titel:
  Antworten mit Zitat      
hmm... das habe ich noch nicht probiert... aber in der "Instrument Control Toolbox" sind Blöcke dafür drin. Falls du diese Toolbox nicht hast, wirst du um eine S-Function nicht rum kommen denke ich.

Mit Toolbox: http://www.mathworks.de/help/toolbox/instrument/brbv41k-1.html

Ohne Toolbox:
Schau dir mal folgenden Befehl dazu an:
Code:

http://www.mathworks.de/help/toolbox/instrument/serial.html
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 18:09     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank! Das hat mir sehr geholfen. Dort habe ich tatsächlich eine Serial Input Box. Allerdings bekomme ich keine Werte ausgelesen. In Arduino habe ich folgenden Code:
Code:

/*
* SRF08.ino - example interfacing with sonar sensor SRF08
*   library uses Wire.h
*      SDA - Analog Pin 4
*      SCL - Analog Pin 5
*
* Authors:
*   - Zach Foresta - Foureza87@yahoo.com (April 2009)
*   - Leo Colomb - @LeoColomb (May 2012)
*
* For component setup - http://www.arduino.cc/playground/Main/SonarSrf08
*/

#include <Wire.h>
#include <SonarSRF08.h>

SonarSRF08 MySonar;

#define CommandRegister 0x00
int New_Address = 248; // 0xF8
#define ResultRegister  0x02
#define GainRegister 0x00 // Setup Analogue Gain -- http://www.robot-electronics.co.uk/htm/srf08tech.html section "Analogue Gain"
#define RangeLocation 0xFF // Setup Range Location -- http://www.robot-electronics.co.uk/htm/srf08tech.html section "Changing the Range"

int DEBUG = 1;
char unit = 'c'; // 'i' for inches, 'c' for centimeters, 'm' for micro-seconds
float sensorReading = 0;
int time = 70;


void setup()
{
  MySonar.connect();  
  MySonar.changeAddress(CommandRegister, New_Address, GainRegister, RangeLocation);
  if (DEBUG){
    Serial.begin(9600);
  }
  New_Address += 4;
  // offset address not sure why this is but it works for this address
}

void loop()
{
  // set units, gain, and range location for reading out distance
  MySonar.setUnit(CommandRegister, New_Address, unit, GainRegister, RangeLocation);
  // pause
  delay(time);
  // set register for reading
  MySonar.setRegister(New_Address, ResultRegister);
  // read data from result register
  sensorReading = MySonar.readData(New_Address, 2);
  // print out distance
  // Serial.print("Abstand: ");
  Serial.print(sensorReading);
  // Serial.print(" cm");
  Serial.println();
  // pause
  delay(time);
}
 


Anbei noch mein Simulink Modell und die Einstellungen der Boxen. Leider ergibt das Scope immer nur 0. Wenn ich in Arduino auslese bekomme ich die Werte im Serial Monitor angezeigt (xxx.xx). Wenn meine Simulink Simulation läuft, kann ich auch im Arduino nicht den COM Port auslesen, da er besetzt ist, was ja ein gutes Zeichen ist. Ich vermute, dass nur meine Einstellungen in Simulink falsch sind.

Über noch mehr Hilfe würde ich mich freuen
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 18:10     Titel:
  Antworten mit Zitat      
Diesmal mit Bild

Unbenannt.JPG
 Beschreibung:

Download
 Dateiname:  Unbenannt.JPG
 Dateigröße:  101.01 KB
 Heruntergeladen:  2251 mal
 
AntonDieter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 20:42     Titel:
  Antworten mit Zitat      
So bin nun etwas weiter.

Ich bekomme nun Werte ausgelesen. Allerdings scheinbar Zahl für Zahl hintereinander. im Angehängten Screenshot sieht man die Werte.
Jeder "Hügel" sind die Daten, bestehend aus 6 Werten. Also innerhalb von 5 Sekunden wurde 6 mal die Zahl 178.00 übertragen.

Wie kann ich aus diesen Daten nun die Zahl 178,00 generieren?

1.JPG
 Beschreibung:

Download
 Dateiname:  1.JPG
 Dateigröße:  23.3 KB
 Heruntergeladen:  2198 mal
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.