réguler 220v grace à l'arduino

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));
     ///////////////////////////////////////////////////////////////////////
    }
    }
  }
}
}

Salut j'utilise exactement ce système :
perso je me suis juste fait une petite interface avec un ampli OP en multiplicateur de tension :
l'arduino nous sort une tension par le PWM qui est variable entre 0 et 5V il sufit donc de fair un montage intermediaire pour sortire du 0 10V qui est de plus compatible avec les driver led dimable et les ballaste dimable
sa fonctione trés bien !

si joint le schema!

Ta boucle loop est a revoir
Tu travailles en TCP, mode connecté or tu attaque ta loop() par redemander une nouvelle connection.
Et puis tu n'es pas en v1.0.1
Mets toi a jour

Ceci devrait être plus correct :

// client en global
EthernetClient client;
boolean isClientConnected = false;

void loop()
{
  if ( client.connected() )
  {
    isClientConnected = true;
    if ( client.available() )
    {
      char c = client.read();
      ///// analyse de c, traitement
    }
  }
  else if ( isClientConnected )
  {
    Serial.println( "Client deconnecte" );
    isClientConnected = false;
  }
  else
  {
    client = server.available();
  }
}

Fait de mémoire, je n'ai pas l'arduino avec moi pour vérifier

Ca serait plus simple de le faire en UDP qu'en TCP surtout si tu restes sur réseau local.

Bonjour et merci de vos réponses,

Mon problème vien également du code c# je ne sais pas comment envoyer ma requette a l'aide de ma Slider.
Pouvez vous m'aider svp?

Heloderma-kris,

As tu posté les plans?

barbudor,

ton bout de code c'est pour savoir letat de ma connexion?

si c'est le plan pour l'interface 0-10v oui tu l'a en desous de mon premier poste avec les valeur des resistance et des condensateur.

Merci Heloderma-kris j'etais pas connecté c'est pour ca.

Je coince sur mon code c#, vous pouvez m'aider svp?

Merci

 private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            byte pwm;
            pwm = Convert.ToByte(slider1.Value);
            data[0] = pwm;
            byte[] test = pwm;
            int OctetsEnvoyes = _scl.Send(test);
        }
  1. Pour s'interfacer avec le kit Velleman tu n'a pas besoin de montage 0..10V ni de filtre. Relis mon post précédant

  2. Mon code est pour te monter le principe d'une boucle correcte pour gérer l'état de connexion et de déconnexion.

  3. Pour envoyer des valeurs liées à une scroll-bar en C# il faut surcharger les fonctions associées, essentiellement

  • Scroll : méthode qui est appellée pendant que le slider bouge

par exemple :

        private void mascrollbar_Scroll(object sender, ScrollEventArgs e)
        {
            // la nouvelle valeur est dans e.NewValue;
        }

Pour créer la surcharge :

  • Aller dans le designer
  • Cliquer avec le bouton droit sur la scrollbar et choisir propriétés
  • Dans la fenêtre propriétés on voit généralement les valeurs.
  • Pour voir les fonctions, cliquer en haut de la fenêtre sur la petite icone en forme d'éclair
  • Double cliquer à droite de "Scroll"
  • Une nouvelle fonction similaire à celle ci-dessus va être créé
  • Dans cette fonction envoyer ton message de valeur
  1. Corollaire : il va falloir que tu améliore ton protocole pour transmettre des messages plus complexes
    Comme indiqué précédemment, tu aurait du commencer en UDP au lieu de TCP, c'est plus simple.

EDIT
5) Désolé , nos posts se sont croisés :

 byte[] test = { pwm };

Bonjour Barbudor,

Merci pour ton aide mais au bord du pin9 je n'ai aucune tension qui varie.

Pourtant je n'ai pas de message d'erreur d'ou penses tu que sa peut venir?

Merci

Est-ce que tu reçois les paquets UDP ? --> Serial.print

Est-ce que tu passe bien dans les bonnes lignes de code ? --> Serial.print

Que veux tu dire par : "je n'ai aucune tension qui varie." ?
As tu lu ceci : analogWrite() - Arduino Reference et as tu compris ce qu'est une sortie PWM ?

Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal is approximately 490 Hz.

Le signal de sortie sur une broche PWM n'est pas une tension variable mais un signal rectangulaire a rapport cyclique variable.

Je ne sais pas comment vérifier si je reçois mes paquets Udp.

Que veux tu dires " si je passes bien dans les bonnes lignes de code?"

D’après mes recherches le PIN 9 permettaient de faire varier une tension de 0 à 5 volts.

C'est le PIN 9 (PWM) que j'aurais utilisé pour le module VELLEMAN K8064, comme ça j'aurais pu faire varier ma tension sur mes ampoules.

Dans mon code C# j'utilise un Slider et grâce a lui j'aurais pu augmenter ou diminuer ma tension.

C'est un truc que j'ai du mal à comprendre ça, pourquoi avoir appelé analogWrite() une fonction qui ne génère pas une tension analogique!
Ca porte sérieusement à confusion.
pwmWrite() aurait été infiniment plus clair.

C'est d'ailleurs dommage que l'Arduino ne soit pas capable de générer une tension analogique sans un bricolage à base de PWM+filtre RC en sortie.

@moonshine972

Non, analogWrite() ne génère pas une tension analogique 0..5V . Ca reste un signal logique qui baggotte entre 0 et 5V mais le rapport cycle (rapport entre le temps à 0V et le temps à 5V) dépend de la valeur du analogWrite().
Avec 0, la broche est tout le temps en bas
Avec 118, la broche est 33% à 5V et 66% à 0V
Avec 128, la broche est 50% à 5V et 50% à 0V
Le tout a une fréquence de 490Hz ou un peu plus d'1kHz suivant les pins.

Si tu met un voltmètre, je ne suis pas sûr de ce qu'il va lire.

Si tu ne sait pas ce qu'est le PWM, renseigne toi : Modulation de largeur d'impulsion — Wikipédia

@patg
Je suis d'accord sur le nom mais pas sur le choix du PWM vs sortie analogique.
Le PWM sur l'Arduino est essentiellement destiné à piloter des LEDs ou des moteurs ou des servos.
Une vraie sortie analogique (DAC) ne serait d'aucune utilité dans ces cas qui représentent 99% des applications Arduino.
Rien n’empêche à quelqu'un qui veut un vrai DAC de mettre un DAC SPI ou I2C.

Bonjour,

Merci barbudor,

Moi je voulais contrôler le voltage sur la sortie de l'arduino sur le pin 9 par exemple, car le module k8064 fonctionne avec une tension variable.

Il faut que je revois mon code alors?

J'ai déjà expliqué plus haut pourquoi le module k8064 me semble parfaitement compatible avec une sortie PWM de l'Arduino sans aucun montage supplémentaire.

  1. D'après la doc (dont tu as fournis le lien mais que tu n'a peut être pas lu) il est précisé que le module peut fonctionner à vec une commande 0..5V grâce à la présence d'une résistance ajustable. Il n'est donc pas nécessaire de chercher à "amplifier" le signal en 0..10V

  2. Normalement pour convertir un signal PWM en une tension variable, il faut mettre un filtre RC (résistance + capa).
    Mais sur le schéma dudit module, on s’aperçoit qu'il y a déjà un filtre après l'optocoupleur.
    Donc tu peux fournir au module un signal PWM et il fera la conversion tout seul.
    Au pire si çà ne marche pas tu pourras toujours mettre un filtre ultérieurement.

Pour ce qui est de ton code, commence déjà par mettre une LED (avec la bonne résistance série) sur la PIN 9 et fait en sorte que l'ensemble fonctionne.
Si tu arrives à faire changer l'intensité de la LED alors tu arriveras à utiliser le module.

A+

Merci Barbudor, J'ai compris ce que tu veux me dire, mais mon problème c'est que j'arrive pas a faire varier l'intensiter de la laide, j'ai l’impression que mon code ne fonctionne pas.

Ok.
Dans ce cas donne en plus.
Donne le ino en entier ainsi que le c#
-> en attachement, ca sera plus pratique

Je sais que l'udp avait déja été conseillé, ainsi que les boucles mais je n'y suis pas parvenu a faire mes modifs.

Mon code C# en entier:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Net.Sockets;

namespace Domohome_v1._0
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class Gestion : Window
    {

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

        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);

            byte[] Csharp = {pwm};
            int OctetsEnvoye = _scl.Send(Csharp);
            
            textBox1.Text = Convert.ToString (pwm);
        
          }
    }
}

Voici 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/////////////////

int LED = 9;

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

  // Mise en sortie des broches  (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(LED, OUTPUT);
}

void loop()
{
  byte Csharp;
  
  // 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/////////////////////
      Csharp = client.read();
      analogWrite(LED, Csharp);
     ///////////////////////////////////////////////////////////////////////
    }
    }
  }
}

Tu n'as pas pris en compte mes commentaires précédents.
Ça ne sert à rien que je me décarcasse.

Merci en tout cas pour ton aide barbudor ainsi que les autres.