Pages: 1 [2] 3   Go Down
Author Topic: réguler 220v grace à l'arduino  (Read 3688 times)
0 Members and 1 Guest are viewing this topic.
Pays de la betise
Offline Offline
Sr. Member
****
Karma: 4
Posts: 419
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
La partie soft peu paraitre rédhibitoire car ça fait appel aux interruptions, mais lu calmement c'est tout à fait compréhensible.

Gromain
Logged

"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:

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

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

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

Merci
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Désolé, voici mon code c#

Code:
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

Code:
#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));
     ///////////////////////////////////////////////////////////////////////
    }
    }
  }
}
}
Logged

Region ile de france.
Offline Offline
Sr. Member
****
Karma: 3
Posts: 401
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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!



* 0-10VMontage002.JPG (563.23 KB, 3128x1977 - viewed 54 times.)
Logged


Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :

Code:

// 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.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: October 17, 2012, 12:04:47 pm by moonshine972 » Logged

Region ile de france.
Offline Offline
Sr. Member
****
Karma: 3
Posts: 401
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Merci

Code:
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);
        }
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :
Code:
        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

4) 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 :
Code:
byte[] test = { pwm };
« Last Edit: October 17, 2012, 03:08:05 pm by barbudor » Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 : http://arduino.cc/en/Reference/AnalogWrite et as tu compris ce qu'est une sortie PWM ?
Quote
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.
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Rennes
Offline Offline
Sr. Member
****
Karma: 1
Posts: 313
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Pages: 1 [2] 3   Go Up
Jump to: