Changes between Version 3 and Version 4 of movable_sd_speaker


Ignore:
Timestamp:
Apr 2, 2015 12:34:49 PM (9 years ago)
Author:
soumura
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • movable_sd_speaker

    v3 v4  
    2929 * 皿ネジ(M2x10) x 8本
    3030 * ナベネジ(M2x8) x 4本
     31 * ナベネジ(M3x8) x 6本
    3132 * 電源用ケーブル(赤黒) 数十センチ分
    3233 * 通信用ケーブル(赤黒白) 数十センチ分
     
    4748[[Image(s-SD_speaker4.jpg)]]
    4849
     50組み立てるとこのようになります。
     51
     52[[Image(s-SD_speaker5.jpg)]]
     53[[Image(s-s-SD_speaker7.jpg)]]
     54
    4955土台の中身です。[[BR]]
    5056超音波スピーカーの電源電圧はDC12Vです。Arduino Pro Miniとサーボモータは5Vで動作させるので12Vから5Vを作るためのDCDCコンバータを搭載しています。[[BR]]
    51 [[Image(s-SDspeaker2.jpg)]]
     57[[Image(s-SDspeaker2_.jpg)]]
     58
    5259
    5360写真の上部にある2つのコネクタがDCジャックとステレオミニジャックです。DCジャックにはDC12Vを入力して、超音波スピーカーのアンプ基板とDCDCコンバータに電源を供給します。[[BR]]
    5461ステレオミニジャックはそのまま超音波スピーカーのアンプ基板の信号入力に接続されています。[[BR]]
    55 
     62写真の下部にあるステレオミニジャックはArduino Esploraとの通信用に使いました。[[BR]]
     63
     64
     65== スケッチ ==
     66
     67Arduino EsploraからのコマンドをArduino Pro Miniで受け取ってサーボモータを動かしています。[[BR]]
     68Esploraのスライダの位置でジョイスティックで動かすモードと加速度センサで動かすモードを切り替えられるようにしました。[[BR]]
     69
     70=== Arduino Pro Mini用 ===
     71{{{
     72#include <Servo.h>
     73Servo myservo[2];
     74char rcvData = 0;
     75int servo_angle[2];
     76void setup()
     77{
     78    myservo[0].attach(3);
     79    myservo[1].attach(7);
     80    Serial.begin(9600);
     81    myservo[0].write(90);
     82    myservo[1].write(90);
     83}
     84
     85void loop()
     86{
     87    servo_angle[0] = 0;
     88    servo_angle[1] = 0;
     89    if(Serial.available() > 0){
     90        rcvData = Serial.read();
     91        if(rcvData == 'x'){
     92            while(!Serial.available()){}
     93            rcvData = Serial.read() - '0';
     94            servo_angle[0] = rcvData * 100;
     95            while(!Serial.available()){}
     96            rcvData = Serial.read() - '0';
     97            servo_angle[0] += rcvData * 10;
     98            while(!Serial.available()){}
     99            rcvData = Serial.read() - '0';
     100            servo_angle[0] += rcvData;
     101           
     102            if(servo_angle[0] >= 0 && servo_angle[0] <= 180){
     103                myservo[0].write(servo_angle[0]);
     104                Serial.print("SERVO X ");
     105                Serial.print(servo_angle[0]);   
     106            }
     107        }
     108        else if(rcvData == 'y'){
     109            while(!Serial.available()){}
     110            rcvData = Serial.read() - '0';
     111            servo_angle[1] = rcvData * 100;
     112            while(!Serial.available()){}
     113            rcvData = Serial.read() - '0';
     114            servo_angle[1] += rcvData * 10;
     115            while(!Serial.available()){}
     116            rcvData = Serial.read() - '0';
     117            servo_angle[1] += rcvData;
     118           
     119            if(servo_angle[1] >= 0 && servo_angle[1] <= 180){
     120                myservo[1].write(servo_angle[1]);
     121                Serial.print("SERVO Y ");
     122                Serial.println(servo_angle[1]);
     123            }
     124        }   
     125    }
     126}
     127
     128}}}
     129
     130
     131=== Arduino Esplora用 ===
     132{{{
     133#include <Esplora.h>
     134#include <SoftwareSerial.h>
     135
     136SoftwareSerial mySerial(11,3);
     137
     138unsigned long x_angle = 90;
     139unsigned long y_angle = 90;
     140int x_stick = 90;
     141int y_stick = 90;
     142int x_trim = 20;
     143int y_trim = 0;
     144double x_temp = 0.0;
     145double y_temp = 0.0;
     146int x_stick2 = 90;
     147int y_stick2 = 90;
     148int x_demo = 90;
     149int y_demo = 90;
     150int add = 1;
     151int demo_speed = 100;
     152void setup()
     153{
     154    Serial.begin(9600);
     155    mySerial.begin(9600);
     156}
     157
     158void loop()
     159{
     160    int i = 0;
     161   
     162    int x_axis = Esplora.readAccelerometer(X_AXIS);
     163    int y_axis = Esplora.readAccelerometer(Y_AXIS);
     164    int value = Esplora.readSlider();
     165    int x_joy = Esplora.readJoystickX();
     166    int y_joy = Esplora.readJoystickY();
     167    int uButton = Esplora.readButton(SWITCH_UP);
     168    int dButton = Esplora.readButton(SWITCH_DOWN);
     169    int rButton = Esplora.readButton(SWITCH_RIGHT);
     170    int lButton = Esplora.readButton(SWITCH_LEFT);
     171
     172    if(value > 812){
     173   
     174        x_axis = map(x_axis, -180,180,0,180);
     175        y_axis = map(y_axis, -180,180,0,180);
     176   
     177        x_angle = (x_angle * 3 + x_axis) / 4;
     178        y_angle = (y_angle * 3 + y_axis) / 4;
     179               
     180   
     181        Serial.print("x");
     182        if(x_angle < 10){
     183            Serial.print("00");
     184            Serial.print(x_angle);
     185        }
     186        else if(x_angle < 100){
     187            Serial.print("0");
     188            Serial.print(x_angle);   
     189        }
     190        else{
     191            Serial.print(x_angle);   
     192        }
     193        Serial.print("y");
     194        if(y_angle < 10){
     195            Serial.print("00");
     196            Serial.println(y_angle);
     197        }
     198        else if(y_angle < 100){
     199            Serial.print("0");
     200            Serial.println(y_angle);   
     201        }
     202        else{
     203            Serial.println(y_angle);   
     204        }
     205   
     206        mySerial.print("x");
     207        if(x_angle < 10){
     208            mySerial.print("00");
     209            mySerial.print(x_angle);
     210        }
     211        else if(x_angle < 100){
     212            mySerial.print("0");
     213            mySerial.print(x_angle);   
     214        }
     215        else{
     216            mySerial.print(x_angle);   
     217        }
     218        mySerial.print(",");
     219   
     220   
     221        mySerial.print("y");
     222       
     223        if(y_angle < 10){
     224            mySerial.print("00");
     225            mySerial.println(y_angle);
     226        }
     227        else if(y_angle < 100){
     228            mySerial.print("0");
     229            mySerial.println(y_angle);   
     230        }
     231        else{
     232            mySerial.println(y_angle);   
     233        }
     234        mySerial.print(",");
     235        delay(20);
     236    }
     237   
     238   
     239    else if(value < 212){
     240        x_joy = map(x_joy,-512,511,180,0);
     241        y_joy = map(y_joy,-512,511,180,0);
     242        x_stick = (x_stick * 3 + x_joy)/4;
     243        y_stick = (y_stick * 3 + y_joy)/4;
     244       
     245        if(x_stick > 85 && x_stick < 95) x_stick = 90;
     246        if(y_stick > 85 && y_stick < 95) y_stick = 90;
     247       
     248        x_temp = x_temp + (x_stick - 90) / 50.0;
     249        y_temp = y_temp + (y_stick - 90) / 50.0;
     250       
     251        if((x_temp + 90) >= 180) x_temp = 90.0;
     252        else if((x_temp + 90) <= 0) x_temp = -90.0;
     253        if((y_temp + 90) >= 180) y_temp = 90.0;
     254        else if((y_temp + 90) <= 0) y_temp = -90.0;
     255       
     256        x_stick2 = x_temp + 90;
     257        y_stick2 = y_temp + 90;               
     258       
     259        mySerial.print("x");
     260        Serial.print("x");
     261        if(x_stick2 < 10){
     262            mySerial.print("00");
     263            mySerial.print(x_stick2);
     264            Serial.print("00");
     265            Serial.print(x_stick2);
     266        }
     267        else if(x_stick2 < 100){
     268            mySerial.print("0");
     269            mySerial.print(x_stick2); 
     270            Serial.print("0");
     271            Serial.print(x_stick2); 
     272        }
     273        else{
     274            mySerial.print(x_stick2);
     275            Serial.print(x_stick2); 
     276        }
     277        mySerial.print("y");
     278        Serial.print("y");
     279        if(y_stick2 < 10){
     280            mySerial.print("00");
     281            mySerial.println(y_stick2);
     282            Serial.print("00");
     283            Serial.println(y_stick2);
     284        }
     285        else if(y_stick2 < 100){
     286            mySerial.print("0");
     287            mySerial.println(y_stick2);
     288            Serial.print("0");
     289            Serial.println(y_stick2);
     290        }
     291        else{
     292            mySerial.println(y_stick2);
     293            Serial.println(y_stick2);
     294        }
     295        delay(20);       
     296       
     297    }
     298   
     299    else{
     300        if(x_demo >= 150) add = -1;
     301        else if(x_demo <= 50) add = 1;
     302       
     303        x_demo += add;
     304        delay(demo_speed);
     305
     306        if(uButton == LOW){
     307            while(1){
     308                uButton = Esplora.readButton(SWITCH_UP);
     309                if(uButton == HIGH) break;
     310            }
     311            y_demo += 5;
     312            if(y_demo >= 180) y_demo = 180;   
     313        }
     314        if(dButton == LOW){
     315            while(1){
     316                dButton = Esplora.readButton(SWITCH_DOWN);
     317                if(dButton == HIGH) break;
     318            }
     319            y_demo -= 5;
     320            if(y_demo <= 0) y_demo = 0;   
     321        }
     322        if(rButton == LOW){
     323            while(1){
     324                rButton = Esplora.readButton(SWITCH_RIGHT);
     325                if(rButton == HIGH) break;
     326            }
     327            demo_speed += 10;
     328            if(demo_speed >= 200) demo_speed = 200;
     329               
     330        }
     331        if(lButton == LOW){
     332            while(1){
     333                lButton = Esplora.readButton(SWITCH_LEFT);
     334                if(lButton == HIGH) break;
     335            }
     336            demo_speed -= 10;
     337            if(demo_speed <= 20) demo_speed = 20;
     338        }
     339        mySerial.print("x");
     340        Serial.print("x");
     341        if(x_demo < 10){
     342            mySerial.print("00");
     343            mySerial.print(x_demo);
     344            Serial.print("00");
     345            Serial.print(x_demo);
     346           
     347        }
     348        else if(x_demo < 100){
     349            mySerial.print("0");
     350            mySerial.print(x_demo);   
     351            Serial.print("0");
     352            Serial.print(x_demo);
     353        }
     354        else{
     355            mySerial.print(x_demo);
     356            Serial.print(x_demo);
     357        }
     358        mySerial.print("y");
     359        Serial.print("y");
     360        if(y_demo < 10){
     361            mySerial.print("00");
     362            mySerial.println(y_demo);
     363            Serial.print("00");
     364            Serial.println(y_demo);
     365        }
     366        else if(y_demo < 100){
     367            mySerial.print("0");
     368            mySerial.println(y_demo);
     369            Serial.print("0");
     370            Serial.println(y_demo);
     371        }
     372        else{
     373            mySerial.println(y_demo);
     374            Serial.println(y_demo);
     375        }
     376        delay(20);     
     377    }
     378}
     379}}}