Modérateurs: Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

Tout l'univers de la domotique, du pilotage et des télécommandes, du multiroom, du stockage et réseau

CODE POUR ARDUINO NANO

Message » 23 Mar 2020 18:56

Bonjour à tous,
Voila un code Arduino Nano Pour Rétro SONY, émetteur IR et rélais double pour arduino, pour commander la descente et la mise en route ainsi que la remonté d'un vidéoprojecteur.

https://www.youtube.com/watch?v=AjLq7CZl1i8

Code :

/* pins

GND breadboard <--> GND Arduino (en cas d'usage d'une breadboard)

D0, D1 connexion Serial
D2
D3 LED infrarouge (exemple TSAL 6200, (câblage pin 3 <-> R 200 Ohms <-> LED Anode || Led Cathode <-> GND)
D4 bouton poussoir haut (câblage pin 4 <-> bouton <-> GND)
D5 bouton poussoir bas (câblage pin 5 <-> bouton <-> GND)
D6
D7
D8
D9 IN1 = relais de montée
D10 IN2 = relais de descente
D11
D12
D13

A0
A1
A2
A3
A4
A5

*/

/* **************** la partie IR **************** */

#include <IRremote.h> // https://github.com/z3t0/Arduino-IRremote

// LED IR connectée sur la pin PWM 3
/* obtention du code on/off de la télécommande sony à obtenir avec IRrecvDumpV2
hypothèse ---> Decoded SONY: 542A (15 bits)
*/
const unsigned long codeProjecteurOFF = 0x542A; // (votre 21546)
const int longeurCodeSony = 15;

IRsend irsend;

/* **************** les relais et boutons **************** */

const byte pinRelaisMonter = 9; // IN1 = relais de montée
const byte pinRelaisDescendre = 10; // IN2 = relais de descente
const byte ACTIF = LOW;
const byte PASSIF = HIGH;
const unsigned long dureeCourseAscenseur = 10000UL;
const unsigned long dureeRefroidissement = 120000UL;

const byte pinBoutonHaut = 4; // bouton poussoir haut
const byte pinBoutonBas = 6; // bouton poussoir bas

/* **************** gestion de l'état **************** */

enum : uint8_t {PROJECTEUR_OFF, PROJECTEUR_ON} etat;

/* **************** fonctions **************** */
void relais(const byte etatMonter, const byte etatDescendre)
{
digitalWrite(pinRelaisMonter, etatMonter);
digitalWrite(pinRelaisDescendre, etatDescendre);
}

void appuiPower() // le protocole Sony dit qu'il faut envoyer la commande 3 fois
{
for (byte i = 0; i < 3; i++) {
irsend.sendSony(codeProjecteurOFF, longeurCodeSony);
delay(40);
}
}

void allumage()
{
relais(PASSIF, ACTIF); // active le relais descend et desactive le relais monte
delay(dureeCourseAscenseur); // attente de la descente
relais(PASSIF, PASSIF); // désactive les 2 relais
appuiPower();
etat = PROJECTEUR_ON;
}

void extinction()
{
appuiPower(); // désactive le retroprojecteur
delay(2000UL); // on attend deux secondes
appuiPower(); // confirmation désactivation du retroprojecteur
delay(dureeRefroidissement); // deux minutes de refroidissement
relais(ACTIF, PASSIF); // active le relais monte et desactive le relais descend
delay(dureeCourseAscenseur); // attente de la fermeture
relais(PASSIF, PASSIF); // désactive les 2 relais
etat = PROJECTEUR_OFF;
}


void setup()
{
pinMode(pinRelaisMonter, OUTPUT); //relais montée
pinMode(pinRelaisDescendre, OUTPUT); // relais descente
relais(PASSIF, PASSIF); //extinction des relais

etat = PROJECTEUR_OFF; // hypothèse, on a aucun moyen de savoir...

pinMode (pinBoutonHaut, INPUT_PULLUP); // activation du PULLUP interne
pinMode (pinBoutonBas, INPUT_PULLUP); // activation du PULLUP interne

}

void loop()
{
switch (etat) {
case PROJECTEUR_OFF:
if (digitalRead(pinBoutonBas) == ACTIF) {
allumage(); // appel bloquant ~10 secondes
}
break;

case PROJECTEUR_ON:
if (digitalRead(pinBoutonHaut) == ACTIF) {
extinction(); // extinction manuelle, appel bloquant plus de 2 minutes !
}
break;
}
}
brachol
 
Messages: 2
Inscription Forum: 23 Mar 2020 18:28
  • offline

Retourner vers Intégration, Domotique, Stockage et Réseau