🎃 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.
pitches.h pozwala zapisywać melodie w nutach zamiast częstotliwości – to jak cyfrowy śpiewnik!
PROG_CM, aby dynia reagowała z większej odległości.
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 🎃.
Brak komentarzy:
Prześlij komentarz