Data acquisition and device control with Scilab.

Dependencies:   Servo MPU6050

Desciription

Scilab is a freeware alternative to MATLAB. For low-cost data acquisition and device control a nice Arduino toolbox is available.

https://os.mbed.com/media/uploads/hudakz/scilab.png

This site presents a Mbed port which allows to use Mbed boards (equipped with Arduino header) rather than Arduino to import real time data into Scilab and to control real equipment witch Scilab.

https://os.mbed.com/media/uploads/hudakz/arduino-temp-read_imagelarge_1.jpeg

Installation
  • Install Scilab to your PC, if not done yet.
  • Launch Scilab and install the Arduino toolbox by executing the following command from the Scilab console:

--> atomsInstall("arduino")
Controlling Mbed's digital output from Scilab
  • In Xcos open examples/Arduino1.zcos

/media/uploads/hudakz/scilab_arduino1.png

  • Double click on the Board setup block and replace the serial port number with mbed's actual virtual serial port number.
  • Double click on the Digital WRITE block and set Digital Pin to 13 (D13 is connected to LED1).
  • Start simulation and LED1 on the Mbed board should start blinking.
Reading and displaying Mbed's analog input
  • In Xcos open examples/Arduino2.zcos

/media/uploads/hudakz/scilab_arduino2.png

  • Double click on the Board setup block and replace the serial port number with mbed's actual virtual serial port number.
  • Double click on the Analog READ block and set Analog Pin to 2.
  • Start simulation and a graph should appear showing the analog signal measured on Mbed's pin A2.

NOTE: Currently, there is bug in the toolbox ARDUINO_ANALOG_READ_sim function (I have reported to Scilab) so the analog readings are not correct.

/media/uploads/hudakz/scilab_graph.png

PID controller
  • In Xcos open examples/Arduino9.zcos

/media/uploads/hudakz/scilab_arduino9.png

Committer:
hudakz
Date:
Mon Jan 18 19:51:22 2021 +0000
Revision:
0:295b7e1c12f3
Data acquisition and device control with Scilab.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:295b7e1c12f3 1 #include "DcMotor.h"
hudakz 0:295b7e1c12f3 2
hudakz 0:295b7e1c12f3 3 /**
hudakz 0:295b7e1c12f3 4 * @brief The DcMotor class
hudakz 0:295b7e1c12f3 5 * @note Driven by L293 or L298
hudakz 0:295b7e1c12f3 6 */
hudakz 0:295b7e1c12f3 7 DcMotor::DcMotor(PinName pin1, PinName pin2, int driverType) :
hudakz 0:295b7e1c12f3 8 _driverType(driverType)
hudakz 0:295b7e1c12f3 9 {
hudakz 0:295b7e1c12f3 10 _pwmOut1 = new PwmOut(pin1);
hudakz 0:295b7e1c12f3 11 _pwmOut1->write(0);
hudakz 0:295b7e1c12f3 12 switch (_driverType) {
hudakz 0:295b7e1c12f3 13 case 0: //L293
hudakz 0:295b7e1c12f3 14 _pwmOut2 = new PwmOut(pin2);
hudakz 0:295b7e1c12f3 15 _pwmOut2->write(0);
hudakz 0:295b7e1c12f3 16 break;
hudakz 0:295b7e1c12f3 17
hudakz 0:295b7e1c12f3 18 case 1: //L297
hudakz 0:295b7e1c12f3 19 _digitalOut2 = new DigitalOut(pin2);
hudakz 0:295b7e1c12f3 20 _digitalOut2->write(0);
hudakz 0:295b7e1c12f3 21 break;
hudakz 0:295b7e1c12f3 22 }
hudakz 0:295b7e1c12f3 23 }
hudakz 0:295b7e1c12f3 24
hudakz 0:295b7e1c12f3 25 /**
hudakz 0:295b7e1c12f3 26 * @brief
hudakz 0:295b7e1c12f3 27 * @note
hudakz 0:295b7e1c12f3 28 * @param
hudakz 0:295b7e1c12f3 29 * @retval
hudakz 0:295b7e1c12f3 30 */
hudakz 0:295b7e1c12f3 31 DcMotor::~DcMotor()
hudakz 0:295b7e1c12f3 32 {
hudakz 0:295b7e1c12f3 33 delete _pwmOut1;
hudakz 0:295b7e1c12f3 34 delete _pwmOut2;
hudakz 0:295b7e1c12f3 35 }
hudakz 0:295b7e1c12f3 36
hudakz 0:295b7e1c12f3 37 /**
hudakz 0:295b7e1c12f3 38 * @brief
hudakz 0:295b7e1c12f3 39 * @note
hudakz 0:295b7e1c12f3 40 * @param
hudakz 0:295b7e1c12f3 41 * @retval
hudakz 0:295b7e1c12f3 42 */
hudakz 0:295b7e1c12f3 43 void DcMotor::run(int direction, float speed)
hudakz 0:295b7e1c12f3 44 {
hudakz 0:295b7e1c12f3 45 switch (_driverType) {
hudakz 0:295b7e1c12f3 46 case 0: //L293
hudakz 0:295b7e1c12f3 47 if (direction == 0) {
hudakz 0:295b7e1c12f3 48 _pwmOut1->write(0);
hudakz 0:295b7e1c12f3 49 _pwmOut2->write(speed);
hudakz 0:295b7e1c12f3 50 }
hudakz 0:295b7e1c12f3 51 else {
hudakz 0:295b7e1c12f3 52 _pwmOut1->write(speed);
hudakz 0:295b7e1c12f3 53 _pwmOut2->write(0);
hudakz 0:295b7e1c12f3 54 }
hudakz 0:295b7e1c12f3 55 break;
hudakz 0:295b7e1c12f3 56
hudakz 0:295b7e1c12f3 57 case 1: //L297
hudakz 0:295b7e1c12f3 58 if (direction == 0)
hudakz 0:295b7e1c12f3 59 _digitalOut2->write(0);
hudakz 0:295b7e1c12f3 60 else
hudakz 0:295b7e1c12f3 61 _digitalOut2->write(1);
hudakz 0:295b7e1c12f3 62
hudakz 0:295b7e1c12f3 63 _pwmOut1->write(speed);
hudakz 0:295b7e1c12f3 64 break;
hudakz 0:295b7e1c12f3 65 }
hudakz 0:295b7e1c12f3 66 }