réguler 220v grace à l'arduino

Bonjour à tous,

je développe mon projet en domotique sur une carte Arduino Uno.
je pilote tout cela avec une interface C# et bientôt sur Windows Phone et Android.

Mon projet me permet déjà d'allumer et d’éteindre des LEDS à distance.

L'Arduino est connecté sur des relais, et les relais sont connectés aux ampoules 220v.

Alors je me suis dit que je ne peux pas faire varier la tension 5v au borne des relais donc j'y touche pas.
J'ai réfléchi qu'il fraudait que je passe par une autre sortie de l'arduino qui serais relié à un module, et c'est ce module qui ferais varier la tension au borne de l’ampoule.

Pensez vous que c'est réalisable?

Je suis tombé sur ce site : Electronique - Realisations - Interfaces port parallele LPT 003

Pensez vous que je peux utiliser ce montage pour mon projet?

Y a t'il une adaptation a faire?

Est il pilotable par l'arduino?

J'aimerais faire simple cars je ne suis pas balaise en dev.

Merci

Tout est là :

http://arduino.cc/forum/index.php/topic,33490.0.html

j'ai déjà consulté ce forum mais je n'ai pas compris par qu'elle carte il est passé pour développer le système, les liens sont mort.

C'est des cartes réalisées par lui-même.

Voila mais moi je serais pas faire une tel carte par moi même.
c'est pour ça que j'ai mis le lien Electronique - Realisations - Interfaces port parallele LPT 003

je voulais savoir si je pouvais la piloter avec l'arduino.

Le problème est le même, il faudra faire la carte toi-même.

Bonsoir,

Pour la partie hard, il existe des solutions simples sans avoir à développer ses propres cartes.
Il faut que tu cherches sur le web, il y en a légion !
Juste un exemple chez : Code : w834 kit velleman. montage electronique a realiser soi-meme. necessite au minimum un fer a souder une pince coupante et de la soudure
icare

PS: En général les montages proposés par Rémy du site Sonelec sont de très bonnes qualités

Bonjour,

Icare, cette carte je peux la piloter avec l'arduino?

Bonjour, il te faut un variateur de tension avec commande analogique =
http://www.gotronic.fr/art-kit-k8064-910.htm
Tu fais varié ta tension alternative en fonction de la tension cc en entrée du module.
Pour faire varié une tension de 0 a 12 Vcc avec une carte uno, il te faut = un TIP122 et une alim 12vcc
Tu module un signal PMW sur le TIP122 qui va te faire varier la tension d'entré (12 Vcc)
Recherche sur le net ... genre la = http://www.ecs.umass.edu/ece/m5/tutorials/tip122_transistor_tutorial.html
A plus :wink:

Si j'ai bien compris le fonctionnement le K8064 reçois une tension faible entre " 0 et 12v" puis ajuste le 220v?

j'ai fait un schéma de cablage c'est bien comme ca?

Ouai, synoptiquement parlant c'est ca :relaxed:
Après tu devrais plutôt nous faire un schéma de câblage filaire qu'on vérifie bien ...

Bonsoir,

moonshine972:
Icare, cette carte je peux la piloter avec l'arduino?

Bien sur que tu peux piloter cette carte avec ton Arduino, elle n'attend que les sorties numériques.
icare

Tu veux faire varier l'intensité lumineuse d'ampoules 220V ?

Alors attention, attention !

  1. Quelles types d'ampoules ?
  • Les ampoules a incandescence étant retirées du marché, ca ne peux plus être le cas
  • Les ampoules dites basses consommation qui sont basées sur le même principe que les tubes néon NE SUPPORTENT PAS LE REGLAGE D'INTENSITE
    -> Ca sera donc marche/arrêt uniquement. Avec la carte relais proposée par Icare, c'est impeccable. ne pas oublier de prendre 2 relais (un pour la phase, l'autre pour le neutre) si tu vet être prudent.
  • les ampoules hallogènes supportent le réglage d'intensité par montage à triac
  • les ampoules à LED alimentées sur le 220V peuvent parfois supporter le réglage d'intensité suivant le même principe que les hallogènes mais la pluspart du temps tu gagnera a faire un montage basse tension avec un pilotage des LEDs en PWM via un MOSFET (donc pas en direct sur le 220V).
  1. Le kit Velleman proposé par cutprod fait PEUT ETRE l'affaire si la tension de commande 0..12V est bien isolée du circuit 220V
    Sans voir le schéma du kit je ne peut pas me prononcer.
    Peut-on trouver le schémas ?

En supposant que ca soit le cas, le diagramme de cutprod prend plusieurs raccourcis.

  • L'arduino n'a pas de sortie analogique proportionnelle mais uniquement des sorties modulées en largeur d'impulsion (PWM). Il faut rajouter un condensateur et une résistance pour filtrer et créer une tension proportionnelle. Je mettrait ceci à la sortie du transistor de façon à travailler en saturé/bloqué sur le transitor et non pas en linéraire. En linéaire, ca chauffe plus.

Hello moonshine972,

Voila mais moi je serais pas faire une tel carte par moi même.

Je suis à l'origine du post sur la carte dimmer.
Je suis en train de finaliser une carte 4 entrées + 4 dimmers pilotable par directement par l'arduino en I2C. Elle est basé sur le principe de la commande de triac par retard de phase, donc pour ampoules à incandescence ou halogène. Dès que le proto sur pcb sera prêt, je ferai un feed-back sur le forum.
En attendant, c'est assez simple à mettre en place côté hardware pour faire mumuse: un circuit de détection de zéro (opto p620 + résistances) et un circuit de puissance (optotriac + triac + inductance et capa de filtrage). Ca tient sur breadboard, à condition d'être prudent avec le 230v.

Gromain

Bonjour à tous,

Merci pour vos réponses.

Je vous cache pas que je suis un peu perdu dans vos réponses, je ne pensais pas que sa serai aussi compliqué juste pour diminuer le voltage sur une lampe de 230v.

Le plus simple que j'ai retenue c'est la carte k8064 et celle de Icare.

Si quelqu'un a déjà un typon de carte genre k8064 avec les plans je peux la fabriquer moi même. (j'aime bien le travail manuel :slight_smile: )

Barbudor

J'y avais pas pensé pour les ampoules basse conso....Merci!

Voici le pdf de velleman k8064

Gromain

Pourras tu nous faire un topic bien expliqué avec schéma etc... pour que nous puissions bien comprendre le fonctionnement car par exemple moi je me débrouille en électronique et dev mais je ne suis pas un expert, alors je récupère sur internet a droite a gauche des informations c'est assez compliqué.

Icare

Il se pilote comme le K8064?

Merci

et bien tout est dit là: http://arduino.cc/forum/index.php/topic,33490.0.html

ce qui change dans la carte 4 in / 4 dimmers i2c est qu'elle fait appel à un ATTiny2313, sans lib ni bootloader arduino, faute de mémoire suffisant. Mais ça ne change rien au code et au hardware. Une première version du soft ainsi que les sources kicad sont dispos sur le dépot hardware et software du projet xplduino)

Je ne suis pas moi même un expert en électronique, mais je pense que c'est tout à fait accessible pour la plupart des arduinautes :wink:
La partie soft peu paraitre rédhibitoire car ça fait appel aux interruptions, mais lu calmement c'est tout à fait compréhensible.

Gromain

BOnsoir

Le schéma du kit Velleman fait bien apparaitre un opto-coupleur, donc le circuit est bien isolé.

  • Il y a une résistance ajustable qui permet de régler la gamme d'entrée.
    Apparemment on peut utiliser une commande 0..5V au lieu de 0..12V qui est la gamme maximale : Voir section 23 page 10 :
  • De même il semble qu'il y ait un filtrage en sortie de l'opto coupleur.

Donc il semble bien qu'on puisse utiliser directement une sortie PWM d'Arduino pour piloter cet équipement.

Bonsoir,

Bien vu Barbudor, a mon avis effectivement il y a moyen de l'utiliser directement sur l'arduino.

Quand je l'aurais en main je vous dirai...

Pouvez vous m'aider pour mon code c# svp?

je suis bloqué je ne sais pas comment envoyer la requette a l'arduino.

byte[] data = new byte[1];

private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            byte pwm;
            pwm = Convert.ToByte(slider1.Value);
            _scl.Send(data, 0, 1);
        }

et voici mon code arduino

///////////////Décalration du Pin 9/////////////////
byte Csharp;
int PwmLed = 9;

Dans mon void setup :
void setup()
{//////////////////////Mise en sortie du PIN PWM 9///////////////
pinMode(PwmLed, OUTPUT);
}

 ////////////////Variateur de tension au PIN PWM 9////////////////////     

 if (client.available() > 0) {
      Csharp = client.read();
      client.println(Csharp,DEC);
      analogWrite(PwmLed, int(Csharp));
     ///////////////////////////////////////////////////////////////////////

Merci

Euh, là je crois que ca va être un peut short

De quel type est _scl ?
C'est un Socket ? TCP ? UDP ?
Comment est-il créé ?

Idem, l'extrait de code Arduino est un peu court.

Désolé, voici mon code c#

 public partial class Gestion : Window
    {

        Socket _scl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        byte[] data = new byte[1];

        public Gestion()
        {
            InitializeComponent();

            try
            {

                _scl.Connect(System.Net.IPAddress.Parse("192.168.1.177"), 1337);

            }

            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("9"); // Allumer la cuisine

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button6_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("n");// Eteindre la cuisine

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("1");// allumer le salon

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button7_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("2");// Eteindre le salon

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button3_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("7"); //Allumer la salle de bain

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button8_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("8"); //Eteindre la salle de bain

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button4_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("3");// allumer la chambre 1

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button9_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("4");// Eteindre la chambre 1

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button5_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("5");// allumer l'entrée

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button10_Click(object sender, RoutedEventArgs e)
        {
            try
            {

                byte[] Message = Encoding.ASCII.GetBytes("6");// éteindre l'entrée

                int OctetsEnvoyes = _scl.Send(Message);

            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

        private void button11_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            byte pwm;
            pwm = Convert.ToByte(slider1.Value);
            _scl.Send(data, 0, 1);
        }
    }
}

et mon code arduino

#include <SPI.h>
#include <Ethernet.h>

/* Détails technique de la connexion ethernet */
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1, 177 };
byte gateway[] = { 192,168,1, 1 };

// Attachement d'un objet "server" sur le port 1337
Server server(1337);

///////////////Décalration du Pin 9/////////////////
byte Csharp;
int PwmLed = 9;

void setup()
{
  // Configuration de la ethernet shield et du server
  Ethernet.begin(mac, ip, gateway);
  server.begin();

  // Mise en sortie de la broche avec notre led (par défaut éteinte)
  pinMode(2, OUTPUT); // Salon
  digitalWrite(2, LOW);

  pinMode(3, OUTPUT); // Chambre 1
  digitalWrite(3, LOW);
  
  pinMode(5, OUTPUT);// Entrée
  digitalWrite(5, LOW);
  
  pinMode(6, OUTPUT);// Salle de bain
  digitalWrite(6, LOW);
  
  pinMode(7, OUTPUT); // Cuisine
  digitalWrite(7, LOW);
  
  //////////////////////Mise en sortie du PIN PWM 9///////////////
  pinMode(PwmLed, OUTPUT);
}

void loop()
{
  // Attente de la connexion d'un client
  Client client = server.available();
  if (client && client.connected()) {

    // si le client nous envoi quelque chose
    if (client.available() > 0) {

      // On regarde ce que le client nous demande
      switch(client.read()){
      case '1': // allumer le salon
        digitalWrite(2, HIGH);
        break;
      case '2': // éteindre le salon
        digitalWrite(2, LOW);
        break;
        
        case '3': // allumer la chambre 1
        digitalWrite (3, HIGH);
        break;
        case '4': // éteindre la chambre 1
        digitalWrite(3, LOW);
        break;
        
        case '5': // allumer l'entrée
        digitalWrite (5, HIGH);
        break;
        case '6': // éteindre l'entrée
        digitalWrite(5, LOW);
        break;
        
        case '7': // allumer la salle de bain
        digitalWrite (6, HIGH);
        break;
        case '8': // éteindre la salle de bain
        digitalWrite(6, LOW);
        break;
        
        case '9': // allumer la cuisine
        digitalWrite (7, HIGH);
        break;
        case 'n': // éteindre la cuisine
        digitalWrite(7, LOW);
        break;
        
      /*  case '11': // allumer la chambre 1
        digitalWrite (3, HIGH);
        break;
        case '12': // éteindre la chambre 1
        digitalWrite(3, LOW);
        break;
      */
      
      ////////////////Variateur de tension au PIN PWM 9/////////////////////
      if (client.available() > 0) {
      Csharp = client.read();
      client.println(Csharp,DEC);
      analogWrite(PwmLed, int(Csharp));
     ///////////////////////////////////////////////////////////////////////
    }
    }
  }
}
}