ChatGPT pour

Arduino




ChatGPT pour Arduino - C'est surprenant

Apprenez à utiliser l'aide de l'IA pour apprendre plus rapidement la programmation Arduino, trouver des bogues et comprendre les programmes ligne par ligne !

Puneeth

9 janvier 2023ChatGPT : votre compagnon d'apprentissage virtuel

Introduction

L'apprentissage de la programmation embarquée était difficile. J'ai trouvé quelques exemples de démarrage qui m'ont aidé, mais lorsque j'ai essayé de créer mon propre code, j'ai eu du mal à trouver des réponses à mes questions. C'est alors que j'ai cherché de l'aide.

Obtenir une bonne aide n'est pas facile. J'ai posté des questions sur les forums mais les réponses ont pris beaucoup de temps. Les réponses utiles n'étaient pas cohérentes, certaines étaient difficiles et certaines se moquaient même de mes compétences en codage😢. Cela m'a juste laissé plus confus et frustré 😒

Cela conduit à la question ironique : la technologie peut-elle répondre aux questions que je me pose sur le codage afin que je puisse obtenir des réponses sans être critiqué ? L'intelligence artificielle telle que ChatGPT peut-elle aider à trouver des réponses immédiatement ? Cela peut-il m'aider à trouver une bonne explication pour les codes complexes ? 🤔

Dans cet article, nous allons jouer avec l'application ChatGPT AI. C'est comme envoyer un SMS à un ami ! Nous lui demanderons d'écrire du code Arduino pour nous et de voir comment cela peut nous aider à trouver et à corriger les bogues. Plus tard, nous utiliserons ChatGPT pour créer un projet Wokwi Arduino et découvrirons quelques exemples de la manière dont il peut fournir rapidement des réponses complètes.

Commençons!

OK, ChatGPT ! Construisez-moi le code Arduino

Dans cette section, voyons comment créer quelques exemples Arduino à l'aide de ChatGPT. Si c'est la première fois que vous utilisez ChatGPT, visitez ce lien et créez un compte pour commencer.

💡ChatGPT est un chatbot développé par OpenAI. Il comprend vos questions et vos réponses d'une manière étonnamment très humaine.

Une fois que vous avez créé un compte, vous pouvez commencer à discuter avec l'application en suivant les étapes ci-dessous :

  1. Visitez le site .
  2. Cliquez sur le bouton + Nouveau chat .
  3. Un champ de texte apparaîtra. Tapez votre requête, puis envoyez.

Premiers pas avec ChatGPT

Projet Arduino LED Blink utilisant ChatGPT

Au lieu de commencer par le didacticiel Arduino typique consistant à faire clignoter une LED, défions ChatGPT en lui demandant de générer un code Arduino pour faire clignoter deux LED en séquence. Voici un projet prédéfini où vous pouvez tester le code. Vous pouvez copier et coller le code généré par ChatGPT dans la fenêtre de l'éditeur et le tester.

J'ai entré la requête ci-dessous dans la fenêtre de discussion.

Build an Arduino code to blink two LEDs alternatively every 500 ms. The LEDs are connected to pins 3 and 4.

ChatGPT : votre compagnon convivial et utile pour apprendre et coder

Voici le code fourni par ChatGPT.

const int LED1 = 3;   // LED connected to digital pin 3
const int LED2 = 4;   // LED connected to digital pin 4

void setup() {
  // Set the two LED pins as outputs
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
}

void loop() {
  // Turn on LED1
  digitalWrite(LED1, HIGH);
  // Turn off LED2
  digitalWrite(LED2, LOW);
  // Wait for 500 ms
  delay(500);

  // Turn on LED2
  digitalWrite(LED2, HIGH);
  // Turn off LED1
  digitalWrite(LED1, LOW);
  // Wait for 500 ms
  delay(500);
}

Notez que des commentaires simples et précis sont également inclus dans le code. ChatGPT a également inclus des notes supplémentaires pour expliquer le code qu'il a généré :

"Ce croquis allumera une LED, éteindra l'autre LED, attendra 500 ms, puis allumera l'autre LED et éteindra la première LED. Cela se répétera indéfiniment.
Notez que ce code suppose que les LED sont connectées aux broches numériques 3 et 4 et qu'elles sont actives-bas (ce qui signifie qu'elles s'allument lorsque la broche numérique est définie sur LOW et s'éteignent lorsque la broche numérique est définie sur HIGH). Si vos LED sont connectées différemment ou sont actives à l'état haut, vous devrez peut-être modifier le code en conséquence.

En tant que débutant, si vous postiez cette question dans un forum ou une communauté en ligne, vous auriez de la chance d'avoir une réponse aussi claire et détaillée. De plus, vous devrez généralement attendre des heures ou des jours. Avec ChatGPT, vous obtenez des réponses instantanément sans risquer de vous moquer ou de vous contenter de chercher sur Google.

ChatGPT : votre compagnon qui vous fait gagner du temps dans l'apprentissage et le codage

Revenons au projet en cours, copions le code et collons-le dans le modèle de projet Wokwi partagé précédemment.

Copie du code Arduino généré sur ChatGPT

Voici la sortie simulée.

Super! Le code Arduino généré par ChatGPT est non seulement fonctionnel, mais il est également bien organisé et comprend des explications utiles. Voyons un autre exemple.

Projet Arduino Buzzer utilisant ChatGPT

Dans cet exemple, construisons un projet Arduino qui joue une mélodie sur le buzzer connecté à pin 3.

Voici la requête envoyée à ChatGPT.

build arduino code to create a music using a buzzer connected to pin 3

ChatGPT a créé la mélodie "Twinkle Twinkle little star". J'ai copié le code généré par l'application ChatGPT dans l'exemple de projet Wokwi. Suivez ce lien pour jouer avec la simulation.

Le code généré utilise l'opérateur décalage vers la gauche ( << ). Vous pouvez demander à ChatGPT de vous expliquer les opérateurs de quart ou demander d'autres options que les opérateurs de quart.

ChatGPT : votre source de référence pour des réponses complètes💡ChatGPT peut fournir plusieurs solutions à un problème, ce qui aide à apprendre rapidement grâce à un dialogue de va-et-vient. Vous pouvez également montrer le code généré par ChatGPT à des développeurs expérimentés et obtenir leurs commentaires. Cela peut conduire à apprendre des façons plus efficaces de coder.

Vous pouvez trouver différentes façons de résoudre les problèmes en régénérant les réponses

Remarque : Pour chaque requête, la réponse peut être différente. Cliquer sur le bouton Régénérer la réponse vous permet de voir si ChatGPT peut générer une réponse différente. De cette façon, non seulement vous trouvez une réponse plus appropriée, mais vous apprenez également différentes méthodes pour résoudre le même problème. Vous pouvez demander à ChatGPT d'expliquer les différences pour élargir votre répertoire de connaissances.

Projet de gradateur LED utilisant un potentiomètre

Dans cet exemple, connectons un potentiomètre et une LED à la carte Arduino. Nous allons contrôler la luminosité de la LED à l'aide du potentiomètre.

Voici la requête que j'ai envoyée à ChatGPT.

Write a code to connect potentiometer to analog A0 and led to pin 3 of arduino

Voici la réponse de ChatGPT.

"Voici un exemple de code qui montre comment connecter un potentiomètre à l'entrée analogique A0 et une LED à la broche de sortie numérique 3 sur un Arduino."
const int potentiometerPin = A0;  
// potentiometer is connected to analog pin A0
const int ledPin = 3;             
// LED is connected to digital pin 3

void setup() {
  pinMode(ledPin, OUTPUT);        
  // set the LED pin as an output
}

void loop() {
  // read the value of the potentiometer
  int potentiometerValue = analogRead(potentiometerPin);
  
  // map the potentiometer value to a range suitable for the LED
  int ledBrightness = map(potentiometerValue, 0, 1023, 0, 255);
  
  // set the brightness of the LED
  analogWrite(ledPin, ledBrightness);
}

La soultion était appropriée. Vous pouvez vérifier facilement la fonctionnalité du programme ci-dessus sur Wokwi ici .

OK, ChatGPT ! Pouvez-vous expliquer ce code Arduino ?


Dans cette section, nous allons explorer comment ChatGPT peut nous aider à comprendre le code Arduino.

💡Utilisez le ``` (trois backticks) pour indiquer le début et la fin de la section de code. Cela aidera ChatGPT à détecter facilement la section de code.

Exemple 1 - Exemple de code de lecture analogique


Nous utiliserons le code Arduino ci-dessous dans le cadre de la requête.

“Explain me the below Arduino code line-by-line”

void setup() {
  Serial.begin(115200);
  pinMode(A0, INPUT);
}

void loop() {
  int value = analogRead(A0);
  Serial.println(value);
  delay(100);
}

Voici la réponse de ChatGPT :

Certainement! Voici une explication de chaque ligne de code :
void setup() {
Cette ligne de code définit la fonction setup(). La fonction setup() est appelée une fois lorsque la carte Arduino est mise sous tension ou réinitialisée. Il est généralement utilisé pour initialiser des variables, des modes de broche et d'autres tâches de configuration.
Serial.begin(115200);
Cette ligne de code initialise la communication série à un débit en bauds de 115200 bits par seconde. Ceci est utilisé pour envoyer des données de la carte Arduino à un ordinateur ou à un autre appareil via une connexion série.
pinMode(A0, INPUT);
Cette ligne de code définit le mode de broche pour la broche d'entrée analogique A0 sur INPUT. Cela signifie que la broche sera utilisée pour lire les valeurs d'entrée des capteurs ou d'autres appareils.
void loop() {
Cette ligne de code définit la fonction loop(). La fonction loop() est appelée à plusieurs reprises après la fin de la fonction setup(). Il est utilisé pour effectuer des tâches qui doivent être répétées indéfiniment, telles que la lecture des valeurs des capteurs ou le contrôle des sorties.
int value = analogRead(A0);
Cette ligne de code lit une valeur analogique à partir de la broche A0 et la stocke dans une variable appelée valeur. La fonction analogRead() convertit la tension analogique sur la broche en une valeur numérique comprise entre 0 et 1023.
  Serial.println(value);
Cette ligne de code imprime la valeur de value sur la connexion série. La fonction println() ajoute un caractère de nouvelle ligne à la fin de la sortie, de sorte que la valeur sera imprimée sur une nouvelle ligne à chaque fois qu'elle est envoyée.
  delay(100);
Cette ligne de code fait s'arrêter l'Arduino pendant 100 millisecondes (1/10e de seconde) avant de passer à l'itération suivante de la fonction loop(). Ceci est utilisé pour ralentir la boucle et rendre la sortie plus lisible.

Comme vous pouvez le voir, l'application ChatGPT fait un très bon travail pour expliquer le code de base.

Exemple 2 - Exemple de capteur DHT22 sur la page d'accueil de Wokwi

Dans cet exemple, envoyons une requête sur le code du capteur DHT22 . Voici la réponse reçue.

"Certainement! Voici une explication de chaque ligne de code :
#include "DHTesp.h"
Cette ligne de code inclut la bibliothèque DHTesp, qui fournit des fonctions pour lire les valeurs de température et d'humidité à partir d'un capteur DHT22. La bibliothèque doit être installée dans votre environnement de développement Arduino pour que ce code fonctionne.
const int DHT_PIN = 15;
Cette ligne de code définit un entier constant appelé DHT_PIN et définit sa valeur sur 15. La constante DHT_PIN est utilisée pour spécifier à quelle broche numérique le capteur DHT22 est connecté sur la carte ESP32.
DHTesp dhtSensor;
Cette ligne de code crée une instance de la classe DHTesp appelée dhtSensor. La classe DHTesp fait partie de la bibliothèque DHTesp et fournit des fonctions pour lire les valeurs de température et d'humidité à partir d'un capteur DHT22.
void setup() {
  Serial.begin(115200);
  dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
Il s'agit de la fonction setup(), qui est appelée une fois lorsque la carte Arduino est mise sous tension ou réinitialisée. Il initialise la communication série à un débit en bauds de 115200 bits par seconde et configure l'objet dhtSensor pour qu'il lise à partir du capteur DHT22 sur la broche DHT_PIN.
  void loop() {
  TempAndHumidity data = dhtSensor.getTempAndHumidity();
Il s'agit de la fonction loop(), qui est appelée à plusieurs reprises après la fin de la fonction setup(). Il utilise la fonction getTempAndHumidity() de l'objet dhtSensor pour lire les valeurs de température et d'humidité du capteur DHT22. Les valeurs sont renvoyées sous la forme d'une structure TempAndHumidity, qui est stockée dans une variable appelée data.
  Serial.println("Temp: " + String(data.temperature, 2) + "°C");
  Serial.println("Humidity: " + String(data.humidity, 1) + "%");
  Serial.println("---");
Ce bloc de code imprime les valeurs de température et d'humidité sur la connexion série. Les champs de température et d'humidité de la structure de données sont convertis en chaînes à l'aide de la fonction String(), et les chaînes résultantes sont concaténées avec un autre texte pour créer la chaîne de sortie finale. La fonction println() est utilisée pour imprimer la chaîne sur la connexion série et ajouter un caractère de saut de ligne à la fin.
  delay(1000);
}
Cette ligne de code fait s'arrêter l'Arduino pendant 1000 millisecondes (1 seconde) avant de passer à l'itération suivante de la fonction loop(). Ceci est utilisé pour ralentir la boucle et rendre la sortie plus lisible.

💡Jouer avec les mots de vos requêtes peut améliorer les réponses de ChatGPT. « Ligne par ligne » dans ce cas a permis d'obtenir une explication plus détaillée, mais sans cela, l'explication aurait été plus courte.

OK, ChatGPT ! S'il vous plaît aidez-moi à réparer le code Arduino 😨

Je crois que les capacités de ChatGPT que nous avons explorées précédemment sont utiles dans votre parcours d'apprentissage Arduino. En plus de cela, saviez-vous que ChatGPT peut également vous aider à corriger les erreurs courantes ?

La fonction de correction de bug🪲 peut vous aider à gagner du temps et à obtenir des réponses pertinentes immédiatement. Pas besoin d'attendre longtemps pour obtenir des réponses sur la façon de résoudre le problème de votre code.

Exemple concret 1
Problème : https://forum.arduino.cc/t/push-button-question/237365

J'ai envoyé le même texte posté dans le forum à ChatGPT.

Hello, I am using a pushbutton trigger. I would like to know how to tell the arduino to ignore the input unless it persists for more than a half second. ( if I quickly push and release, I want nothing to happen, but If I hold for at least 1/2 second, I want it to trigger) I keep getting some noise that sets it of randomly. My code and setup basically looks like this with relays instead of led outputs.

```
#define relay1 = 11
#define relay2 = 12
#define relay3 = 7
const int trigger = 9;
int triggerState = 0;

void setup() {
  pinMode(trigger, INPUT);
}

void loop()  {
  triggerState = digitalRead(trigger);

  if (triggerState == HIGH) {

    digitalWrite(relay1, HIGH);  // relay1 is triggered
    delay(1000);

  }  //End of if()
  else {
    digitalWrite(relay3, LOW);
    digitalWrite(relay2, LOW);
    digitalWrite(relay1, LOW);
  }
} //End of loop()
```

Voici la réponse du ChatGPT.

"Pour que l'Arduino ignore l'entrée à moins qu'elle ne persiste plus d'une demi-seconde, vous pouvez utiliser une variable pour stocker l'heure à laquelle le bouton a été enfoncé pour la première fois, puis vérifier si suffisamment de temps s'est écoulé avant de déclencher le relais. Voici un exemple de la façon dont vous pouvez procéder :
#define relay1 = 11
#define relay2 = 12
#define relay3 = 7
const int trigger = 9;
int triggerState = 0;

// Declare a variable to store the time at which the button was pressed
unsigned long buttonPressTime;

void setup() {
  pinMode(trigger, INPUT);
}

void loop()  {
  triggerState = digitalRead(trigger);

  // Check if the button has just been pressed
  if (triggerState == HIGH && buttonPressTime == 0) {
    // Store the time at which the button was pressed
    buttonPressTime = millis();
  }

  // Check if the button is still pressed and enough time has elapsed
  if (triggerState == HIGH && millis() - buttonPressTime > 500) {
    digitalWrite(relay1, HIGH);  // relay1 is triggered
    delay(1000);
  }  //End of if()
  else {
    // Reset the button press time and turn off the relays
    buttonPressTime = 0;
    digitalWrite(relay3, LOW);
    digitalWrite(relay2, LOW);
    digitalWrite(relay1, LOW);
  }
} //End of loop()
Dans ce code, la fonction millis() est utilisée pour obtenir l'heure actuelle en millisecondes. La variable buttonPressTime est initialisée à 0, ce qui signifie que le bouton n'a pas été appuyé. Lorsque le bouton est enfoncé, buttonPressTime est réglé sur l'heure actuelle.
Ensuite, dans la deuxième instruction if, le temps écoulé depuis que le bouton a été enfoncé est vérifié à l'aide de millis() - buttonPressTime. Si le temps écoulé est supérieur à 500 millisecondes (1/2 seconde), le relais est déclenché. Si le bouton est relâché ou si le temps écoulé est inférieur à 500 millisecondes, la variable buttonPressTime est remise à 0 et les relais sont désactivés.

La réponse suggérée est exactement ce que je pensais. La façon dont il présente la suggestion est impressionnante. C'est formidable d'avoir un exemple de code complet au lieu de quelques idées incomplètes.

💡ChatGPT a fourni un code fonctionnel. Cependant, il est également possible d'obtenir une réponse complètement différente ou peut-être une solution avec des bogues. Veuillez tester et vérifier les solutions. Essayez également de reformuler la question.

Exemple concret 2

Voyons un autre énoncé de problème du forum Arduino. J'ai utilisé exactement la même question pour la requête et voici la réponse que j'ai reçue de ChatGPT.

"Pour que le relais reste activé jusqu'à ce que le poids soit atteint, vous pouvez supprimer l'instruction if qui vérifie l'état du bouton et utiliser à la place une variable distincte pour savoir si le relais est actuellement activé ou désactivé.

Voici un exemple de la façon dont vous pouvez modifier le code pour obtenir ce comportement :
#include "HX711.h"

#define calibration_factor -9620.0 //This value is obtained using the SparkFun_HX711_Calibration sketch

#define DOUT  3
#define CLK  2


const int buttonPin = 4; // pin assign to push button
int buttonState = 0;

HX711 scale;

// Declare a variable to keep track of the relay state
bool relayOn = false;

void setup() {
  pinMode(12, OUTPUT); // pin assign to relay module.

  pinMode(buttonPin, INPUT_PULLUP);

  Serial.begin(9600);
  Serial.println("HX711 scale demo");

  scale.begin(DOUT, CLK);
  scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
  scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0

  Serial.println("Readings:");

  // Set the relay to the off state
  digitalWrite(12, LOW);
}

void loop() {
  // Read the button state
  buttonState = digitalRead(buttonPin);

  // Read the weight
  float i = scale.get_units();
  float wt = (float)i;

  // If the button is pressed and the relay is off, turn the relay on
  if (buttonState == LOW && !relayOn) {
    digitalWrite(12, HIGH);
    relayOn = true;
  }

  // If the weight is greater than or equal to 10 and the relay is on, turn the relay off
  if (wt >= 10 && relayOn) {
    digitalWrite(12, LOW);
    relayOn = false;
  }

  Serial.print(scale.get_units(), 3); //scale.get_units() returns a float with 3 decimcal place
  Serial.println();
}

« Dans cette version modifiée du code, la variable relayOn est utilisée pour savoir si le relais est actuellement activé ou désactivé. Lorsque le bouton est enfoncé et que le relais est désactivé, le relais est activé et la variable relayOn est définie sur vrai.
Lorsque le poids est supérieur ou égal à 10 et que le relais est activé, le relais est désactivé et la variable relayOn est définie sur faux. Cela permet au relais de rester allumé jusqu'à ce que le poids soit atteint, puis de s'éteindre jusqu'à ce que le bouton soit à nouveau enfoncé.

La solution fournie par ChatGPT était efficace et facile à comprendre. Les brèves notes au début décrivaient l'approche et le code d'accompagnement expliquait comment cela fonctionnait. Dans l'ensemble, il s'agissait d'une réponse complète qui répondait aux besoins de l'auteur.

💡J'ai eu une conversation avec ChatGPT sur ses capacités. Voici ce qu'il disait :
« Ma capacité à comprendre et à interpréter les questions et à fournir des réponses précises peut être limitée par la complexité du sujet, la formulation de la question ou d'autres facteurs. Si je ne suis pas en mesure de fournir une réponse satisfaisante à votre question, n'hésitez pas à demander des éclaircissements ou des détails supplémentaires, et je ferai de mon mieux pour vous aider.

OK, ChatGPT ! Réécrire mon code

Vous pouvez demander à ChatGPT de convertir le code de Micropython en Arduino et vice versa. Nous verrons un exemple pour les deux cas d'utilisation dans cette section.

MicroPython vers Arduino

Prenons l' exemple standard de Pi Pico microPython sur la page d'accueil de Wokwi. L'exemple lit l'état du bouton et l'imprime sur le terminal.

Vous trouverez ci-dessous la requête que j'ai envoyée à ChatGPT.

convert the below micropython code to Arduino code.

```
import machine
import time

button = machine.Pin(6, machine.Pin.IN, machine.Pin.PULL_UP)
while True:
  print("Button state", button.value())
  time.sleep(0.1)
```
"Pour convertir le code MicroPython en code Arduino, vous pouvez utiliser la fonction digitalRead pour lire l'état du bouton, et la fonction Serial.println pour imprimer l'état du bouton sur la connexion série. Voici un exemple de la façon dont vous pouvez procéder :
// Include the Arduino digital I/O library
#include "Arduino.h"

// Define the pin number
const int buttonPin = 6;

void setup() {
  // Initialize serial communication
  Serial.begin(9600);

  // Set the button pin as an input with a pull-up resistor
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // Read the button state
  int buttonState = digitalRead(buttonPin);

  // Print the button state to the serial connection
  Serial.print("Button state: ");
  Serial.println(buttonState);

  // Delay for 100 milliseconds
  delay(100);
}
« Ce code Arduino établit une connexion série et lit l'état du bouton en boucle. Il imprime ensuite l'état du bouton sur la connexion série et attend 100 millisecondes avant de répéter le processus.

J'ai créé un projet Wokwi en utilisant le code ci-dessus. Vous pouvez suivre le lien pour vérifier l'opération. J'ai changé serial en serial1 pour que je puisse voir les données sur le terminal série sur Pi Pico.

Vous pouvez travailler avec ChatGPT en utilisant des lignes similaires pour obtenir le code traduit d'Arduino en MicroPython.

OK, ChatGPT ! Créez maintenant un projet Wokwi

Dans cette section, interagissons avec ChatGPT et demandons un projet Wokwi ! Si cela fonctionne, nous pouvons obtenir à la fois le code Arduino et le circuit construit automatiquement à l'aide de ChatGPT.

Tout d'abord, enseignons à ChatGPT le fichier diagram.json de Wokwi.

💡Le fichier diagram.json contient toutes les informations. Il définit les composants qui seront utilisés pour la simulation, leurs attributs (Exemple : couleur de la LED, fonction de rebond dans le bouton poussoir, etc.) et les connexions entre les composants.

J'ai donc montré à ChatGPT à quoi ressemble un fichier diagram.json pour un projet avec une seule LED en envoyant la requête ci-dessous :

This is an example of Wokwi block diagram

{
  "version": 1,
  "author": "Uri Shaked",
  "editor": "wokwi",
  "parts": [
    { "id": "uno", "type": "wokwi-arduino-uno", "top": 120, "left": 20 },
    { "id": "r1", "type": "wokwi-resistor", "top": 67, "left": 115, "rotate": 90, "attrs": {"value": "220"} },
    { "id": "led", "type": "wokwi-led", "left": 120, "top": 0, "attrs": { "color": "red" }}
  ],
  "connections": [
    ["uno:GND.1", "led:C", "black", []],
    ["r1:1", "led:A", "blue", []],
    ["uno:13", "r1:2", "blue", []]
  ]
}

Generate a Wokwi project with 4 colorful LEDs followed by an arduino code that blinks two alternate LEDs every 500 ms

Le code généré par ChatGPT pour le fichier diagram.json est comme indiqué ci-dessous.

{
  "version": 1,
  "author": "Your Name",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-uno", "id": "uno", "top": 191.18, "left": 32.77, "attrs": {} },
    { "type": "wokwi-led", "id": "led1", "top": 0, "left": 120, "attrs": { "color": "red" } },
    { "type": "wokwi-led", "id": "led2", "top": 60, "left": 120, "attrs": { "color": "green" } },
    { "type": "wokwi-led", "id": "led3", "top": 120, "left": 120, "attrs": { "color": "blue" } },
    { "type": "wokwi-led", "id": "led4", "top": 180, "left": 120, "attrs": { "color": "purple" } },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": 63.81,
      "left": 221.39,
      "rotate": 90,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r2",
      "top": 127,
      "left": 215,
      "rotate": 90,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r3",
      "top": 187,
      "left": 215,
      "rotate": 90,
      "attrs": { "value": "220" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r4",
      "top": 247,
      "left": 215,
      "rotate": 90,
      "attrs": { "value": "220" }
    }
  ],
  "connections": [
    [ "uno:GND.1", "led1:C", "black", [] ],
    [ "r1:1", "led1:A", "blue", [] ],
    [ "uno:2", "r1:2", "blue", [] ],
    [ "uno:GND.1", "led2:C", "black", [] ],
    [ "r2:1", "led2:A", "green", [] ],
    [ "uno:3", "r2:2", "green", [] ],
    [ "uno:GND.1", "led3:C", "black", [] ],
    [ "r3:1", "led3:A", "blue", [] ],
    [ "uno:4", "r3:2", "blue", [] ],
    [ "uno:GND.1", "led4:C", "black", [] ],
    [ "r4:1", "led4:A", "green", [] ],
    [ "uno:5", "r4:2", "green", [] ]
  ],
  "dependencies": {}
}

J'ai collé le code généré ci-dessus dans le fichier diagram.json. J'étais heureux de voir qu'il avait appris le format et avait créé un projet de circuit à 4 LED. Pas propre, mais les 4 leds sont là. Des résistances ont également été ajoutées pour limiter le courant.

Schéma de connexion généré par le ChatGPT

Voici le code généré pour piloter les LED.

const int LED1 = 2;   // LED connected to digital pin 2
const int LED2 = 3;   // LED connected to digital pin 3
const int LED3 = 4;   // LED connected to digital pin 4
const int LED4 = 5;   // LED connected to digital pin 5

void setup() {
  // Set the four LED pins as outputs
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop() {
  // Turn on LED1 and LED3
  digitalWrite(LED1, HIGH);
  digitalWrite(LED3, HIGH);
  // Turn off LED2 and LED4
  digitalWrite(LED2, LOW);
  digitalWrite(LED4, LOW);
  // Wait for 500 ms
  delay(500);

  // Turn on LED2 and LED4
  digitalWrite(LED2, HIGH);
  digitalWrite(LED4, HIGH);
  // Turn off LED1 and LED3
  digitalWrite(LED1, LOW);
  digitalWrite(LED3, LOW);
  // Wait for 500 ms
  delay(500);
}

La sortie fonctionne comme prévu.

Je vous encourage fortement à expérimenter davantage l'outil afin de bien comprendre ses capacités. Je l'ai personnellement utilisé pour découvrir différentes approches pour résoudre les problèmes de codage, et j'espère que vous le trouverez aussi utile que moi.

Conclusion

Dans cet article, nous avons expérimenté cet outil vraiment cool appelé ChatGPT. Cela peut nous aider à apprendre Arduino et à coder plus rapidement et plus facilement. Il s'agit d'un outil d'IA qui utilise le traitement du langage naturel (NLP) et l'apprentissage automatique (ML) pour fournir des leçons interactives et répondre aux questions sur Arduino et les concepts de codage.

Fondamentalement, vous pouvez discuter avec lui et cela vous aidera à tout comprendre, des bases aux choses plus avancées. C'est une façon vraiment unique d'apprendre et c'est génial pour les débutants ou même les personnes expérimentées qui veulent rafraîchir leurs compétences. Dans l'ensemble, c'est une ressource très utile pour apprendre Arduino et le codage.

À mon avis, ChatGPT peut accélérer votre processus d'apprentissage, mais il ne peut pas remplacer un livre de haute qualité ou un cours vidéo complet.😉

Si vous avez des commentaires ou des suggestions pour rendre le simulateur plus utile, vous pouvez nous contacter sur Facebook , Discord et Twitter .

=====================================================

  https://chat.openai.com/?ref=blog.wokwi.com

Test 1 de demande de code

Moi : Peux-tu me donner le programme Arduino pour faire fonctionner 5 servomoteurs

ChatGPT : Bien sûr, voici un exemple de programme Arduino pour contrôler 5 servomoteurs à l'aide de la bibliothèque Servo :

#include <Servo.h>

// Déclaration des objets Servo pour chaque servomoteur
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;

void setup() {
  // Attache les servomoteurs aux broches correspondantes
  servo1.attach(9);
  servo2.attach(10);
  servo3.attach(11);
  servo4.attach(12);
  servo5.attach(13);
}

void loop() {
  // Fait tourner chaque servomoteur sur une plage de 0 à 180 degrés
  for (int angle = 0; angle <= 180; angle++) {
    servo1.write(angle);
    servo2.write(angle);
    servo3.write(angle);
    servo4.write(angle);
    servo5.write(angle);
    delay(15); // Attend un court instant avant de changer l'angle
  }

  // Attend un moment à la position maximale
  delay(1000);

  // Ramène les servomoteurs à la position initiale
  for (int angle = 180; angle >= 0; angle--) {
    servo1.write(angle);
    servo2.write(angle);
    servo3.write(angle);
    servo4.write(angle);
    servo5.write(angle);
    delay(15); // Attend un court instant avant de changer l'angle
  }

  // Attend un moment à la position minimale
  delay(1000);
}

Ce programme contrôle 5 servomoteurs connectés aux broches 9, 10, 11, 12 et 13 de la carte Arduino. Il fait tourner les servomoteurs progressivement de 0 à 180 degrés, puis les ramène à la position initiale. Chaque mouvement dure environ 3 secondes (180 degrés en 3000 ms à raison de 15 ms par degré).

Assurez-vous d'ajuster les numéros de broches et les délais selon vos besoins et la configuration de vos servomoteurs.

Test 2 de demande de code

Moi : Peux-tu me donner le programme Arduino pour faire fonctionner 5 servomoteurs avec le Shield Motorino 16 servomoteurs MOTO3ChatGPT

ChatGPT : Bien sûr, voici un exemple de programme Arduino pour contrôler 5 servomoteurs à l'aide du Shield Motorino 16 servomoteurs MOTO3. Assurez-vous d'avoir installé la bibliothèque nécessaire pour ce shield avant d'utiliser ce code.

#include <Moto3Servo.h>

// Création d'un objet Moto3Servo pour gérer le shield
Moto3Servo moto3Servo;

void setup() {
  // Initialisation du shield et des servomoteurs
  moto3Servo.init();

  // Attacher les servomoteurs aux canaux du shield
  moto3Servo.attach(0, 9);   // Servomoteur 1, broche 9
  moto3Servo.attach(1, 10);  // Servomoteur 2, broche 10
  moto3Servo.attach(2, 11);  // Servomoteur 3, broche 11
  moto3Servo.attach(3, 12);  // Servomoteur 4, broche 12
  moto3Servo.attach(4, 13);  // Servomoteur 5, broche 13
}

void loop() {
  // Fait tourner chaque servomoteur sur une plage de 0 à 180 degrés
  for (int angle = 0; angle <= 180; angle++) {
    moto3Servo.write(0, angle);
    moto3Servo.write(1, angle);
    moto3Servo.write(2, angle);
    moto3Servo.write(3, angle);
    moto3Servo.write(4, angle);
    delay(15); // Attend un court instant avant de changer l'angle
  }

  // Attend un moment à la position maximale
  delay(1000);

  // Ramène les servomoteurs à la position initiale
  for (int angle = 180; angle >= 0; angle--) {
    moto3Servo.write(0, angle);
    moto3Servo.write(1, angle);
    moto3Servo.write(2, angle);
    moto3Servo.write(3, angle);
    moto3Servo.write(4, angle);
    delay(15); // Attend un court instant avant de changer l'angle
  }

  // Attend un moment à la position minimale
  delay(1000);
}

Ce code utilise la bibliothèque Moto3Servo pour contrôler les servomoteurs via le Shield Motorino 16 servomoteurs MOTO3. Assurez-vous que les broches de connexion entre le shield et les servomoteurs sont correctes et ajustez les numéros de canaux et de broches en conséquence.