Savoir transférer les données vers la carte Arduino
Savoir commander des LEDs avec Matlab via la carte Arduino
S’initier à la commande avec Matlab
Etc.
Voir le tuto pour plus de détails
Programme Matlab
Principe
L’idée principale consiste à envoyer via le port série à la carte Arduino une valeur entière DET au moment de la détection du mouvement, 0 à l’absence du détection. Pour soulager le port série, on transmit la valeur uniquement au moment de la détection de la façon suivante :
function SerialCOM = openSerial(namePort, baudValue)
% Paramètres de la liaison série (COM) NumBits=8; % Nomble de bits
SerialCOM=instrfind; if(~exist('SerialCOM')) % Création d'un objet Serial Port SerialCOM = serial(namePort,'BaudRate',baudValue,'DataBits', NumBits, 'Parity', 'none'); SerialCOM.Terminator = 'LF'; set(SerialCOM, 'Timeout',2);
% Connexion du port fopen(SerialCOM); else % Fermeture du port delete(SerialCOM);
% Création d'un objet Serial Port SerialCOM = serial(namePort,'BaudRate',baudValue,'DataBits', NumBits, 'Parity', 'none'); SerialCOM.Terminator = 'LF'; set(SerialCOM, 'Timeout',2);
% Connexion du port fopen(SerialCOM); end;
end
Programme complet
close all; clc; clear all;
%% Ouverture de la Caméra (Multi-sources)
Type=0; % 0(GRAY), 1(RGB)
Source=1; % 1(CAM1), 2(CAM2), ...
cam=openCam(Type,Source);
% figure(1); imshow(getsnapshot(cam)); return;
%% Ouverture du port série
namePort='COM3';
baudValue=9600;
SerialCOM = openSerial(namePort, baudValue);
%% Paramètres du programme
M=512; N=512;
Nfil=3; % Taille du Buffer
im_A=zeros(Nfil,M,N);
j=1;
Seuil=0.05;
%% Détection & Transfert vers Arduino
while 1
%% Lecture de l'image courante
im=imadjust(im2double(getsnapshot(cam)));
im_in=imresize(im,[M N]);
%% Calcul de l'intensité / Détection
Moy=squeeze(mean(im_A)) ;
I_diff=Moy(:)-im_in(:);
RMSE=sqrt(mean(I_diff.^2));
DET=20*double(RMSE>Seuil)
%% Mise à jour du buffer
im_A(j,:,:)=im_in;
j=j+1;
if j==Nfil+1
j=1;
end;
%% Transfert vers la carte Arduino
if DET~=0
fprintf(SerialCOM,'%d\n',DET);
end
%% Image Binaire
Imb=(Moy-im_in)>0.5;
%% Affichage
Im=[Imb im_in];
figure(1); imshow(Im);
end
Programme Arduino
On scrute le port série à la recherche de la valeur DET transmis par Matlab. Ensuite, on déclenche une action dés la détection de la valeur en question (allumer une LED, déclencher une alarme, fermeture des ports, envoie un SMS, etc.).