最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

PlotClock,WeMos和blynk玩老式AMI点唱机

时间:2017-05-19 14:18来源:未知 作者:admin 点击:
四技术创新使这个项目成为可能:1977罗AMI的自动点唱机,plotclock机器人套件,wemos / ESP 8266单片机和Blynk App /云服务。 注意:如果你没有自动点唱机在手不要停止阅读! 这个项目可以很容易地通过控制各种事情的人的手指控制。 一个例子是一个机器人手

四技术创新使这个项目成为可能:1977罗AMI的自动点唱机,plotclock机器人套件,wemos / ESP 8266单片机和Blynk App /云服务。

注意:如果你没有自动点唱机在手–不要停止阅读!这个项目可以很容易地通过控制各种事情的人的手指控制。一个例子是一个机器人手指演奏传统的木琴–也许这命令来自于你!

我40岁的罗AMI r-81点唱机仍然是60的工作细玩古董乙烯基单打,70、80年代的重量超过160公斤(360磅)这样的球员是不是很现代的MP玩家为便携式的,但生活在互联网时代,现在可以实现自动点唱机和200乙烯基记录你的口袋里–几乎当然!你甚至可以使用你自己的播放列表存储在单片机!

惊人的plotclock机器人最初被设计为在可擦写板绘制时间数字显示当前时间。我的适应plotclock是使用它作为一个紧迫的点唱机选歌按钮机器人手指。

Plotclock的“手指”是由3个舵机的wemos单片机控制驱动。这件奇迹是(几乎)Arduino Uno相容并具有WiFi功能,因此可以以无线方式在世界上任何地方的控制自动点唱机。

蛋糕上的奶油是难以置信的简单易用的应用程序和他们的blynk blynk云服务器提供一个很好的手机/平板电脑的全方位移动用户界面。

步骤1:硬件

 PlotClock,WeMos和blynk玩老式AMI点唱机

点唱机

项目1977罗AMI r-81点唱机。选择按钮任何旧的点唱机将plotclock做–注意的几个不足:PlotClock的原始的武器设计,覆盖面积约5×12厘米,自动点唱机的按键布局(包括所有选择按钮)必须对大小。老点唱机的按钮,可能需要更多的动力伺服系统可以提供比PlotClock。

AMI r-81有记忆,它可以存储所有的200个选项。选择是基于他们存储在记录杂志订单(转盘式),不在他们选择的顺序。一个记录多个选择是只打了一次。

plotclock

Plotclock是市售套件包括机械部分,3个舵机,Arduino Uno R3,Arduino扩展板和USB电缆。约30美元,这是一个很好的购买(如banggood。com)。Arduino扩展板和USB电缆不能用于这个项目。

有几个很好的互联网/ YouTube教程构成plotclock–这:plotclock指令

https://static1.squarespace.com/static/52cb189ee4b012ff9269fa8e/t/5526946be4b0ed8e0b3cd296/1428591723698/plotclock_final_instructions.pdf

wemos

wemos D1 R2 ESP8266基于单片机。它可以使用Arduino IDE编程和WiFi功能是本项目的硬件完美的一块。

步骤2:标定

 PlotClock,WeMos和blynk玩老式AMI点唱机

校准是伺服的角度找到准确的角度值的任务(0至180度)对应的物理位置的选择按钮。角度值可以通过三角arithemitics或使用CAD软件发现。我得到的近似值,从我的朋友谁知道如何使用AutoCAD。

然而,最终的校准必须通过试验和错误。使用按钮的布局画在纸上可以做“桌面”测试来找到正确的角度值。

步骤3:组装

 PlotClock,WeMos和blynk玩老式AMI点唱机

装电线

从plotclock舵机,wemos连接了5条线:+ 5,GND,D4,D5和D6。看到图片和代码的细节。

安装在自动点唱机

我不想让任何螺丝孔40岁的点唱机,这么长时间没有重大损害的存活。采用软橡胶密封胶我固定一块铝角列表自动点唱机控制台下。橡胶密封胶使紧可不留任何标记删除。plotclock身体所必需的两个小角铝来拟合在亚克力板。压克力板是安装的角度列出两弹簧夹将可能使最后调整垂直和水平。

步骤4:blynk

 PlotClock,WeMos和blynk玩老式AMI点唱机

blynk是一个免费的应用程序来控制单片机的几种类型的远程。Blynk,你可以很容易地建立一个很好的用户界面使用控件的几种类型。只有一个部件,这个项目需要:表格控件。

步骤5:软件

blynk APP

没有编码在应用程序方面。App之间的“对话”(blynk)和微控制器(wemos)是由“虚拟销”基本上是用于发送和接收信息的渠道,这两者之间。虚拟销例如用来发送选定的歌曲从blynk APP WeMos的行数,和wemos处理休息,即发送命令到plotclock伺服。

wemos代码

/**************************************************************
Table widget at V2
**************************************************************/

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>

char auth[] = "--YOUR AUTH CODE--";  //Jukebox project
char ssid[] = "--YOUR SSID--";
char pass[] = "--YOUR WIFI PASSWORD--";

int c[50];          //Array for Jukebox record positions (100-299)

Servo myservo1;     //lifting  
Servo myservo2;     //left arm
Servo myservo3;     //right arm

int pos1 = 0;
int pos2 = 0;
int pos3 = 0;
int btn=0;

void setup()
{ 
  myservo1.attach(2);  //  pin D4, lift
  myservo2.attach(14);  // pin D5, left
  myservo3.attach(12);  // pin D6, right

  myservo1.write(140);
  myservo2.write(90);
  myservo3.write(90);
  
  Serial.begin(115200);
    
  Blynk.begin(auth, ssid, pass);

  // Notify immediately on startup
  //String msg = "Jukebox WeMos connected to: ";
  //Blynk.notify(msg + ssid);

  //clear table at start
  Blynk.virtualWrite(V2, "clr");

  populateTable();
}

BLYNK_WRITE(V2)       //Receive commands from Table widget V2
{
   String cmd = param[0].asStr();  //param[0]="select" or "deselect", param[1]=row
   Serial.print("\nTable: BLYNK_WRITE(V2) cmd: ");
   Serial.print(cmd);
   
   int selection = c[param[1].asInt()];     //Selected row number is in param[1]
   Serial.println("\nSelection: ");
   Serial.println(selection);

   process_selection(selection);
}

void populateTable()
{
       int i = 0; 
       Serial.println("Populating table...") ;

       Blynk.virtualWrite(V2, "add", 0, "Be My Baby - The Supremes", 112);                c[i] = 112;
       Blynk.virtualWrite(V2, "add", 1, "Number One - Jerry Williams", 176);              i++; c[i] = 176;
       Blynk.virtualWrite(V2, "add", 2, "All My Loving - The Beatles", 184);              i++; c[i] = 184;
       Blynk.virtualWrite(V2, "add", 3, "In the Summertime - Mungo Jerry", 236);          i++; c[i] = 236;
       Blynk.virtualWrite(V2, "add", 4, "Black Cloud - Chubby Checker", 155);             i++; c[i] = 155;
       Blynk.virtualWrite(V2, "add", 5, "Mamy Blue - Pop-Tops", 260);                     i++; c[i] = 260;
       Blynk.virtualWrite(V2, "add", 6, "It's Gonna Be Alright - Gerry & Pacemakers", 145);   i++; c[i] = 145;
       Blynk.virtualWrite(V2, "add", 7, "My Way - Tom Jones", 193);                       i++; c[i] = 193;
       Blynk.virtualWrite(V2, "add", 8, "San Bernadino - Christie", 149);                 i++; c[i] = 149;
       Blynk.virtualWrite(V2, "add", 9, "The Twist - Chubby Checker", 169);               i++; c[i] = 169;</p><p>       delay(1000);
  }

void process_selection (int selection)
{
   //parse 3-digit selection (eg. 178) to 3 buttons:
   
   int btn1 = int(selection/100);   //first button
   Serial.println("\nBtn1: ");
   Serial.println(btn1);

   if (btn1 == 1 || btn1 == 2)  //first button must be 1 or 2 - otherwise do the reset
   {
   push_button(btn1);

   selection = selection - (btn1 * 100);
   int btn2 = int(selection/10);   //second button
   Serial.println("\nBtn2: ");
   Serial.println(btn2);
   push_button(btn2);

   selection = selection - (btn2 * 10);
   int btn3 = int(selection);      //third button
   Serial.println("\nBtn3: ");
   Serial.println(btn3);
   push_button(btn3);

   } else
   {
   push_button(11);                //reset button
   }

   //reset servo positions when all done
   delay(2000);
   myservo1.write(140);

   myservo2.write(90);
   myservo3.write(90);}

void push_button(int btn)

 {

    //this is called 3 times for each selection
    //actual button push is done after each button (find 'actual button push')

    switch (btn) {
      
    case 1:
      set_servo_angles (134, 136);     //1
      break;
      
    case 2:  
      set_servo_angles (128,110);     //2
      break;
      
    case 3: 
      set_servo_angles (112,88);  //3
      break;
      
    case 4:
      set_servo_angles (89,68);  //4
       break;
      
    case 5:
      set_servo_angles (62,55);  //5
      break;
      
    case 6:
      set_servo_angles (172,131);  //6
      break;
      
    case 7:
      set_servo_angles (163,106);  //7
      break;
      
    case 8:
      set_servo_angles (140,83);  //8
      break;
      
    case 9:
      set_servo_angles (104,58);  //9
      break;
      
    case 0:
      set_servo_angles (75,36);  //0
      break;
      
    case 11:
      set_servo_angles (36, 30);     //11
      break;
      
    } 

    //end switch

}

void set_servo_angles(int pos2, int pos3)
{
    myservo2.write(pos2);
    myservo3.write(pos3);

    //Servo positions ready - perform the actual button push:
    delay(500);
    myservo1.write(60);    //down 
    delay(500);
    myservo1.write(140);    //up
    delay(500);
}

void loop()
{
  Blynk.run();
}

步骤6:未来的步骤

视频直播的视频和音频流部件- Blynk App(已经测试工作)

Widget -播放点播下载webhook云(已经测试工作)

表格控件-一些小改进的部件都是受欢迎的(建议送到Blynk的开发商)


(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片