Мазмуну:

Arduino MusicStump: Light, Captive Touch жана Buzzer: 3 кадам
Arduino MusicStump: Light, Captive Touch жана Buzzer: 3 кадам

Video: Arduino MusicStump: Light, Captive Touch жана Buzzer: 3 кадам

Video: Arduino MusicStump: Light, Captive Touch жана Buzzer: 3 кадам
Video: How to use TTP223 Capacitive touch Arduino module 2024, Июль
Anonim
Arduino MusicStump: Light, Captive Touch жана Buzzer
Arduino MusicStump: Light, Captive Touch жана Buzzer

Үстүндө LED шакеги бар интерактивдүү дарак, үн чыгаруучу зумер жана туткундун сенсордук сенсору, ал тийгенде түсүн өзгөртөт. Бул кичинекей нерсени кызыктуу кылуу үчүн сизге төмөнкүлөр керек болот:

Электроника:- 1x Arduino Uno

- 15 кабель

- тегерек учу бар 1х ширетүүчү темир

- 1x Adafruit 8 ачкыч туткуну (CAP1188)

- 1x Arduino электр кабели

- 1x 8 LED шакеги

- 1x Buzzer

- 1х ысык желим тапанча

-CAP1188 китепканасын жүктөп алыңыз

- Adafruit Neopixel китепканасын жүктөп алыңыз

Кошумча (корпус):

- 1х дарактын дүмүрү

- 1х ички таяк

- жыгачтан жасалган табак, баарын жайгаштырууга/киргизүүгө

- сыртынан жаныбарлардын фарштары

Сиз дагы башка нерсени сыртта колдоно аласыз, чыгармачыл болуңуз!

Эми баштайлы…

1 -кадам: 1 -кадам: туткунга тийүү менен LED Ring

1 -кадам: LED Ring туткунга тийүү менен
1 -кадам: LED Ring туткунга тийүү менен

Эми бактылуу болсоңуз, сиздин LED шакегиңизге буга чейин казыктар бекитилген. Болбосо, ширетүүчү мезгил келди!

Бул долбоор үчүн биз колдоно турган нерселер:

- DI (Санарип киргизүү, пин 6 ~

- 5V (бийлик үчүн, 5V пин)

- GND (Жер, GND пин)

Бул азырынча LED шакеги. Эми туткунга тийүү.

Аны нан тактасына коюп, бардыгын төмөнкүдөй туташтырыңыз: SDA/MISO пинге (аналогдо) A4SCK -га (аналогго) A5VIN -ге (кубатка) 5VGND -ге GND pin1x кабелинде C1 (Туткунга тийүү боюнча)

Эми тестирлөө үчүн төмөнкү кодду Arduinoго жүктөңүз:

// Джулия Эмминк // Интерактивдүү дарактын жарык жана сенсордук коду 19 /// Adafruit Neopixel жана Adafruit туткундарынын тийүүсү (CAP1188) (орнотулушу керек) жана светодиод кечиктирилбестен жарк этүү менен жасалган

// NEOPIXEL ~~~~~~~~~~~~~~~~~

#кошуу

#define PIXELSPIN 6 // LED шакегин кайда туташтырдыңыз

#depine NUMPIXELS 8 // Сиздин шакегиңиздеги LED диаметри #define CALIBRATIONTIME 20000

Adafruit_NeoPixel пикселдери = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

белгисиз узун пикселдер аралык = 500; // биз күтүшүбүз керек болгон убакыт

белгисиз узун colorWipePreviousMillis = 0; белгисиз узун театрChasePreviousMillis = 0; белгисиз узун асан -үсөнPreviousMillis = 0; белгисиз узун асан -үсөнCyclesPreviousMillis = 0;

int teatrChaseQ = 0;

uint16_t currentPixel = 0; // биз кайсы пикселде иштеп жатабыз

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

#кошуу #кошуу #кошуу

// Кайра коюу пин I2C же SPI үчүн колдонулат

#аныктоо CAP1188_RESET 9

// CS пин программалык же жабдыктык SPI үчүн колдонулат

#аныктоо CAP1188_CS 10

// Булар SPI программалык камсыздоо үчүн, SPI аппараттык үчүн аныкталган

// башкармалыктын SPI төөнөгүчтөрү Arduino документтеринде #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2Cди колдонуңуз, баштапкы абалга келтирүүчү пин жок!

Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

жараксыз орнотуу () {

// NEOPIXEL ~~~~~~~~~~~~~~~~~~ currentPixel = 0; piksel.begin (); // Бул NeoPixel китепканасын баштайт. piksel.show (); // Бул жаңыртылган пикселдин түсүн жабдыкка жөнөтөт.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

Serial.begin (300); Serial.println ("CAP1188 тест!");

if (! cap.begin ()) {

Serial.println ("CAP1188 табылган жок"); while (1); } Serial.println ("CAP1188 табылды!"); }

void loop () {

// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (тийди == 0) {if ((белгиси узун) (миллис () - colorWipePreviousMillis)> = пиксел аралык) {colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (0, 255, 125)); }} else {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelInterval) {colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (100, 0, 150)); }}

}

жараксыз түсWipe (uint32_t c) {

// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Түстөн пикселдерди кетирет.setPixelColor (currentPixel, c); piksel.setPixelColor (currentPixel - 1, пиксел. Color (0, 0, 0)); piksel.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; piksel.setPixelColor (7, pixel. Color (0, 0, 0));

}

}

Аны сынап көрүңүз жана көңүл ачыңыз! C1 кабелине тийгенде, түсү өзгөрөт. (Эгерде бул биринчи жолу болбосо, Arduino -ны сууруп, кайра компьютериңизге сайыңыз.)

2 -кадам: 2 -кадам: Үн кошуу

Ыңгайлуу окуу куралын колдонуу менен мен муну жасадым. Үйрөткүч төмөндө:

github.com/xitangg/-Pirates-of-the-Caribbe…

Зумкуруңузду алууга убакыт келди! (-) сигналын GND казыктарынын бирине жана (+) пин 10 ~ го салыңыз

Бул жөнүндө, эми кодду кайра иштетип, Кариб деңизинин каракчыларынын обонун угууга убакыт келди! Эми кызыктуу тесттен өтүңүз!

// Джулия Эмминк // Интерактивдүү дарактын жарык, тийүү жана музыкалык коду 2018-01-19 // Adafruit Neopixel жана Captive Touch (CAP1188) (орнотулушу керек) жана светодиод кечиктирилбестен колдонуу менен жасалган.

// NEOPIXEL ~~~~~~~~~~~~~~~~~#камтыйт

#аныктоо PIXELSPIN 6

#depine NUMPIXELS 8 #define CALIBRATIONTIME 20000

Adafruit_NeoPixel пикселдери = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

белгисиз узун пикселдер аралык = 500; // биз күтүшүбүз керек болгон убакыт

белгисиз узун colorWipePreviousMillis = 0; белгисиз узун театрChasePreviousMillis = 0; белгисиз узун асан -үсөнPreviousMillis = 0; белгисиз узун асан -үсөнCyclesPreviousMillis = 0;

int teatrChaseQ = 0;

uint16_t currentPixel = 0; // биз кайсы пикселде иштеп жатабыз

// МУЗЫКА ~~~~~~~~~~~~~~~~~~~~~~

const int buzzer = 10; // 10 -пинди аныктаңыз, башка PWM төөнөгүчтөрүн колдоно аласыз (5, 6 же 9) // Эскертүү пинтери 3 жана 11 Arduino Uno const int songspeed = 1.5 тон функциясын колдонууда колдонулбайт; // Ырдын жайыраак версиясы үчүн 2ге өзгөртүңүз, саны канчалык көп болсо, ыр жайыраак болот // *************************** ************** #аныктоо NOTE_C4 262 // Белгилөөнүн жыштыгын аныктоо #аныктоо NOTE_D4 294 #аныктоо NOTE_E4 330 #аныктоо NOTE_F4 349 #аныктоо NOTE_G4 392 #аныктоо NOTE_A4 440 #аныктоо NOTE_B4 494 #аныктоо NOTE_C5 523 #аныктоо NOTE_D5 587 #аныктоо NOTE_E5 659 #аныктоо NOTE_F5 698 #аныктоо NOTE_G5 784 #аныктоо NOTE_A5 880 #аныктоо NOTE_B5 988 // ************************* ****************** int notes = {// Ырдын нотасы, 0 - бул эс алуу/импульс NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0}; // *************************************** int узактыгы = { / /ар бир нотанын узактыгы (мс менен) Чейрек нотасы 250 мс 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

#кошуу #кошуу #кошуу

// Кайра коюу пин I2C же SPI үчүн колдонулат

#аныктоо CAP1188_RESET 9

// CS пин программалык же жабдыктык SPI үчүн колдонулат

#аныктоо CAP1188_CS 10

// Булар SPI программалык камсыздоо үчүн, SPI аппараттык үчүн аныкталган

// башкармалыктын SPI пиндери Arduino документтеринде #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2Cди колдонуңуз, баштапкы абалга келтирүүчү пин жок!

Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

жараксыз орнотуу () {

// MUSIC ~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i <203; i ++) {// 203 - бул музыкалык ноталардын жалпы саны song int wait = Duration * ыр ылдамдыгы; тон (ызылдак, ноталар , күтүү); // тон (пин, жыштык, узактык);} // кечигүү колдонулат, андыктан ал обон ойнотула электе кийинки циклге өтпөйт // Ырды кайра ойнотуу үчүн Arduino'го кайра коюуну чыкылдата аласыз // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~ currentPixel = 0; piksel.begin (); // Бул NeoPixel китепканасын баштайт. piksel.show (); // Бул жаңыртылган пикселдин түсүн жабдыкка жөнөтөт.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

Serial.begin (300); Serial.println ("CAP1188 тест!"); if (! cap.begin ()) {Serial.println ("CAP1188 табылган жок"); while (1); } Serial.println ("CAP1188 табылды!");

}

void loop () {

// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (тийди == 0) {if ((белгиси узун) (миллис () - colorWipePreviousMillis)> = пиксел аралык) {colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (0, 255, 125)); }} башка {эгер ((колу узун) (миллис () - colorWipePreviousMillis)> = пикселдер аралык) {colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (100, 0, 150)); }}

үчүн (int i = 0; i = пиксел аралык) {

colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (0, 255, 125)); }} else {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelInterval) {colorWipePreviousMillis = millis (); colorWipe (пиксел. Color (100, 0, 150)); }}

кечиктирүү (күтүү);

}

}

жараксыз түсWipe (uint32_t c) {

// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Түстөрдөн кутулат пиксел.setPixelColor (currentPixel, c); piksel.setPixelColor (currentPixel-1, piksel. Color (0, 0, 0)); piksel.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; piksel.setPixelColor (7, pixel. Color (0, 0, 0));

}

}

3 -кадам: Кошумча кадам: дүмүрдү "Arduino даяр" кылуу

Кошумча кадам: дүмүрдү "Arduino даяр" кылуу
Кошумча кадам: дүмүрдү "Arduino даяр" кылуу
Кошумча кадам: дүмүрдү "Arduino даяр" кылуу
Кошумча кадам: дүмүрдү "Arduino даяр" кылуу
Кошумча кадам: дүмүрдү "Arduino даяр" кылуу
Кошумча кадам: дүмүрдү "Arduino даяр" кылуу

Эгерде сиз дарактын дүмүрүн колдонууну чечсеңиз, анда төмөнкүлөрдү аткарышыңыз керек.

  • Дарактын дүмүрүн алыңыз (мен эски балатыдан бекер алдым)
  • Ардуиноңузду өлчөп, дарактын дүмүрүндө зымдарды кантип орнотууну каалаарыңызды көрүңүз
  • Дүмүрдү оюп салыңыз (мен мектептен бургулоочу машинаны колдондум)
  • Отурулган кырларын кум менен тазалаңыз
  • Көңүлдүү майда деталдарды кошуңуз

Мен кошкон деталдар лазер кескич менен жасаган кичинекей логотип болчу. Мен ошондой эле дарагымдын ичиндеги бардык электроникамды чыбыкка үйүп койдум жана сырттан жаныбарлардын фаршын кошуп, жарыкты өткөрүп, кичинекей кошумча жумшактыкты бердим.

Сунушталууда: