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 :
if DET~=0
fprintf(SerialCOM,'%d\n',DET);
end
La fonction openCam()
function cam = openCam(Type, Source)
if Type==0
cam = imaqfind; % Trouver l'objet en mémoire (s'il existe!)
if(~exist('cam'))
cam=videoinput('winvideo',Source); % Déclaration
set(cam,'ReturnedColorSpace','GRAY'); % GRAY
triggerconfig(cam, 'manual'); % Définition du Trigger
start(cam); % Déclanchement
else
delete(cam);
cam=videoinput('winvideo',Source);
set(cam,'ReturnedColorSpace','GRAY');
triggerconfig(cam, 'manual');
start(cam);
end;
end;
if Type~=0
cam = imaqfind; % Trouver l'objet en mémoire (s'il existe!)
if(~exist('cam'))
cam=videoinput('winvideo',Source); % Déclaration
set(cam,'ReturnedColorSpace','RGB'); % RGB
triggerconfig(cam, 'manual'); % Définition du Trigger
start(cam); % Déclanchement
else
delete(cam);
cam=videoinput('winvideo',Source);
set(cam,'ReturnedColorSpace','RGB');
triggerconfig(cam, 'manual');
start(cam);
end;
end;
end
La fonction openSerial()
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.).
#define LEDPin1 50
#define LEDPin2 48
// Valeur acquise
int DataDet=0;
const int ValDet=20;
void setup()
{
// Init port série
Serial.begin(9600);
// Init des LEDs
pinMode(LEDPin1, OUTPUT);
pinMode(LEDPin2, OUTPUT);
// Initialisation
digitalWrite(LEDPin1, HIGH);
digitalWrite(LEDPin2, HIGH);
}
void loop()
{
// Lecture du détecteur
DataDet = Serial.parseInt();
// Mise à jour de l'état de la LED
if(DataDet==ValDet)
{
digitalWrite(LEDPin1, HIGH);
digitalWrite(LEDPin2, HIGH);
}
else
{
digitalWrite(LEDPin1, LOW);
digitalWrite(LEDPin2, LOW);
}
}
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Fonctionnement Code Arduino Click to rate this post![Total: 1 Average: 5] Nous Soutenir 💌
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Objectifs Savoir l’importance de l’automatisation de l’analyse technique Saloir les limitations de l’analyse technique Comprendre les notions de prévisions et prédictions Etc. Lire la suite Lire la suite…
Découvrez notre Chaîne YouTube "Devenir Ingénieur" Obtenir le fichier PDF Sommaire0.1 Objectifs du COURS0.2 Introduction0.3 Le BUS I2C0.3.1 Remarque0.4 Protocole0.4.1 Remarque0.5 En-tête0.6 Exemple avec l’esclave DS13070.6.1 Exemple de lecture du DS13070.6.2 Chronogramme complet de l’échange Lire la suite…
You have successfully subscribed to the newsletter
There was an error while trying to send your request. Please try again.
0 commentaire