Final Project פרוייקט סופי

The project הפרוייקט

My final project is a game. i creates 5 boxes that produces different sound or songs, and when touching each other, each box becomes an instrument of one song.

הפרוייקט הסופי שלי הוא משחק. בניתי 5 קופסאות שמשמיעות קול או שיר. כאשר מצורפות אחת לשניה, כל קופסא הופכת להיות כלי כחלק משיר אחד.


Design עיצוב


the boxes are cubes in a pressfit connection. 5 out of 6 sides of the box is made of the waste of the fabacademy electrical boards. so the "graphic design" of 3 boxes was out of my control (or was it...?!) and depended on the classes mistakes in milling the boards. i milled all the sides with a frame of the pressfit box.
הקופסאות הן קוביות מחוברות בשיניים אחת לשניה. 5 פאות מתוך 6 מיוצרות מהשאריות והטעויות של כרסום המעגלים החשמליים בפאבאקדמי. כך ש"העיצוב הגרפי, לא היה תלוי בי ב 3 מתוך 5 קופסאות.

the 2 remaining boxes i designed the graphics myself because the waste was all cleared. ב- 2 הקופסאות הנותרות, עיצבתי את הפאות בעצמי, מכיוון שההשאריות נגמרו.

the 6th side of the box was laser cut. it is clear perspex so you can see inside the cube

הפאה השישית של הקופסא היא מפרספקס שקוף, כדי שתהיה אפשרות להציץ פנימה



Board מעגל חשמלי

I designed the board. using attiny44. 2 boards have speakers. 2 other has 2 small speakers, and the 5th one has a vibration motor.

the board is one side of the box, facing inside. (the other sides are facing out) Traces, Interior.
עיצבתי את המעגל בעצמי, . השתמשתי באיי-טייני 44 ב- 2 קופסאות יש רמקולים גדולים. ב- 2 רמקולים קטנים ובאחרונה מנוע רטט שיושב בתוך קופבא של ניטים כדי לתת לו סאונד מעניין.


Connector מחבר

In order of connecting the boxes and making them synchronized, i used a shirt clicking button and the soldering braid. i connected one of the buttons to the input and one to the GND, so the braid is once an output and once GND that way an output won't tuch an output
in each box i created 2 sides with holes, and attached the buttons and braid, i also attached for each of these sides, 2 magnets, so the boxes will be connected for sure.
כדי שהקופסאות יוכלו להתחבר, ולהסתנכרן, השתמשתי בכפתורי תיק-תק ובשואב בדיל. הכפתורים בולטים ואליהם מחובר הקלט והאדמה.לשואב בדיל מחובר הפלט והאדמה . באופן זה, הפלט לא יגע הפלט לעולם ולא יווצר קצר. בנוסף, חיברתי 2 מגנטים לכל פאה, כדי שהפאות יגעו אחת בשנייה בוודאות. כל פאה כורסמה עם החורים המתאימים

Sound קול

To create a sound, i used 2 large speakers, 2 small ones and a vibration motor.
the sound from the large speakers was ok and normal, so all i had to do is to mill holes in one of the boxes sides.
כדי לייצר קול, השתמשתי ב-2 רמקולים גדולים, 2 קטנים ובמנוע רטט.
הקול שמושמע מהרמקולים הגדוליםהוא בווליום רגיל, וכל שהיה עליי לעשות זה לכרסם חורים בפאה המתאימה.

The small speaker, has low volum, so i created a small sound box inside the box. I laser cut a small box from clear plexiglass, the bottom part was attached to the "it's a box" inner side' on the top i taped an adhesive tape, to create the sound box. the speaker was attachet to the tape. לרמקול הקטן היה ווליום נמוך, אז יצרתי עבורו תיבת תהודה קטנה בתוך הקופסא. את תיבת התהודה ייצרתי מפרספקס שקוף בחיתוך לייזר, וחיברתי את חלקה התחתון לחלק הפנימי של הקופסא. על החלק העליון הדבקתי סלוטייפ שיוצר ויברציות ומגביר את הקול. את הרמקול הדבקתי לסלוטייפ.

the vibration motor can be heard only when touching other things, i decided to create a small box inside my box, and to put inside small metal eyelets, so the motor will vibrate them. מנוע הרטט משמיע קול רק כאשר הוא נוגע במשהו, אז החלטתי לייצר לו קופסא קטנה ובה שמתי ניטים ממתכת. כאשר המנוע רוטט, הוא מרטיט איתו את הניטים.

Code קוד

The code plays a short list of notes by switching a output leg on and off for cycles. The duration of each note is determined by the number of cycles to play (noteDurations in the code).
The code performs 2 actions: first is playing a list of notes by switching the output value. The frequency of the switching corresponds to the note and the number of cycles corresponds to the duration. second is broadcasting a sync signal to all cubes letting them know that a new cycle has started. The origin of the sync signal is in the "master" cube which is the only cube "allowed" to initiate this signal. The rest of the cubes receive the sync signal.
now you can burn the code on your board.
הקוד מנגן רשימת תווים ע"י נדנוד רגל המוצא למשך זמני המחזור התואמים לתדר שנרצה להשמיע. בתחילת המנגינה אחת הקוביות (המאסטר) שולחת אות סינכרון לשאר הקוביות.- מה שגורם להם לעבור למנגינה אחרת, המנוגנת ע"י כל הקוביות ביחד.
הקוד מורכב משני חלקים, הראשון הוא ניגון רשימת תווים ע"י נדנוד רגל , הרגל מחוברת לרמקול שמפיק את האודיו. תדר הנדנוד תואם לתדר התו הרצוי וכמות המחזורית תואמת למשך הזמן שנרצה להשמיע את התו. השני הינו שידור של אות הסינכרון, שידור זה מודיע לכל הקוביות שהתחיל מחזור חדש, ושעליהם להתחיל את המחזור מחדש. מקור של שידור הינו בקוביה הראשית (המאסטר) שהיא היחידה שרשאית ליזום את אות הסינכרון. אות הסינכרון מגיע לשאר הקוביות
כעת ניתן לצרוב את הקוד על המעגל.

            int cycVec[] = {1515,1515,1276,1515,1701,1908,2024  ,  676,602,568,602};
int noteDurations [] = {196,40,94,79,35,220,207  ,  178,199,211,199};
int waitDuration [] = {1,1,1,1,1,1,1   ,   5,7,5,7};
int howManyNotes = 11;
int delayInBetween = 120;

int spkOut =7;
int syncOut = 6;
int syncIn = 4;
int led = 8;
int switchMusic = 0;
int in_value = 1;
int in_valuePrev = 1;
int loopStart = 0;
int loopEnd = 0;

void setup() {

  pinMode(spkOut, OUTPUT);
  pinMode(syncOut, OUTPUT);  
  pinMode(led, OUTPUT);    
  pinMode(syncIn, INPUT);  
}

void loop() {
  // iterate over the notes of the melody:
  syncPoint:;
  if (switchMusic == 0) {
    loopStart = 0;
    loopEnd = 7;
  } else {
    loopStart = 7;
    loopEnd = 11;
  }
   // Decide - play harmony or solo  
   for (int thisNote = loopStart; thisNote < loopEnd; thisNote++) {
     
for (int i=0;i<noteDurations[thisNote];i++) { in_valuePrev = in_value; in_value = digitalRead(syncIn); digitalWrite(syncOut, in_value); if ( (in_valuePrev==0) & (in_value==1) ) { digitalWrite(led, HIGH); switchMusic=1; goto syncPoint; } </noteDurations[thisNote];i++)> digitalWrite(spkOut, HIGH); delayMicroseconds(cycVec[thisNote]); digitalWrite(spkOut, LOW); delayMicroseconds(cycVec[thisNote]); } for (int i=0; i<waitDuration[thisNote];i++) { in_valuePrev = in_value; in_value = digitalRead(syncIn); digitalWrite(syncOut, in_value); if ( (in_valuePrev==0) & (in_value==1) ) { digitalWrite(led, HIGH); switchMusic=1; goto syncPoint; } delay(delayInBetween); } digitalWrite(led, LOW); }

Assembly הרכבה

the assembly of the boxes parts was pretty simple, i had to solder wires from the board to the connecting sides. הרכבת הקופסאות הייתה די פשוט, כאשר כל החלקים היו מוכנים, הייתי צריכה להלחים בין הפאות.

you can see my final project presentation page and movie here