Other projects

iBailys Robot designed by Bailys Beads Maker Space in ShenZhen

2 1588
Edited by SimonLong at Jan 04, 2016 02:08

iBailys 机器人
一,作品因解决这些问题而诞生:
1.身处信息时代信息多而杂
2.工作学习时间需要互联网进行工作 但一些无关信息总是弹出
3.一下要拿手机扫一下单词 一下要放下手机拿笔写字 用户体验很糟糕
4.手机屏幕太小 查询资料不方便
5.工作时键盘鼠标操作与拿笔切换不方便


二,实现功能:
1.通过电机舵机实现跟着人手移动,这样一来省却了调节的麻烦(这一点用红外实现),
  二来可以给APP开发用户提供一些动作开发的硬件。
2.语音操作,用户可以通过语音实现一系列功能,比如打开app等,解决总是在不同输入
  设备切换的问题。
3.内置的app 可以实现查单词、找作业答案、百度搜索的功能。


三,制作简介与流程:
1.0简介
这是创马比赛的一个作品完成的比较仓促,现场演示效果不太好。
iBailys总共由两大部分组成。
一是 Arduino 负责机械控制部分 控制灯的移动
二是 Lemaker Guitar 开发板 安装安卓系统 实现APP软件与硬件的配合
Hints:Lemaker Guitar 安卓系统时要安装 安卓官网最新V1511及以上
           因为之前版本摄像头驱动有问题,无法使用!安装后摄像头要用OTG线将USB                  
           转成安卓接口插在Lemaker Guitar 上。
1.1红外传感跟随手移动原理


当手至在一侧被红外所感应到
则步进电机移动
移动到让手进入进入红外交叉区域
两个红外传感都收到信号
此时停止


这是左右移动原理
上下移动也是如此

但是经过我们做出来实践后发现
效果很差!需要改进
问题出现在
1)红外传感交叉识别后的区域面积大!泛射严重
2)红外感应识别 4s 一个周期 刷新率低
3)在上面下面都加上红外传感模块后 几乎整个灯罩都是前方都是交叉区


改进设想:
1)通过图像识别实现跟踪移动 调节灯源位置
2)通关光线传感器 实现触碰息光 实现调节

1.2语音识别模块
语音识别进行APP打开操作 打开百度搜索一些信息
这些通过调用Turing OS的API实现
由于当时系统版本升级了 我们写的APP出现一些问题
过段时间发上来 APP的资料

1.3实现效果
iBailys可以外接一个显示器,然后再通过灯罩上的摄像头照的相片进行作业答案搜索,或使用有道词典照相搜词功能进行取词,在语言模块没完成之前这些都要通过鼠标进行操作。

语音进行交互有个问题 要将APP了得 button 都进行定义才能精确进行交互 这需要有道词典等APP开发公司组织合作完成。


材料准备:
Arduino uno一个
ULN2003步进电机驱动板X1
HC-SR501人体红外传感器模块X4
3d打印件舵机插件
3d打印件舵机接件
3d打印件大齿轮
3d打印件小齿轮
杜邦线若干
按钮X1
9g舵机X1
28BYJ-48步进电机X1
Led灯X1
电阻500欧一个
面包板
外部5伏电源

硬件连接:
ULN2003步进电机驱动板与28BYJ-48步进电机连接:
电机          驱动板
Vcc    --      vcc
A      --      A
B      --      B
C      --      C
D      --      D
ULN2003步进电机驱动板与arduino UNO连接:
驱动板       UNO
BJ1     --     D8
BJ2     --     D9
BJ3     --     D10
BJ4     --     D11
VCC    --    +5V(外部供电正5伏,UNO没有那么大的驱动电流。)
Gun    --     地
红外传感器及其元件与arduino UNO的连接:
元件                                    UNO
红外传感器1的out            --        D2
红外传感器2的out            --        D3
红外传感器3的out            --        D4
红外传感器4的out            --        D5
9克舵机信号out               --       D6
Led阴极                                                  --                   D7
(led阳极接+5)
按钮一端                                            --      D12
(按钮另一端接+5v)
Arduino代码:
  1. #include <Servo.h>   //调用舵机的函数库
  2. #define LED 7   // light
  3. #define KEY 12  // key press

  4. int KEY_NUM = 0;                        //按键键值存放变量,不等于1说明有按键按下

  5. #define p1 2    //红外传感器的引脚2,3,4,5脚
  6. #define p2 3
  7. #define p3 4
  8. #define p4 5

  9. #define PWM_pin 6    //舵机的信号引脚
  10. int pulsewidth = 0;      //定义变量,舵机的脉冲宽度的
  11. Servo myservo;          //定义一个舵机伺服电机对象

  12. #define  Pin0 8     //定义四个步进电机的相位引脚,8,9,10,11
  13. #define  Pin1 9
  14. #define  Pin2 10
  15. #define  Pin3 11
  16. int _step = 0;      //步数
  17. boolean dir;         //布尔变量,确定步进电机是正转还是反转
  18. int stepperSpeed = 5;     //电机转速,5ms一步
  19. int iCurrentAngle = 45;
  20. int iDebugAngle = 45;
  21. int iDeltaSpeed = 1; // speed per 1 frequence
  22. int s1=0,s2=0,s3=0,s4=0;    //定义4个存储红外传感器数值的量
  23. void setup()
  24. {
  25. pinMode(p1,INPUT);      //初始化红外传感器的端口
  26. pinMode(p2,INPUT);
  27. pinMode(p3,INPUT);
  28. pinMode(p4,INPUT);
  29. myservo.attach(6);     //6号引脚输出舵机电机控制信号
  30. Serial.begin(9600);   

  31. pinMode(Pin0, OUTPUT);   //初始化步进电机的端口
  32. pinMode(Pin1, OUTPUT);
  33. pinMode(Pin2, OUTPUT);
  34. pinMode(Pin3, OUTPUT);

  35. myservo.write(iCurrentAngle);

  36.           pinMode(LED,OUTPUT);                                        //定义LED为输出引脚
  37.           pinMode(KEY,INPUT_PULLUP);                //定义KEY为带上拉输入引脚
  38.           digitalWrite(LED,HIGH);
  39. }

  40. void judgeDir()
  41. {
  42. int i=0;         
  43. s1=digitalRead(p1);   // up数字读红外传感器的数值
  44. s2=digitalRead(p2);  //   down
  45. s3=digitalRead(p3);  // left
  46. s4=digitalRead(p4);  // down

  47. //pulse(90);        //初始化舵机的角度90°

  48. if(s1 == HIGH && s2 == LOW)
  49. {
  50.    // turn down
  51.    if(iCurrentAngle <70)
  52.    {
  53.                     iDebugAngle = iCurrentAngle;
  54.                 iCurrentAngle += iDeltaSpeed;
  55.                 myservo.write(iCurrentAngle);
  56.                 delay(15);
  57.         }               
  58. }
  59. else if(s1 == LOW && s2 == HIGH)
  60. {
  61.         // turn up
  62.         if(iCurrentAngle > 25)
  63.         {
  64.         iDebugAngle = iCurrentAngle;
  65.                 iCurrentAngle -= iDeltaSpeed;
  66.                 myservo.write(iCurrentAngle);
  67.                 delay(15);
  68.         }               
  69. }
  70. else
  71. {
  72.     // do nothing
  73. }

  74. if(s3 == HIGH && s4 == LOW)
  75. {
  76.    // turn right
  77.    for(int i = 0; i<20; ++i)
  78.     {
  79.               stepper( false);      
  80.     }
  81. }
  82. else  if(s3 == LOW && s4 == HIGH)
  83. {
  84.         // turn left
  85.          for(int i = 0; i<20; ++i)
  86.     {
  87.               stepper( true);
  88.     }
  89. }
  90. else
  91. {
  92.     // do nothing
  93. }
  94. Serial.print(iDebugAngle);
  95. Serial.print("  ; ");
  96. Serial.print(s1);
  97. Serial.print("  ; ");
  98. Serial.print(s2);
  99. Serial.print("  ; ");
  100. Serial.print(s3);
  101. Serial.print("  ; ");
  102. Serial.print(s4);
  103. Serial.println(" ----------------------------");

  104. //////////////////////////////////////////

  105. //delay(150);
  106. }
  107. void loop()
  108. {
  109.   //stepper( true);
  110.         judgeDir();
  111.     ScanKey();
  112. /*
  113. int i=0;         
  114. s1=digitalRead(p1);   // up数字读红外传感器的数值
  115. s2=digitalRead(p2);  //   down
  116. s3=digitalRead(p3);  // left
  117. s4=digitalRead(p4);  // r ightmmmmmmmmmmmmmmm,,,

  118. //pulse(90);        //初始化舵机的角度90°

  119.          if(HIGH==s1)           //判断第一个红外传感器是否是1,
  120. {
  121.                   for(i=90;i>0;i--)     //i从90变到0
  122.                   {
  123.                           myservo.write(i);       //舵机转到i角度
  124.                           delay(15);
  125.                           if(LOW==s1)
  126. {
  127. break;
  128. }    //如果s1是低电平,就跳出循环
  129.           }
  130. }

  131. if(HIGH==s2)
  132. {
  133.   for(i=90;i<180;i++)
  134.   {
  135.     myservo.write(i);
  136.                   delay(15);
  137.                   if(LOW==s2)
  138. {
  139. break;
  140. }
  141.   }
  142. }


  143. if(HIGH==s3)      //判断第三红外传感器是否高电平
  144. {
  145.          dir=true;       //是的话就赋dir为真,即步进电机反转
  146. stepper(dir);  //将dir传递到stepper函数,stepper为让步进电机转动函数
  147. }
  148. if(HIGH==s4)
  149. {
  150.          dir=false;
  151. stepper( dir);
  152. }
  153. */ //注释掉

  154. //*******************************舵机的初始化函数
  155. void pulse(int angle)                        //设置舵机角度为angle
  156. {
  157.         pulsewidth=int ((angle*11)+500);        //计算高电平时间
  158.         digitalWrite(PWM_pin,HIGH);                                //设置高电平
  159.         delayMicroseconds(pulsewidth);                //延时pulsewidth (us)
  160.         digitalWrite(PWM_pin,LOW);                                //设置低电平
  161.         delay(20-pulsewidth/1000);                                //延时20-pulsewidth/1000 (ms)
  162. }
  163. //************************************步进电机转动函数
  164. void stepper(boolean dir)
  165. {
  166. switch(_step){
  167.     case 0:
  168.       digitalWrite(Pin0, LOW);
  169.       digitalWrite(Pin1, LOW);
  170.       digitalWrite(Pin2, LOW);
  171.       digitalWrite(Pin3, HIGH);
  172.     break;
  173.     case 1:
  174.       digitalWrite(Pin0, LOW);
  175.       digitalWrite(Pin1, LOW);
  176.       digitalWrite(Pin2, HIGH);
  177.       digitalWrite(Pin3, HIGH);
  178.     break;
  179.     case 2:
  180.       digitalWrite(Pin0, LOW);
  181.       digitalWrite(Pin1, LOW);
  182.       digitalWrite(Pin2, HIGH);
  183.       digitalWrite(Pin3, LOW);
  184.     break;
  185.     case 3:
  186.       digitalWrite(Pin0, LOW);
  187.       digitalWrite(Pin1, HIGH);
  188.       digitalWrite(Pin2, HIGH);
  189.       digitalWrite(Pin3, LOW);
  190.     break;
  191.     case 4:
  192.       digitalWrite(Pin0, LOW);
  193.       digitalWrite(Pin1, HIGH);
  194.       digitalWrite(Pin2, LOW);
  195.       digitalWrite(Pin3, LOW);
  196.     break;
  197.     case 5:
  198.       digitalWrite(Pin0, HIGH);
  199.       digitalWrite(Pin1, HIGH);
  200.       digitalWrite(Pin2, LOW);
  201.       digitalWrite(Pin3, LOW);
  202.     break;
  203.       case 6:
  204.       digitalWrite(Pin0, HIGH);
  205.       digitalWrite(Pin1, LOW);
  206.       digitalWrite(Pin2, LOW);
  207.       digitalWrite(Pin3, LOW);
  208.     break;
  209.     case 7:
  210.       digitalWrite(Pin0, HIGH);
  211.       digitalWrite(Pin1, LOW);
  212.       digitalWrite(Pin2, LOW);
  213.       digitalWrite(Pin3, HIGH);
  214.     break;
  215.     default:
  216.       digitalWrite(Pin0, LOW);
  217.       digitalWrite(Pin1, LOW);
  218.       digitalWrite(Pin2, LOW);
  219.       digitalWrite(Pin3, LOW);
  220.     break;
  221.   }
  222.   if(dir){
  223.     _step++;
  224.   }else{
  225.     _step--;
  226.   }
  227.   if(_step>7){
  228.     _step=0;
  229.   }
  230.   if(_step<0){
  231.     _step=7;
  232.   }
  233.   delay(stepperSpeed);

  234. }
  235. //*******************************************************************///
  236. int iKeyState = 0;
  237. void ScanKey()                                                //按键扫描程序
  238. {
  239.   int curState = digitalRead(KEY);
  240.   Serial.println(curState);
  241.    if( curState == LOW)
  242.     {
  243.       
  244.        if(iKeyState == 1)
  245.        {
  246.          //delay(20);        
  247.          digitalWrite(LED,HIGH);                //LED的状态翻转
  248.          iKeyState =  0;
  249.        }
  250.        else
  251.        {
  252.          //delay(20);        
  253.          digitalWrite(LED,LOW);                //LED的状态翻转
  254.          iKeyState =  1;
  255.        }
  256.        delay(300);
  257.     }
  258. }   
Copy the Code


schematic diagram

schematic diagram
Arduino circuit diagram

ArduinoCircuitDiagram

ArduinoCircuitDiagram

lebron soldier 10
philipp plein outlet
miu miu sunglasses
basketball jersey
insanity
lebron soldier 9
guess
lululemon sale
gucci bag
g-star jeans
ray ban sunglasses outlet
furla handbags
under armour shoes
chloe sunglasses
lebron ambassador 10
jordan 14
ghd hair straighteners
dyson hair dryer
nike store
curry jersey
jbl speakers
jimmy choo
nine west
jordan 6
designer sunglasses
tom ford sunglasses
prada sunglasses
x-large clothing
fussball trikots
soccer jersey
russell wilson jersey
michael kors purse
hollister
ray ban wayfarers
kyrie 4
nike canada
maillot de foot pas cher
skechers sandals
north face
police sunglasses
givenchy bags
james harden jersey
designer sunglasses
persol sunglasses
givenchy jewelry
north face
manolo blahnik
tom brady jersey
kobe 12
armani handbags
lee jeans
oakley sunglasses outlet
a bathing ape
carrera sunglasses
camisetas de futbol
visconti pens
alife clothing
philipp plein outlet
maillot de foot
nike shoes
air more uptempo
kd 8
barbour
michael kors outlet
bose headphones
champion
michael kors canada
armani jeans
marcelo burlon
kristaps porzingis jersey
jordan 9
new balance
nike kyrie 2
maui jim sunglasses
tiffany jewelry
reebok classic shoes
ferragamo sunglasses
columbia outlet
converse sneakers
michael kors outlet clearance
hermes jewelry
the north face
ferragamo shoes
nobis jackets
gucci handbags
jordan 31
chanel
curry 5
woolrich jackets
coach outlet store online clearance
versace sunglasses
kevin durant jersey
nike free
gentle monster sunglasses
jordan 13
maglie calcio
tiffany rings
hermes uk
air zoom pegasus
curry 3
chenlina20180707

You have to log in before you can reply Login | Sign Up

Points Rules