DYNIA

🎃 Dynia

W tym projekcie zamieniamy prawdziwą dynię w magicznego potworka, reagującego na ruch! Dynia ma oczy z diod RGB, jęzor poruszany serwem i dwa skrzydła, które majestatycznie machają, gdy ktoś się zbliży. A gdy zrobi się naprawdę strasznie – zagra upiorna melodia z buzzera 👻.

// 🎃 Dynia Potworek – machające skrzydła i merdający język
#include 
#include "pitches.h"

// ✅ jeśli plik pitches.h nie definiuje REST, zrób to tutaj
#ifndef REST
#define REST 0
#endif

// --- Serwa ---
Servo jezor;
Servo skrzydloL;
Servo skrzydloP;

// --- Piny ---
const int TRIG = 7;
const int ECHO = 8;

// RGB LED lewe oko
const int R1 = 10;
const int G1 = 11;
const int B1_PIN = 12;

// RGB LED prawe oko
const int R2 = 3;
const int G2 = 2;
const int B2_PIN = 13;

// Buzzer
const int BUZZ = 4;

// Serwa
const int SERVO_JEZOR = 9;
const int SERVO_SKRZYDLO_L = 5;
const int SERVO_SKRZYDLO_P = 6;

// --- Ustawienia ---
const int PROG_CM = 50;        // pół metra
const int JEZOR_LEWO = 60;
const int JEZOR_PRAWO = 120;
const int SKRZ_ZAM = 70;
const int SKRZ_OTW = 110;

// --- Funkcja kolor (dla dwóch oczu) ---
void kolor(int r, int g, int b) {
  analogWrite(R1, r);
  analogWrite(G1, g);
  analogWrite(B1_PIN, b);
  analogWrite(R2, r);
  analogWrite(G2, g);
  analogWrite(B2_PIN, b);
}

// --- Pomiar odległości ---
long pomiarCM() {
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long czas = pulseIn(ECHO, HIGH, 30000);
  if (czas == 0) return 9999;
  return czas / 58.2;
}

// --- Melodia ---
int melody[] = {
  NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4,
  NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4,
  NOTE_G4, NOTE_AS4, NOTE_A4,
  NOTE_F4, NOTE_GS4, NOTE_D4,
  REST
};

int noteDurations[] = {
  4, 8, 4, 8,
  4, 8, 4, 8,
  4, 8, 4,
  4, 8, 2,
  4
};

// --- Setup ---
void setup() {
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);

  // Piny RGB
  pinMode(R1, OUTPUT);
  pinMode(G1, OUTPUT);
  pinMode(B1_PIN, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(G2, OUTPUT);
  pinMode(B2_PIN, OUTPUT);

  pinMode(BUZZ, OUTPUT);

  jezor.attach(SERVO_JEZOR);
  skrzydloL.attach(SERVO_SKRZYDLO_L);
  skrzydloP.attach(SERVO_SKRZYDLO_P);

  jezor.write(90);
  skrzydloL.write(SKRZ_ZAM);
  skrzydloP.write(SKRZ_ZAM);

  kolor(0, 255, 0); // zielone oczy w spoczynku
}

// --- Pętla główna ---
void loop() {
  long dystans = pomiarCM();

  if (dystans < PROG_CM) {
    // 🔴 aktywny stan
    kolor(255, 0, 0);

    // gra melodię, jęzor merda szybko, skrzydła wolniej
    for (int i = 0; i < (sizeof(melody) / sizeof(melody[0])); i++) {
      int nuta = melody[i];
      int czas = 1000 / noteDurations[i];
      if (nuta != REST) tone(BUZZ, nuta, czas);

      // jęzor szybki
      jezor.write(JEZOR_LEWO);
      kolor(255, random(0, 60), random(0, 60)); // odcienie czerwieni
      delay(czas / 3);
      jezor.write(JEZOR_PRAWO);
      delay(czas / 3);

      // skrzydła machają wolniej
      if (i % 3 == 0) {  // co kilka nut machnięcie
        skrzydloL.write(SKRZ_OTW);
        skrzydloP.write(SKRZ_OTW);
        delay(150);
        skrzydloL.write(SKRZ_ZAM);
        skrzydloP.write(SKRZ_ZAM);
      }

      noTone(BUZZ);
    }

    // powrót do spoczynku
    skrzydloL.write(SKRZ_ZAM);
    skrzydloP.write(SKRZ_ZAM);
    jezor.write(90);
    kolor(0, 255, 0); // zielone oczy
  } 
  else {
    // 💤 spokojny stan
    kolor(0, 255, 0);
    skrzydloL.write(SKRZ_ZAM);
    skrzydloP.write(SKRZ_ZAM);
    jezor.write(90);
    noTone(BUZZ);
  }

  delay(100);
}

  

Jak działa potworek?

W spoczynku oczy dyni świecą spokojnym, zielonym światłem. Gdy czujnik odległości wykryje kogoś zbliżającego się na mniej niż pół metra, oczy zmieniają kolor na czerwony, jęzor zaczyna merdać, a skrzydła powoli machają. W tym samym czasie buzzer gra krótką melodię w klimacie Halloween 🎶. Po chwili wszystko cichnie i wraca do zielonego światła.

🎃 Ciekawostka 1: Czujnik ultradźwiękowy HC-SR04 mierzy odległość, wysyłając falę dźwiękową i mierząc czas jej powrotu.
🦇 Ciekawostka 2: Serwa SG90 mają mały moment obrotowy, ale wystarczający do machania lekkimi skrzydełkami z patyczków lub kartonu.
🔊 Ciekawostka 3: Biblioteka pitches.h pozwala zapisywać melodie w nutach zamiast częstotliwości – to jak cyfrowy śpiewnik!
⚠️ Uwaga 1: Większe serwa (MG995, MG996R) wymagają osobnego zasilania 5–6 V, nie z Arduino!
⚠️ Uwaga 2: Jeśli oczy świecą zbyt jasno lub w dziwnych kolorach, zamień miejscami piny R, G lub B – różne moduły mają inny układ.
⚠️ Uwaga 3: Zawsze łącz masy (GND) wszystkich zasilaczy – to pozwala układowi działać stabilnie.
💡 Dla dociekliwych 1: Spróbuj zmienić wartość PROG_CM, aby dynia reagowała z większej odległości.
💡 Dla dociekliwych 2: Dodaj trzecią diodę RGB w środku dyni, by rozświetlała wnętrze w ryt­mie muzyki.
💡 Dla dociekliwych 3: Możesz dodać czujnik dźwięku, aby dynia reagowała również na klaśnięcie!

Podsumowanie

Dzięki Arduino nawet zwykła dynia może stać się magicznym potworkiem reagującym na świat wokół! Ten projekt łączy naukę elektroniki, programowania i kreatywne majsterkowanie – idealny na warsztaty Halloweenowe 🎃.

🪄 Zadanie 1: Dodaj wewnątrz dyni świecącą diodę RGB, która mieni się w kolorach, gdy melodia się kończy.
🧙‍♀️ Zadanie 2: Spraw, by dynia „mrugała” oczami co kilka sekund, nawet gdy nikt się nie zbliża.
⚙️ Informacja techniczna: Kod korzysta z trzech serw (jęzor + skrzydła), dwóch diod RGB, buzzera i czujnika HC-SR04. Wszystkie elementy zasilane są napięciem 5 V, a sterowanie odbywa się z pinów PWM Arduino Uno.

Brak komentarzy:

Prześlij komentarz