目 录
第 1 课 认识机械臂结构…2
第 2 课 舵机的结构和原理…4
第 3 课 总线舵机的介绍…7
第 4 课 总线舵机的调试…8
第 5 课 总线舵机控制器…15
第 6 课 Arduino 拓展板…18
第 7 课 动作调试上位机软件…21
第 8 课 机械臂的组装…30
第 9 课 控制系统的安装…42
第 10 课 蓝牙驱动软件的安装和使用… 45
第 11 课 机械臂动作组及手柄控制指令的配置… 46
第 12 课 机械臂的操作…49
第 13 课 常用指令详解…53
第 14 课 机械臂手动回读编程…56
第 15 课 机械臂手动按钮编程…59
高级篇
第 1 课 认识 Arduino…62
第 2 课 单个舵机的控制…66
第 3 课 多个舵机的控制…68
第 4 课 机械臂手指触摸传感器的应用… 70
第 5 课 机械臂震动传感器的应用… 73
第 6 课 机械臂光敏传感器的应用… 76
第 7 课 机械臂声音传感器的应用… 80
第 8 课 机械臂热敏传感器的应用… 84
第 9 课 机械臂红外传感器的应用… 87
第 10 课 机械臂三轴加速度传感器的应用… 91
第 11 课 Arduino 实现 OLED 液晶显示…95
第 12 课 温湿度传感器的应用… 103
第 13 课 超声波传感器的应用… 109
第 14 课 APDS9960 传感器的应用——颜色… 113
第 15 课 APDS9960 传感器的应用——手势… 117
项目篇
项目 1 机械臂定距夹取实验…122
项目 2 机械臂定位夹取实验…133
项目 3 机械臂手势夹取实验…138
项目 4 机械臂颜色识别夹取实验… 142
机械手臂全套教学:百度云盘密码:加微信Zero903828673
OLED 液晶在显示设备中得以青睐,具有低功耗,显示方便清晰等特色。另外 Arduino 中也有其对应的库文件,所以为开发者提供了一个很好的平台。
工 具:
I2C通信OLED屏 x1
arduino nano x1
中文字取模软件(zimo221.exe) x1
取模软件: 1、打开字模提取软件,输入要显示的汉字,按 Cral+Enter 键确定;
2、点开【点阵生成区】,点击左列取模方式【C51 格式】,即可生成。
实例代码: 实现轻触按钮,OLED 屏幕显示计数功能。
/******************************************************************************
*程序功能:显示汉字和英文及符号
******************************************************************************/
#include //I2C 头文件
#include //OLED 液晶头文件
#include
#define OLED_RESET 4
boolean buttonUp = true;//flag旗标-之前被按下过为true,按钮又弹起来
int count; //计 数
Adafruit_SSD1306 display(OLED_RESET);
void display_println(); //显示函数
/******************************************************************************
中文字符
******************************************************************************/
/*-- 文字: 一 --*/
static const unsigned char PROGMEM str_1[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0x06,0xE7,0x06,0xEE,0xEE,0xEE,
0x6E,0xFC,0x7E,0xFC,0x3C,0xEE,0x1C,0xE7,0x3C,0xE7,0x3E,0xE3,0x77,0xE7,0xE7,0xFE,
0xC0,0xE0,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00
};
/*-- 文字: 二 --*/
static const unsigned char PROGMEM str_2[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x30,0x70,0x70,0x7F,0xFE,0x0E,0xF6,
0xCE,0xDE,0xEE,0xCE,0x7E,0xFE,0x0E,0xC0,0x7E,0xFF,0x7F,0x87,0x7D,0xFF,0xE0,0x07,
0xE0,0x07,0xE0,0x7E,0x00,0x00,0x00,0x00,0x00,0x00
};
/*-- 文字: 三 --*/
static const unsigned char PROGMEM str_3[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0xFF,0xFF,0x01,0x80,
0x01,0x80,0x01,0x80,0x7F,0xFE,0x00,0x00,0x00,0x00,0x3F,0xFC,0x30,0x0C,0x30,0x0C,
0x30,0x0C,0x3F,0xFC,0x30,0x0C,0x00,0x00,0x00,0x00
};
/*-- 文字: 创 --*/
static const unsigned char PROGMEM str_4[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x07,0x1F,0xB7,0x3B,0xF7,
0xE0,0xF7,0xFF,0xB7,0x71,0xB7,0x73,0xB7,0x73,0xB7,0x73,0xB7,0x7F,0x37,0x71,0xC7,
0x71,0xC6,0x3F,0xBE,0x00,0x00,0x00,0x00,0x00,0x00
};
/*-- 文字: 发 --*/
static const unsigned char PROGMEM str_5[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x30,0x77,0x7C,0x67,0x1C,0xFF,0xFF,
0x0E,0x00,0x0E,0x00,0x0F,0xFE,0x1E,0x0C,0x1F,0x1C,0x3B,0xB8,0x39,0xB8,0x70,0xF0,
0xE3,0xF0,0xCF,0x3C,0x3C,0x07,0x00,0x00,0x00,0x00
};
/*-- 文字: 学 --*/
static const unsigned char PROGMEM str_6[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x0C,0x3B,
0x9C,0x19,0xF8,0xFF,0xFF,0xE0,0x07,0xE0,0x07,0x3F,0xF8,
0x00,0xF0,0x01,0xC0,0xFF,0xFF,0x01,0xC0,0x01,0xC0,0x01,
0xC0,0x0F,0x80
};
/*-- 文字: 习
static const unsigned char PROGMEM str_7[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xFC,0x70,0xFF,0xFF,0xFF,0x07,
0xF8,0x00,0xFB,0xFE,0xF8,0x00,0xF8,0x00,0xFF,0xFF,0xFD,0xF8,0xFD,0xF8,0xFD,0xFB,
0xFB,0xBB,0xE7,0x3B,0xEE,0x3F,0x00,0x00,0x00,0x00
}; --*/
/*-- 文字: 计 --*/
static const unsigned char PROGMEM str_7[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x70,0xF0,0x70,0x70,0x70,0x38,0x70,
0x00,0x70,0xFF,0xFF,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x36,0x70,
0x3E,0x70,0x3C,0x70,0x70,0x70,0x00,0x00,0x00,0x00
};
/*-- 文字: --*/
static const unsigned char PROGMEM str_8[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/*-- 文字: 数 --*/
static const unsigned char PROGMEM str_9[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x30,0xFF,0xF0,0x7F,0x70,0x1C,0x7F,
0xFF,0xE6,0x3E,0xE6,0x7F,0xEE,0xDF,0xFE,0x38,0x7E,0xFF,0xBC,0x73,0x3C,0xF7,0x3C,
0x1E,0x7E,0x7F,0xEF,0xE1,0xC3,0x00,0x00,0x00,0x00
};
/******************************************************************************
液晶初始化
******************************************************************************/
void OLED_init(void){
//液晶 128*64 I2C 初始化地址 0X3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay(); //清屏
}
/*****************************************************************************
初始化 setup()函数
*****************************************************************************/
void setup() {
OLED_init(); //液晶初始化
pinMode(7,INPUT);
digitalWrite(7,HIGH);//初始化为HIGH,上拉电阻为“1”
count = 0;
}
/******************************************************************************
主循环 loop()函数
******************************************************************************/
void loop() {
display_println(); //调用屏幕显示字符子函数
if(digitalRead(7) == LOW && buttonUp == true)//按钮按下的一瞬间
//digitalRead(7)!= HIGH && buttonUp ==true
{
count++;
Serial.println(digitalRead(7));
Serial.println(count);
//===========//
display.clearDisplay(); //清屏
display.println(count);//输出字符并换行
//===========//
digitalWrite(13,!digitalRead(13));//测试点亮LED灯
buttonUp = false;
}
else if(digitalRead(7)== HIGH && buttonUp == false)//按钮没有按下
//digitalRead(7)== HIGH && buttonUp !=true
{
//Serial.println(digitalRead(7));
buttonUp = true;
}
delay(100);
}
/******************************************************************************
显示函数
******************************************************************************/
void display_println(){
//中文字符显示 :某某某
//在坐标 X:18 Y:0 的位置显示中文字符杭
//第一个 16 为软件取模的高度//第二个 16 为软件取模的宽度
display.drawBitmap(18, 0, str_1, 16, 16, 1);
display.drawBitmap(34, 0, str_2, 16, 16, 1);
display.drawBitmap(50, 0, str_3, 16, 16, 1);
display.drawBitmap(66, 0, str_4, 16, 16, 1);
display.drawBitmap(82, 0, str_5, 16, 16, 1);
//display.drawBitmap(98, 0, str_6, 16, 16, 1);
display.drawBitmap(0, 24, str_7, 16, 16, 1);
display.drawBitmap(16, 24, str_8, 16, 16, 1);
display.drawBitmap(32, 24, str_9, 16, 16, 1);
//中文字符显示 :液晶显示程序测试
/*//英文字符显示 Length:
display.setTextSize(1); //设置字体大小
display.setTextColor(WHITE); //设置字体颜色白色
display.setCursor(5,48); //设置字体的起始位置
display.println("It's a test for oled");//输出字符并换行
display.display(); //显示所有缓存的
*/
display.setTextSize(5); //设置字体大小
display.setTextColor(WHITE); //设置字体颜色白色
display.setCursor(66,24); //设置字体的起始位置
display.display(); //显示所有缓存的
}