Sleep monitoring / surveillance du sommeil

Hello JP,

Ca y est, j'ai une bonne première release de mon "Sleep monitoring" ...

Je dois pouvoir déclencher un switch off sans trop me gourrer ... Saus erreur, le programme fait une stat de variation des franges des formes de l'image et peut conclure à l'endormissement d'un spectateur

Reste donc un Sketch Aduino qui active un relai capable de gérer du 220V ... une sorte de coupe circuit donc... (moins complexe j'espère que le FlySpott...)

Es-tu partant ? ... si on se contente (dans un premier temps) d'un simple interrupteur... et peut-être d'un télérupteur dans un deuxième temps?

Je n'ai pas encore beaucoup réfléchi mais je ne vois qu'un pb: Lorsque qu'on lance le programme, le relai doit être impérativement sur ON pour ne pas couper la télé ou la radio qui seraient sur le circuit...

A te lire...

Ol

PS dans ce cas on devra peut-être changer de thème ...

Oui faire un nouveau sujet

Bonsoir J-M-L,

Oui un nouveau sujet mais peut-être moins lourd techniquement que le précédent...

Ce sera mieux ici donc

Copie @jpbbricole

Yesss!

Bonsoir olpica

C'est reparti!

On peut faire avec de simples ordres, envoyés comme le programme précédent:
POWERON15 et POWEROFF.
On peut très bien imaginer un POWERON10 qui a une durée de vie de 10 minutes et qui devrai être "rechargé" avant échéance, sinon le sketch fait POWEROFF de sa propre initiative.

Qu'en penses tu?

Bonne soirée
jpbbricole

Hey JP,

Super ! je vois que tu es en forme !

je réfléchis à ta proposition...

Oui parfait impec pour un Poweron10 ou 15 mais après le Poweroff, disons le lendemain, il faut pouvoir remettre la télé ou la radio en marche... sans nécessairement le programme de veille en fonction, d'où la nécessité d'un bouton poussoir permettant un Poweron manuel ... ?

Bonjour olpica

Voilà une première version, elle se commande par 2 instructions, PONnn et POF

PON10 provoque un restart du relais de 10 minutes.
PON6 provoque un restart du relais de 6 minutes.
etc...
POF ou PON0 ou PON font tomber le relais.

Le relais est connecté à la pin relaisPin et tire avec le signal relaisOnEtat

Pour accélérer les essais, tu peux modifier la variable secondesMinute ainsi, si cette variable vaut 1, une minute dure 1 seconde.
unsigned long secondesMinute = 1UL; // Pour accélérer les essais, normalement 60UL

Le programme:

/*
    Name:       olpica_MonitoringSommeil.ino
    Created:	18.01.2024
    Author:     jpbbricole
				https://forum.arduino.cc/t/sleep-monitoring-surveillance-du-sommeil/1212778

				Reçoit périodiquement un PON10 pour restarter un relais d'alimentation, ici de 10 minutes
	19.01.2024	Première version et mode d'emploi #9
*/
const String progrVersion = "Vers. PON";

#include <SoftwareSerial.h>
//------------------------------------- Serial de Free Basic (fb)
const int fbRxPin = A1;     // RX de FB, à raccorder sur TX du module FTDI CNC shield Hold
const int fbTxPin = A2; // TX de FB, à raccorder sur RX du module FTDI CNC shield Resume
SoftwareSerial fbSerial(fbRxPin, fbTxPin);     // Création de l'interface série de FB

//------------------------------------- Relais 
const int relaisPin = 7;     // Commande relais On/Off
const int relaisOnEtat = LOW;     // Etat pour faire tirer le relais

unsigned long	relaisOnTempo = 10UL * 60UL * 1000UL;     // Temporisation du relais  10 minutes
unsigned long	relaisOnMillis = 0;      // Temporisation deu relais chrono

unsigned long	secondesMinute = 1UL;      // Pour accélérer les essais, normalement 60UL

//------------------------------------- Commandes (cmd)
String cmdRx = "";       // Commande reçue du moniteur ou de Bluetooth
boolean cmdRecue = false;     // Si une nouvele commande reçue du moniteur ou de Bluetooth

void setup()
{
	Serial.begin(9600);
	fbSerial.begin(9600);

	Serial.println(progrVersion);

	pinMode(relaisPin, OUTPUT);
	digitalWrite(relaisPin, !relaisOnEtat);     // Faire tomber le relais
}

void loop()
{
	//--------------------------------- Temporisation
	if (relaisOnTempo != 0 && (millis() - relaisOnMillis >= relaisOnTempo))     // Si fin de la temporisation
	{
		relaisStart(0);
	}
	//--------------------------------- Lire les ports série
	serialEvent();     // https://www.arduino.cc/reference/en/language/functions/communication/serial/serialevent/
	fbSerialEvent();

	if (cmdRecue)
	{
		cmdTraitement(cmdRx);
		cmdRecue = false;
	}
	
}
void relaisStart( int tempo)
{
	if (tempo != 0)     // Si démarrage relais
	{
		Serial.println("Relais restart " + String(tempo) + " minutes");

		relaisOnTempo = cmdRx.toInt() * secondesMinute * 1000;
		relaisOnMillis = millis();     // Démarrage du chrono
		digitalWrite(relaisPin, relaisOnEtat);     // Le relais tire
	}
	else
	{
		relaisOnTempo = 0;
		digitalWrite(relaisPin, !relaisOnEtat);     // Le relais tire
	}
}
/*
	Traitement des commandes reçues de FB
	PON10 pour restart pour 10 minutes
	POF pour couper l'alimentation

*/
void cmdTraitement(String& cmdRx)
{
	Serial.println("\nCommande : " + cmdRx);
	cmdRx.toUpperCase();     // Tout en majuscules
	cmdRx.replace(" ", "");     // Supprimer les espaces

	if (cmdRx.startsWith("PON"))     // Power ON
	{
		cmdRx.replace("PON", "");     // Ne garder que le temps
		relaisStart(cmdRx.toInt());     // Démarrage relais
	} 
	else if (cmdRx == "POF")     // Power OFF
	{
		relaisStart(0);     // Arrêt relais
	}
	else
	{
		Serial.println("\nCommande : " + cmdRx + " INCONNUE !!!");
	}
}
//------------------------------------- Ports série
void serialEvent()     // Serial
{
	if (Serial.available())
	{
		cmdRx = Serial.readStringUntil('\n');     // https://reference.arduino.cc/reference/fr/language/functions/communication/serial/readstringuntil
		cmdRx.trim();     // Pour nettoyer cmdRx  https://docs.arduino.cc/built-in-examples/strings/StringLengthTrim?

		cmdRecue = true;
	}
}

//------------------------------------- Ports série Free Basic
void fbSerialEvent()     // Free Basic
{
	if (fbSerial.available())
	{
		cmdRx = fbSerial.readStringUntil('\n');
		cmdRx.trim();     // Pour nettoyer cmdRx

		cmdRecue = true;
	}
}

Bonne journée, ici un froid de canard.
jpbbricole

Waou ! je rêve ! Merci JP ! du coup je suis à la bourre pour tester...

Je m'interroge sur mes relais actuels: je crois qu'ils ne peuvent pas gérer du 220v... as-tu une préconisation ?

Je commande une nouvelle Arduino Uno et un relai (et un bouton permettant le power on/off) ,
n'hésite pas à me donner les bonnes références si tu les as...

Ici ça se réchauffe après un -6°...

Ol

Ce n'est pas nécessaire, tu as tout le temps, chez nous on a une expression qui dit: "il n'y a pas le feu au lac" :wink:
Je ne sais pas quelle puissance du dois commuter, mais regarde du côté des relais électroniques (SSR)
image

Bonjour JP,

et Merci pour la piste SSR!

Après navig chez Arduino, Bangood, Aliexpres etc Oui c'est bien un relai de type SSR qu'il me faut,
avec ce type de montage pour un contact 220V :

faut - il commander une carte Uno particulière ? et quel relai SSR ? je m'en remet à toi...

OL

Bonjour olpica

Déjà au boulot :wink:
Pas de UNO particulier et un de ces SSR.

Une toute belle journée à toi!
jpbbricole

celui là par exemple ?

Déclencheur de bas niveau technique pour contrôle iss ménagers SCM, kit de bricolage Ardu37, un canal, citations, 5V, 12V, 1 - AliExpress

Ce n'est pas un SSR.

ALors celui-ci :sweat_smile:
Vente SSR -25DD/ 40DD Commande CC SSR Boîtier blanc Relais à semi-conducteurs monophasé - Banggood Français

Ca ne va pas aller pour ce que tu veux faire, le relais actuel suffit.

On est toujours dans la commande radio?

C super si le relai actuel convient.. je n'aurai pas besoin d'approvisionner...

C'est plutôt la télé que je veux arrêter

Ok, je commence à mélanger ... :woozy_face:
Je pense que pour la télé, le SSR serait mieux, mais je n'ai pas d'expérience.

Le relai doit pouvoir couper du 220...