看了极客工坊的大佬们做了一个MobBob的机器人,感觉挺萌挺Q的,趁着闲暇时间自己做了一个玩玩,因为刚玩3D打印机,做得有点挫,所以就不放图了。。。

1.背景介绍

  澳大利亚有一位视频游戏开发者KevinChan,他花了一辈子时间开发的机器人,最近几年又开始使用3D打印。近日,他展示了自己设计的一款非常独特的3D打印机器人。这个机器人的闪亮之处在于,它的主体和控制中心是一部普通的智能手机!KevinChan把自己创造的这个机器人称为“MobBob。”
不过今天,这么好玩的东西怎么也要把它弄出来玩玩。
  下面就是这货:


2.准备材料和工具


  这里是那位澳大利亚的老爷爷用的材料,不过看到Bluno Nano的主控板的价格,真的有点望而却步(Bluno的东西都很贵),所以选择了一个折中的办法:选择便宜的arduino nano+蓝牙模块完成,只要不到原价格的四分之一,DIY吗,就要玩性价比,但是在选择蓝牙模块时,一定要选择集成TI CC2540芯片的蓝牙模块,因为后期可能匹配不上手机端,有能力的大佬,可以把它原厂的程序进行修改,那就没问题了。

3.打印文件

https://www.thingiverse.com/thing:990950/#files
  上面的链接可以下载所需的所有文件,包括3D打印文件,APP等。
  如果失效了,可以去这里下载:

  手机APP:

http://download.csdn.net/download/pieces_thinking/9941621
(应该是还有一个资源文件的,但是上传太慢了,大家在我的资源里找找吧!)

  常用文件,包括下位机的程序:

http://download.csdn.net/download/pieces_thinking/9941621

  这里包括更新的文件,包括3D打印文件和手机APP,建议大家下载下面的链接。

  下面盗几张别人3D打印的文件,大家看看工作量,之前看到某宝有打印好的套件有卖,不想花时间等待的,可以去搜一搜。

模型文件打印设置如下:
Quality:
Layer height:0.15
Shell thickness:0.8
Fill
Bottom/top thickness:0.4
Fill density:50
Support:
Support type:touching buildplate
Platform adhesion type:brim


膝关节


电池槽


左脚


右脚




手机槽(尺寸设置请实际测量自己的手机宽度)


舵机卡槽(请按上图方位进行打印)

4.组装

  组装之前要准备好9g的舵机,建议大家买某宝上那种金属的,不要买那种塑料的,因为感觉塑料的力度不够,而且做工真的差,有个都上电了,发现零点没对准(囧)。

  继续上图:



器件合集


拿出舵机1个脚部和1条脚部件


脚部组装(请尽量将舵盘按90度安装)


腿部安装(在腿部上方安装长舵盘如图所示,带舵盘的为机器人正面,以下图为例安装腿部)


腿部正面侧面图


膝部安装(将舵机头朝下,安装入膝部注意白色转动轴部分是机器人正面)


先将腿部与膝盖部分固定好,如上图所示


将上部中的膝腿组合体分别于左右脚组装起来如上图


再将舵机卡槽卡在膝部舵机上方,用M3*15螺丝固定。


在以上组合体上依次增加手机卡槽和电池卡槽用用M3*15螺丝固定

5.电气连接

  还是看图吧:

  先将Bluno nano和Nano io 拓展板叠加(注意Bluno nano 针脚的方向),四个舵机分别对应数字口分布:左膝舵机D6,左脚舵机D7,右膝舵机D8,右脚舵机D9。Servo power分别接3.7V电池的正负极为4个舵机供电。9V电源通过转接头与拓展板连接供电。.



  电路部分的连接到此就结束了。最后别忘记将你的手机安防到手机插槽中。

6.程序代码和手机APP

  在Bluon nanao中刷入以下代码,再在手机上安装MOBOBO手机APP软件。那么激动人心的时刻到来了,开启手机蓝牙,运行手机APP,选项如下所示




如果蓝牙配对成功,在Bluno nano上的蓝牙指示灯会亮起。


PS:如果不喜欢这么萌的,大家可以参考这位做得超大版的MobBob

http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=14657&page=1

PS:可能有人按照本思想用的蓝牙模块,可能会遇到手机扫描不到蓝牙的情况,下面给大家几个解决办法:

  从原作者网页信息看需要蓝牙4.0的模块才能支持,HC-05才蓝牙2.0
  The current app is setup to work with DFRobot Bluno boards. It should work with any of them (there are a bunch of different ones…). The app connects using the Bluno’s Bluetooth LE GATT profile
  我反编译了一下其中一个Android的apk,从释出的源代码看确实是用BLE协议,而且会抓固定uuid的设备

package com.shatalmic.unityandroidbluetoothlelib;import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothAdapter.LeScanCallback;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Parcelable;
import android.util.Base64;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;public class UnityBluetoothLE
{protected static final UUID CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID = UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");public static final String TAG = "UnityBluetoothLE";public static UnityBluetoothLE _instance;private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){public void onReceive(Context paramContext, Intent paramIntent){BluetoothDevice localBluetoothDevice;Parcelable[] arrayOfParcelable;int i;if ("android.bluetooth.device.action.UUID".equals(paramIntent.getAction())){UnityBluetoothLE.this.androidBluetoothLog("got action_uuid");if (UnityBluetoothLE.this.uuidList != null){localBluetoothDevice = (BluetoothDevice)paramIntent.getParcelableExtra("android.bluetooth.device.extra.DEVICE");arrayOfParcelable = paramIntent.getParcelableArrayExtra("android.bluetooth.device.extra.UUID");if ((localBluetoothDevice == null) || (arrayOfParcelable == null))break label144;i = arrayOfParcelable.length;}}for (int j = 0; ; j++){if (j >= i)return;String str = arrayOfParcelable[j].toString();UnityBluetoothLE.this.androidBluetoothLog("checking uuid " + str);if (!UnityBluetoothLE.this.uuidList.contains(UnityBluetoothLE.this.getFullBluetoothLEUUID(str)))continue;UnityBluetoothLE.this.sendDiscoveredDevice(localBluetoothDevice);}label144: if (localBluetoothDevice != null)UnityBluetoothLE.this.androidBluetoothLog("device: " + localBluetoothDevice.getAddress());while (arrayOfParcelable != null){UnityBluetoothLE.this.androidBluetoothLog("uuid count: " + arrayOfParcelable.length);return;UnityBluetoothLE.this.androidBluetoothLog("device is null");}UnityBluetoothLE.this.androidBluetoothLog("uuidExtra is null");}};private Map<String, BluetoothGatt> deviceGattMap = null;private Map<String, BluetoothDevice> deviceMap = null;private BluetoothAdapter mBluetoothAdapter;private Context mContext = null;private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback(){public void onCharacteristicChanged(BluetoothGatt paramBluetoothGatt, BluetoothGattCharacteristic paramBluetoothGattCharacteristic){byte[] arrayOfByte = paramBluetoothGattCharacteristic.getValue();if (arrayOfByte != null){String str = Base64.encodeToString(arrayOfByte, 0);UnityBluetoothLE.UnitySend("DidUpdateValueForCharacteristic~" + paramBluetoothGattCharacteristic.getUuid() + "~" + str);}}public void onCharacteristicRead(BluetoothGatt paramBluetoothGatt, BluetoothGattCharacteristic paramBluetoothGattCharacteristic, int paramInt){if (paramInt == 0){byte[] arrayOfByte = paramBluetoothGattCharacteristic.getValue();if (arrayOfByte != null){String str = Base64.encodeToString(arrayOfByte, 0);UnityBluetoothLE.UnitySend("DidUpdateValueForCharacteristic~" + paramBluetoothGattCharacteristic.getUuid() + "~" + str);}}}public void onCharacteristicWrite(BluetoothGatt paramBluetoothGatt, BluetoothGattCharacteristic paramBluetoothGattCharacteristic, int paramInt){if (paramInt == 0){UnityBluetoothLE.UnitySend("DidWriteCharacteristic~" + paramBluetoothGattCharacteristic.getUuid());return;}UnityBluetoothLE.UnitySend("Error~Response - failed to write characteristic: " + paramInt);}public void onConnectionStateChange(BluetoothGatt paramBluetoothGatt, int paramInt1, int paramInt2){UnityBluetoothLE.this.androidBluetoothLog("onConnectionStateChange");String str = paramBluetoothGatt.getDevice().getAddress();if (paramInt2 == 2){if (UnityBluetoothLE.this.deviceGattMap == null)UnityBluetoothLE.this.deviceGattMap = new HashMap();UnityBluetoothLE.this.deviceGattMap.put(str, paramBluetoothGatt);UnityBluetoothLE.UnitySend("ConnectedPeripheral~" + str);paramBluetoothGatt.discoverServices();}doreturn;while (paramInt2 != 0);UnityBluetoothLE.UnitySend("DisconnectedPeripheral~" + str);}public void onDescriptorWrite(BluetoothGatt paramBluetoothGatt, BluetoothGattDescriptor paramBluetoothGattDescriptor, int paramInt){if (paramInt == 0){UnityBluetoothLE.this.androidBluetoothLog("onDescriptorWrite Success");if ((paramBluetoothGattDescriptor != null) && (paramBluetoothGattDescriptor.getCharacteristic() != null) && (paramBluetoothGattDescriptor.getCharacteristic().getUuid() != null)){UnityBluetoothLE.UnitySend("DidUpdateNotificationStateForCharacteristic~" + paramBluetoothGattDescriptor.getCharacteristic().getUuid());return;}UnityBluetoothLE.UnitySend("Error~Descriptor Write Failed: characterstic or uuid blank");return;}UnityBluetoothLE.UnitySend("Error~Descriptor Write Failed: " + paramInt);}public void onServicesDiscovered(BluetoothGatt paramBluetoothGatt, int paramInt){if (paramInt == 0){UnityBluetoothLE.this.androidBluetoothLog("Services Discovered");List localList = paramBluetoothGatt.getServices();String str;Iterator localIterator1;if (localList != null){str = paramBluetoothGatt.getDevice().getAddress();localIterator1 = localList.iterator();}while (true){if (!localIterator1.hasNext())return;BluetoothGattService localBluetoothGattService = (BluetoothGattService)localIterator1.next();UnityBluetoothLE.UnitySend("DiscoveredService~" + str + "~" + localBluetoothGattService.getUuid());Iterator localIterator2 = localBluetoothGattService.getCharacteristics().iterator();while (localIterator2.hasNext()){BluetoothGattCharacteristic localBluetoothGattCharacteristic = (BluetoothGattCharacteristic)localIterator2.next();UnityBluetoothLE.UnitySend("DiscoveredCharacteristic~" + str + "~" + localBluetoothGattService.getUuid() + "~" + localBluetoothGattCharacteristic.getUuid());}}}UnityBluetoothLE.this.androidBluetoothLog("Error~Service Discovery " + paramInt);}};private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback(){public void onLeScan(BluetoothDevice paramBluetoothDevice, int paramInt, byte[] paramArrayOfByte){UnityBluetoothLE.this.sendDiscoveredDevice(paramBluetoothDevice);}};public AtomicBoolean mRunning = new AtomicBoolean();private ArrayList<UUID> uuidList = null;public static void UnitySend(String paramString){UnityPlayer.UnitySendMessage("BluetoothLEReceiver", "OnBluetoothMessage", paramString);}public static void UnitySend(byte[] paramArrayOfByte, int paramInt){UnityPlayer.UnitySendMessage("BluetoothLEReceiver", "OnBluetoothData", Base64.encodeToString(Arrays.copyOfRange(paramArrayOfByte, 0, paramInt), 0));}private UUID getFullBluetoothLEUUID(String paramString){if (paramString.length() == 4)return UUID.fromString("0000" + paramString + "-0000-1000-8000-00805F9B34FB");return UUID.fromString(paramString);}public static UnityBluetoothLE getInstance(){if (_instance == null)_instance = new UnityBluetoothLE();return _instance;}private void sendDiscoveredDevice(BluetoothDevice paramBluetoothDevice){String str = "No Name";if (paramBluetoothDevice.getName() != null)str = paramBluetoothDevice.getName();if (this.deviceMap == null)this.deviceMap = new HashMap();this.deviceMap.put(paramBluetoothDevice.getAddress(), paramBluetoothDevice);UnitySend("DiscoveredPeripheral~" + paramBluetoothDevice.getAddress() + "~" + str);}public void androidBluetoothConnectToPeripheral(String paramString){if ((this.mBluetoothAdapter != null) && (this.deviceMap != null) && (this.mContext != null)){BluetoothDevice localBluetoothDevice = (BluetoothDevice)this.deviceMap.get(paramString);if (localBluetoothDevice != null)UnityPlayer.currentActivity.runOnUiThread(new Runnable(localBluetoothDevice){public void run(){this.val$device.connectGatt(UnityBluetoothLE.this.mContext, false, UnityBluetoothLE.this.mGattCallback);}});}}public void androidBluetoothDeInitialize(){Log.d("UnityBluetoothLE", "androidBluetoothDeInitialize");onDestroy();UnitySend("DeInitialized");}public void androidBluetoothDisconnectPeripheral(String paramString){if ((this.mBluetoothAdapter != null) && (this.deviceGattMap != null) && (this.mContext != null)){BluetoothGatt localBluetoothGatt = (BluetoothGatt)this.deviceGattMap.get(paramString);if (localBluetoothGatt != null)localBluetoothGatt.disconnect();}}public void androidBluetoothInitialize(boolean paramBoolean1, boolean paramBoolean2){Log.d("UnityBluetoothLE", "androidBluetoothInitialize");this.mContext = UnityPlayer.currentActivity.getApplicationContext();if (!this.mContext.getPackageManager().hasSystemFeature("android.hardware.bluetooth_le")){UnitySend("Error~Bluetooth Low Energy Not Available");return;}this.uuidList = null;this.deviceMap = null;this.deviceGattMap = null;IntentFilter localIntentFilter = new IntentFilter("android.bluetooth.device.action.FOUND");localIntentFilter.addAction("android.bluetooth.device.action.UUID");localIntentFilter.addAction("android.bluetooth.adapter.action.DISCOVERY_STARTED");localIntentFilter.addAction("android.bluetooth.adapter.action.DISCOVERY_FINISHED");this.mContext.registerReceiver(this.ActionFoundReceiver, localIntentFilter);this.mBluetoothAdapter = ((BluetoothManager)this.mContext.getSystemService("bluetooth")).getAdapter();UnitySend("Initialized");}public void androidBluetoothLog(String paramString){Log.i("UnityBluetoothLE", paramString);}public void androidBluetoothPause(boolean paramBoolean){}public void androidBluetoothRetrieveListOfPeripheralsWithServices(String paramString){String[] arrayOfString;int i;if (this.mBluetoothAdapter != null){this.uuidList = new ArrayList();if (!paramString.contains("|"))break label99;arrayOfString = paramString.split("|");if ((arrayOfString != null) && (arrayOfString.length > 0)){i = 0;if (i < arrayOfString.length)break label77;}}while (true){androidBluetoothLog("getting bonded devices");UnityPlayer.currentActivity.runOnUiThread(new Runnable(){public void run(){Set localSet = UnityBluetoothLE.this.mBluetoothAdapter.getBondedDevices();Iterator localIterator;if ((localSet != null) && (localSet.size() > 0))localIterator = localSet.iterator();while (true){if (!localIterator.hasNext())return;BluetoothDevice localBluetoothDevice = (BluetoothDevice)localIterator.next();if (localBluetoothDevice == null)continue;UnityBluetoothLE.this.androidBluetoothLog("got device " + localBluetoothDevice.getAddress());if (UnityBluetoothLE.this.uuidList.size() > 0){localBluetoothDevice.fetchUuidsWithSdp();continue;}UnityBluetoothLE.this.sendDiscoveredDevice(localBluetoothDevice);}}});return;label77: this.uuidList.add(getFullBluetoothLEUUID(arrayOfString[i]));i++;break;label99: if (paramString.length() <= 0)continue;this.uuidList.add(getFullBluetoothLEUUID(paramString));}}public void androidBluetoothScanForPeripheralsWithServices(String paramString){ArrayList localArrayList;String[] arrayOfString;int i;if (this.mBluetoothAdapter != null){localArrayList = new ArrayList();if (paramString != null){if (!paramString.contains("|"))break label118;arrayOfString = paramString.split("|");if ((arrayOfString != null) && (arrayOfString.length > 0)){i = 0;if (i < arrayOfString.length)break label98;}}}while (true){if (localArrayList.size() <= 0)break label138;UUID[] arrayOfUUID = (UUID[])localArrayList.toArray(new UUID[localArrayList.size()]);this.mBluetoothAdapter.startLeScan(arrayOfUUID, this.mLeScanCallback);return;label98: localArrayList.add(getFullBluetoothLEUUID(arrayOfString[i]));i++;break;label118: if (paramString.length() <= 0)continue;localArrayList.add(getFullBluetoothLEUUID(paramString));}label138: this.mBluetoothAdapter.startLeScan(this.mLeScanCallback);}public void androidBluetoothStopScan(){if (this.mBluetoothAdapter != null)this.mBluetoothAdapter.stopLeScan(this.mLeScanCallback);}public void androidReadCharacteristic(String paramString1, String paramString2, String paramString3){if ((this.mBluetoothAdapter != null) && (this.deviceGattMap != null) && (this.mContext != null)){BluetoothGatt localBluetoothGatt = (BluetoothGatt)this.deviceGattMap.get(paramString1);if (localBluetoothGatt != null){UUID localUUID1 = getUUID(paramString2);if (localUUID1 == null)break label131;BluetoothGattService localBluetoothGattService = localBluetoothGatt.getService(localUUID1);if (localBluetoothGattService == null)break label124;UUID localUUID2 = getUUID(paramString3);if (localUUID2 == null)break label117;BluetoothGattCharacteristic localBluetoothGattCharacteristic = localBluetoothGattService.getCharacteristic(localUUID2);if (localBluetoothGattCharacteristic == null)break label110;if (!localBluetoothGatt.readCharacteristic(localBluetoothGattCharacteristic))UnitySend("Error~Failed to read characteristic");}}return;label110: UnitySend("Error~Characteristic not found for Read");return;label117: UnitySend("Error~Not a Valid Characteristic UUID for Read");return;label124: UnitySend("Error~Service not found for Read");return;label131: UnitySend("Error~Not a Valid Service UUID for Read");}protected void androidSetCharacteristicNotification(String paramString1, String paramString2, String paramString3, boolean paramBoolean){androidBluetoothLog("1");BluetoothGatt localBluetoothGatt;BluetoothGattDescriptor localBluetoothGattDescriptor;if ((this.mBluetoothAdapter != null) && (this.deviceGattMap != null) && (this.mContext != null)){androidBluetoothLog("2");localBluetoothGatt = (BluetoothGatt)this.deviceGattMap.get(paramString1);if (localBluetoothGatt != null){androidBluetoothLog("3");UUID localUUID1 = getUUID(paramString2);if (localUUID1 == null)break label268;androidBluetoothLog("4");BluetoothGattService localBluetoothGattService = localBluetoothGatt.getService(localUUID1);if (localBluetoothGattService == null)break label261;androidBluetoothLog("5");UUID localUUID2 = getUUID(paramString3);if (localUUID2 == null)break label254;androidBluetoothLog("6");BluetoothGattCharacteristic localBluetoothGattCharacteristic = localBluetoothGattService.getCharacteristic(localUUID2);if (localBluetoothGattCharacteristic == null)break label247;androidBluetoothLog("7");if (!localBluetoothGatt.setCharacteristicNotification(localBluetoothGattCharacteristic, true))break label240;androidBluetoothLog("8");localBluetoothGattDescriptor = localBluetoothGattCharacteristic.getDescriptor(CHARACTERISTIC_UPDATE_NOTIFICATION_DESCRIPTOR_UUID);if (localBluetoothGattDescriptor == null)break label233;androidBluetoothLog("9");if (!paramBoolean)break label217;}}label217: for (byte[] arrayOfByte = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE; ; arrayOfByte = BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE){localBluetoothGattDescriptor.setValue(arrayOfByte);if (localBluetoothGatt.writeDescriptor(localBluetoothGattDescriptor))break;UnitySend("Error~Failed to write characteristic descriptor");return;}androidBluetoothLog("10");return;label233: UnitySend("Error~Failed to get notification descriptor");return;label240: UnitySend("Error~Failed to set characteristic notification");return;label247: UnitySend("Error~Characteristic not found for Subscribe");return;label254: UnitySend("Error~Not a Valid Characteristic UUID for Subscribe");return;label261: UnitySend("Error~Service not found for Subscribe");return;label268: UnitySend("Error~Not a Valid Service UUID for Subscribe");}public void androidSubscribeCharacteristic(String paramString1, String paramString2, String paramString3){androidBluetoothLog("subscribe characteristic");androidSetCharacteristicNotification(paramString1, paramString2, paramString3, true);}public void androidUnsubscribeCharacteristic(String paramString1, String paramString2, String paramString3){androidBluetoothLog("unsubscribe characteristic");androidSetCharacteristicNotification(paramString1, paramString2, paramString3, false);}public void androidWriteCharacteristic(String paramString1, String paramString2, String paramString3, byte[] paramArrayOfByte, int paramInt, boolean paramBoolean){BluetoothGatt localBluetoothGatt;BluetoothGattCharacteristic localBluetoothGattCharacteristic;if ((this.mBluetoothAdapter != null) && (this.deviceGattMap != null) && (this.mContext != null)){localBluetoothGatt = (BluetoothGatt)this.deviceGattMap.get(paramString1);if (localBluetoothGatt != null){UUID localUUID1 = getUUID(paramString2);if (localUUID1 == null)break label167;BluetoothGattService localBluetoothGattService = localBluetoothGatt.getService(localUUID1);if (localBluetoothGattService == null)break label160;UUID localUUID2 = getUUID(paramString3);if (localUUID2 == null)break label153;localBluetoothGattCharacteristic = localBluetoothGattService.getCharacteristic(localUUID2);if (localBluetoothGattCharacteristic == null)break label146;androidBluetoothLog("write characteristic");localBluetoothGattCharacteristic.setValue(paramArrayOfByte);if (!paramBoolean)break label140;}}label140: for (int i = 2; ; i = 1){localBluetoothGattCharacteristic.setWriteType(i);if (!localBluetoothGatt.writeCharacteristic(localBluetoothGattCharacteristic))UnitySend("Error~Failed to write characteristic");return;}label146: UnitySend("Error~Characteristic not found for Write");return;label153: UnitySend("Error~Not a Valid Characteristic UUID for Write");return;label160: UnitySend("Error~Service not found for Write");return;label167: UnitySend("Error~Not a Valid Service UUID for Write");}protected UUID getUUID(String paramString){UUID localUUID;if (paramString.length() == 36)localUUID = UUID.fromString(paramString);int i;do{return localUUID;i = paramString.length();localUUID = null;}while (i > 8);StringBuilder localStringBuilder = new StringBuilder();localStringBuilder.append("00000000", 0, 8 - paramString.length());localStringBuilder.append(paramString);localStringBuilder.append("-0000-1000-8000-00805f9b34fb");return UUID.fromString(localStringBuilder.toString());}public void onDestroy(){if (this.mContext != null){this.mContext.unregisterReceiver(this.ActionFoundReceiver);this.uuidList = null;this.deviceMap = null;this.deviceGattMap = null;}}
}

注意:

1.蓝牙模块要配置成slave模式

2.

(1)安卓系统上已连接HC05

(2)PC串口AT 可用

vcc—3v
txo–rx0
rx0-tx0
GND–GND

(3)蓝牙助手app 这样发AT是不对的吧? hc05要设置成AT模式?

蓝牙助手这样发木反应、、

3.CC2540 CC2541 RF-BM-S02

  买一个4.0的蓝牙从模块就可以了,很便宜的

MobBob 3D打印机器人 制作相关推荐

  1. 用html制作3d相册_运动眼镜原型可以用全彩3D打印来制作啦!

    运动眼镜原型可以用全彩3D打印来制作啦! 运动性能眼镜品牌Oakley正在使用惠普的全彩 Multi Jet Fusion 技术生产功能性原型.该公司为体育行业提供高性能眼镜产品已有40多年的历史,并 ...

  2. three.js制作3d模型工具_浙江3D打印模型制作收费标准▁来图定制

    河南万润增材智造有限公司旨在工业三维打印领域改变人类的工作方式和设计理念,为全国各大地区提供3D打印设备及3D打印服务,上海.天津.北京.重庆.海南省.浙江省.江苏省等地都有我们的合作伙伴. 在日新月 ...

  3. 3d打印,机器人,计算机,终于驯服3D打印机器人Leapfrog Creatr HS成为我的好伙伴

    I Finally Tamed the 3D Prinng Robot and Now the Leapfrog Creatr HS Is My Friend A few months ago, I ...

  4. Shellmo:用于娱乐和教育的Aquatic 3D打印机器人

    最近,我遇到了一个非常有趣的开放硬件项目,名为Shellmo . 引起我注意的是,这是一种3D打印的甲壳类动物,似乎并没有在现实世界中使用,尽管有了一点创造力,我就能看到教育意义. Shellmo是一 ...

  5. 波音公司计划利用 3D 打印技术制作模块化卫星

    2019独角兽企业重金招聘Python工程师标准>>> 波音的大型高端卫星,成本都要 1.5 亿美元之高,但据华尔街日报的报道指,他们最新的计划却是希望藉 3D 打印技术和模块化设计 ...

  6. 澳大利亚研究者研制出一种计算机芯片 他们,快讯:几乎看不见的3D打印机器人;西澳大利亚大学的研究人员开发出一种保护生态机器鱼;效率达CPU一万倍的神经形态芯片发布!...

    [佐治亚理工学院研发了一种3D打印的微型机器人,这些微型机器人有朝一日可能会分组工作,以感知环境变化,移动材料,并可能有一天在人体内修复伤害.] 科学家们正在努力完善可以同时进行一项工作的小型机器人, ...

  7. 用3D打印快速制作软生物电子植入物原型,有助于将大脑连接到电脑

    混合打印平台 为了研究,启用和恢复神经肌肉系统的功能,由多个国家的高校研究人员组成的国际研究团队在<nature biomedical engineering>上发表了一项新研究,在该新研 ...

  8. 3d打印,机器人,计算机,3D打印的机器人将教孩子计算机编码!

    原标题:3D打印的机器人将教孩子计算机编码! 随着我们的世界变得日益数字化的,越来越多的编码和计算机编程工作如雨后春笋般冒出,需要越来越多的人在编码语言,成为精通.这种先进的计算机知识将更加为下一代更 ...

  9. 临时牙冠为何选择用3D打印来制作?

    近年来,不少3D打印技术应用于口腔临床医学的案例.其中,临时牙冠就是口腔齿科较为成熟的应用之一. 临时牙冠,也就是我们常说的临时活动假牙,通常会运用在牙齿缺失.缺损,需要做种植牙修复的时候,因为牙冠的 ...

最新文章

  1. PCL中多个可视化窗口
  2. zqgame《每日一言》
  3. html 加载后删除,document.write()应该在我的页面加载后删除所有现有的html?
  4. android绘制高亮区域,实现高亮某行的RecyclerView效果
  5. C-指针02 2017/11/24
  6. navicat er图没有连线_迁徙图?流向图?城市关系强度图?
  7. ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译lv_port_esp32官方Demo(1)
  8. 三菱fx3u通讯手册_使用USR-N510实现局域网内连接FX3U
  9. ios html转json,iOS 中 Model 和 JSON 互相转换
  10. 【机器学习系列】隐马尔科夫模型第三讲:EM算法求解HMM参数
  11. a标签下载文件直接打开的问题
  12. 单片机原理及接口技术第1章
  13. bat计算机清理原理,电脑如何一键清除垃圾bat
  14. Unity Gameplay工具集(Unity Gameplay Tool Set)
  15. Golang 内存逃逸
  16. 去中心化自治组织DAO简要介绍
  17. 最适合新手小白的TikTok干货运营手册
  18. 2022年大数据技能大赛国赛(模块A,B)
  19. 睡眠质量不好怎么改善,几个助眠好物帮助你睡安稳觉
  20. 腾讯云Centos安装python3教程

热门文章

  1. Esxi6.7网络trunk端口设置和vlan端口设置访问
  2. IC | latency和delay区别
  3. ART Mterp Interpreter 解释 bytecode
  4. vue中实现文字间加空格的方法
  5. 私域社交电商一站式解决方案,软件开发+供应链服务支持一件代发
  6. SpringBoot——【thymeleaf】——为什么要使用thymeleaf
  7. 最浅显易懂的数据库索引讲解
  8. HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
  9. Win7中IIS出现“HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
  10. python单词库,标记单词