Pages: 1 2 [3]   Go Down
Author Topic: réguler 220v grace à l'arduino  (Read 3697 times)
0 Members and 1 Guest are viewing this topic.
Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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 : http://fr.wikipedia.org/wiki/Modulation_de_largeur_d'impulsion

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

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,

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

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

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+
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

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

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

Ok.
Dans ce cas donne en plus.
Donne le ino en entier ainsi que le c#
-> en attachement, ca sera plus pratique
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 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:

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

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

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

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

Tu n'as pas pris en compte mes commentaires précédents.
Ça ne sert à rien que je me décarcasse.
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

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

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