Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construire un oscilloscope Arduino 20 kHz sur écran Nokia 5110 – Guide DIY facile

Composants et fournitures

Arduino Nano R3 × 1
Écran LCD Nokia 5110 (PCD8544) × 1
Résistance 10 kΩ × 4
Résistance 4,75 kΩ × 1
Résistance 330 Ω × 1
Bouton poussoir momentané × 4

Outils et machines nécessaires

Applications et services en ligne

À propos de ce projet

Cette fois, je vais vous montrer comment réaliser un oscilloscope Arduino simple. La fréquence de signal maximale que l'oscilloscope peut afficher est de 20 kHz, et la tension d'entrée maximale est de 5 V sans diviseur de tension.

L'oscilloscope est contrôlé par quatre boutons :

Sur l'écran Nokia 5110, verticalement chaque case représente 1 V, horizontalement une case équivaut à la résolution de balayage, qui a les valeurs suivantes : 0,1 ; 0,2 ; 0,5 ; 1,0 ; 2,0 ; 5,0 ; 10,0 ; 20,0 et 50,0 ms. La valeur de balayage est modifiée avec les boutons "+" et "-", qui s'affiche dans le coin supérieur gauche. Le niveau de déclenchement est affiché sous forme de petite barre sur le côté gauche de l'écran, et la tension de déclenchement est affichée dans le coin supérieur droit. Ce projet est publié sur la page arduino.ru où vous pouvez lire plus de détails.

Construire un oscilloscope Arduino 20 kHz sur écran Nokia 5110 – Guide DIY facile

L'appareil est extrêmement simple à construire et ne consiste qu'en quelques composants :

J'ai testé l'oscilloscope avec un générateur de signaux sinusoïdaux et rectangulaires. Bien qu'il ne s'agisse pas d'un instrument professionnel ou très utilisable, il peut encore être utilisé à des fins éducatives ou dans votre laboratoire, pour tester des signaux de basse fréquence, d'autant plus que l'appareil est très facile à fabriquer et extrêmement bon marché.

Finalement, l'appareil est placé dans un boîtier approprié en PVC et recouvert de papier peint autocollant.

Code

Code Arduino (C/C++)
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); // CLK, DIN, DC, CE, RST |||| VCC +3.3V, BL ++ 200 OM ++ 3.3V

int izm, x, y, u, i2, zz, hold, h0, h1, h2, raz = 0, menu, sss = 512, u_dig, data[168] = {};
unsigned long time, times;
float per;
byte i;

void setup() {
  Serial.begin(9600);
  display.begin();
  display.clearDisplay();
  display.display();
  display.setContrast(40); // réglage du contraste
  display.setTextSize(1); // taille de police
  display.setTextColor(BLACK); // couleur du texte
  pinMode(10, INPUT); // +
  pinMode(11, INPUT); // -
  pinMode(12, INPUT); // hold
  pinMode(13, INPUT); // synchro
  ADMUX = 0b01000000; // 10 bit A0
  ADCSRA = 0b11110010; // CLK/4
  analogWrite(9, 127); // PWM 9 OUTPUT
}

void loop() {
  ///////////////////////////CONTRÔLE BOUTONS//////////////////////////////
  if (menu == 0) {
    if (digitalRead(10) == HIGH) {
      if (hold == 0) { raz++; }
      if (hold == 1) { i2 = i2 + 1; }
      delay(100);
    }
    if (digitalRead(11) == HIGH) {
      if (hold == 0) { raz--; }
      if (hold == 1 && hold > 0) { i2 = i2 - 1; }
      delay(100);
    }
  }
  if (digitalRead(12) == HIGH) { hold++; i2 = 0; delay(100); }
  if (digitalRead(13) == HIGH) { menu++; delay(100); }
  if (hold > 1) { hold = 0; }
  if (menu > 1 || menu < 0) { menu = 0; }
  if (raz <= 0) { raz = 0; }
  if (raz > 8) { raz = 8; }
  if (menu == 1) {
    hold = 0;
    if (digitalRead(10) == HIGH) { sss += 24; delay(100); }
    if (digitalRead(11) == HIGH) { sss -= 24; delay(100); }
    if (sss > 1023) { sss = 1023; }
    if (sss < 0) { sss = 0; }
  }

  display.setCursor(0, 0); // position du curseur

  /////////////////////////TEMPS DE BALAYAGE calibré par générateur////////////////////////////
  if (raz == 0) { zz = 1; h2 = 2; per = 0.1; }
  if (raz == 1) { zz = 1; h2 = 1; per = 0.2; }
  if (raz == 2) { zz = 12; h2 = 1; per = 0.5; }
  if (raz == 3) { zz = 32; h2 = 1; per = 1; }
  if (raz == 4) { zz = 75; h2 = 1; per = 2; }
  if (raz == 5) { zz = 200; h2 = 1; per = 5; }
  if (raz == 6) { zz = 380; h2 = 1; per = 10; }
  if (raz == 7) { zz = 750; h2 = 1; per = 20; }
  if (raz == 8) { zz = 1900; h2 = 1; per = 50; }
  //////////////////////////////////////////////////////////////////

  if (hold == 0 && millis() - time > 0) {
    ads();
    while (izm < sss) { ads(); h0++; if (h0 > 5000) { break; } }
    h0 = 0; // SYNCHRONISATION
    times = micros();
    while (i < 167) {
      i++;
      delayMicroseconds(zz);
      ads();
      data[i] = izm; // MESURE 10 bit
    }
    i = 0;
    times = micros() - times;
    Serial.println(times);
  }

  ////////////////////AFFICHAGE SUR ÉCRAN///////////////////////////////
  if (millis() - time > 100) {
    display.clearDisplay();
    if (sss < 204 && sss > 100) { u_dig = 10; display.setCursor(0, 40); display.print("0.4V"); }
    else if (sss < 100) { u_dig = 5; display.setCursor(0, 40); display.print("0.2V"); }
    else { u_dig = 25; }
    display.setCursor(0, 0);
    while (i < 167) {
      i++;
      setka();
      display.drawLine(i * h2 - i2, 47 - data[i] / u_dig, i * h2 - i2 + h2 - 1, 47 - data[i + 1] / u_dig, BLACK);
    }
    i = 0;
    display.print(per, 1);
    display.print(" mS ");
    if (menu == 0) {
      if (hold == 1) { display.print("HOLD "); }
      else { display.print("AUTO "); }
    }
    if (menu == 1) { display.print(sss / 200.0, 1); display.print(" V "); }
    if (menu == 1) { display.drawLine(0, 48 - sss / u_dig, 4, 48 - sss / u_dig, BLACK); }
    time = millis();
  }
  display.display();
} // loop

void ads() {
  //////// 10 bit ///////////
  do { ADCSRA |= (1 << ADSC); } while ((ADCSRA & (1 << ADIF)) == 0);
  izm = (ADCL | ADCH << 8);
  ////////////////// 8 bit ///////////
  // VARIABLES REQUISES (sss, u_dig)
  // while ((ADCSRA & 0x10) == 0); // ADCSRA|=0x10; // izm = ADCH;
}

void setka() {
  for (y = 8; y < 47; y = y + 8) {
    for (x = 0; x < 83; x = x + 4) {
      display.drawPixel(x, y, BLACK);
    }
  }
  for (x = 0; x < 83; x = x + 26) {
    for (y = 10; y < 47; y = y + 4) {
      display.drawPixel(x, y, BLACK);
    }
  }
}

Schémas

Construire un oscilloscope Arduino 20 kHz sur écran Nokia 5110 – Guide DIY facile

Processus de fabrication

  1. Stores intelligents : contrôle automatisé de la lumière avec Arduino et énergie solaire
  2. Capteur d'obstacle IR simple avec Arduino — LED IR + Photodiode
  3. Construire un voltmètre DIY avec Arduino et écran Nokia 5110
  4. Oscilloscope DIY Arduino Nano (10 Hz – 50 kHz) avec écran LCD 128×64
  5. Construire une roue de mesure précise avec Arduino Nano et encodeur rotatif
  6. Chronomètre Arduino Simple : Construisez un Chronomètre Activé par Bouton
  7. Multimètre capacimètre auto-étendant DIY (10 pF – 10 µF) – Construction Arduino facile
  8. Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels
  9. Construire un Réveil Fiable avec RTC DS1302 et Arduino UNO