Friday, April 19, 2019

Accessing workspace from C-Mex s-function

In Matlab Simulink you can access workspace variables from a C-Mex (C++/C) s-function as follows:



To write to workspace from C-Mex, you can use
#include "matrix.h"
...
mxArray* pa = mxCreateDoubleScalar(12.34);
mexPutVariable("base", "myVarName", pa);

Note that you cannot use myVarName in a simulink block unless you call it before or during InitFcn.

Thursday, April 18, 2019

Matlab Simulink s-function handling of matrix (2D) type parameters

To demonstrate Matlab Simulink s-function handling of matrix (2D) type parameters, I prepared the following demo. The input is a constant block with "Interpret vector parameters as 1-D" unchecked and value [11, 12; 21, 22; 31, 32]:


Wednesday, April 10, 2019

Windows: Build C++ from command line

If you have Visual Studio 2017, to build a C++ project from a "normal" - not developer - command line:
  1. Add the following to system path: 
    1. To use cl.exe: c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx64\x64\
    2. To use vcvars64.bat: c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\
  2.  Open a command window and issue the following commands
    1. vcvars64
    2. If you are in a drive other than C:, let's say D:, you have to issue the command D: because after vcvars64, the drive reverts to C:
    3. cl a.cpp b.cpp
For example, in order to build mms-cpp, I created a batch with the following content:

set PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx64\x64\;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\
call vcvars64
d:
call cl API.cpp Main.cpp

Note that there should be no whitespace after "PATH=" and the additional two paths should not be enclosed with quotation marks.

Sunday, April 07, 2019

Converting RC toy to bluetooth control

As a hobby electronics project, I converted the RC Mighty Excavator toy of my son to bluetooth control. I got rid of the original controller and we can now control the four DC motors of the toy from any Android phone or tablet.


This project had the following benefits:
  1. Learning how to control DC motors with motor drivers and PWM.
  2. Basic understanding of how to use a bluetooth module (HC-06)
  3. Soldering on a perfboard.
  4. Designing a basic PCB, getting it manufactored in China. The fact that EasyEDA works in the browser without the need to install anything, it's integration to JLCPCB and the low price and high quality of PCB production is fantastic.
Parts list:
  1. HC-06 Bluetooth module
  2. Arduino Pro Micro
  3. L293D driver (2x)
  4. PCB or perfboard
  5. 9V battery (2x)
  6. Arduino Bluetooth Controller app installed on Tablet.
Arduino source code is on gist.

End result:


Photos of the process:

Prototyping with Arduino Uno:


Perfboard top (Arduino Pro Micro and two L293 drivers):


Perfboard bottom (a soldering nightmare):


PCB that replaced perfboard:


Components placed on PCB:


Bluetooth module vertically squeezed between L293D and Arduino Pro Micro and soldered to Pro Micro:


PCB and batteries mounted to bottom of toy:


Tuesday, April 02, 2019

Eğitimin hal-i pür melali

Hafta sonu meşhur bir özel okulun ilkokul ikinci sınıfına giden yeğenimin matematik ödevini gördüm. Yeğenim 10 sorudan sadece birini doğru cevaplayabilmiş. Tanımadığım bir çocuk için 10 üzerinden 1 almış dense çocuğun matematikle pek alakasının olmadığını düşünürdüm. Kağıda bakınca yeğenimin çarpma ve toplama işlemlerini doğru yaptığını, işlem sırasını karıştırdığını gördüm, örneğin önce çarpıp toplayacağına toplayıp çarpmış. Doğru yaptığı 6. soru tek işlemden oluşuyor. Bu tür sorular Khan Academy'de 3.sınıf konusu ve 2-step word problems diye geçiyor.

Kardeşim okula teşhis ve tedavi için danıştığında "okuduğunu anlamıyor" cevabı almış, oysa kitap okumayı seven bir çocuktan bahsediyoruz. Doğru ifade "birden fazla aşama içeren problemlere hazır değil, daha basit problemlerle alıştırma yapması lazım" olmalı. Mevcut okul sistemi ustalaştıkça (mastery based) ilerlemeye değil, belli zaman periyotlarında belli konuların anlatılıp geçilmesine dayalı olduğundan eğer veli çocuğun eksiklerini evde gidermezse geride kalan çocuklar matematik fobisi geliştirip kendilerini tamamen kapatıyorlar, matematik katlanmak zorunda oldukları saçma bir eziyete dönüşüyor.

Okullardan ve eğitim sisteminden şikayet etmek pek bir işe yaramıyor, özel okullar da aynı sistemi uyguluyor. Çocuk senin çocuğun, ilgilenmek sana düşüyor. Eğitim sisteminin ustalık tabanlı yönteme geçmesine daha 100 yıl (!) olduğuna göre önerim Khan Academy ve Duolingo gibi online araçlarla çocukların veli gözetiminde desteklenmesidir.

Güncelleme 14.07.2019: Bu yazıdakileri anlattığım videoyu YouTube'a yükledim:

Team lead vs mentor

The difference between a team leader and mentor is that the team lead is responsible for meeting project deadlines while the mentor is concerned with personal development of mentees.