之前出于好奇就入手了树莓派小车,某宝入手,费了挺大的劲才拼好的
先说一下这几天的使用感受
首先,这车比想象中的大,也比想象中的还要难拼一点,非常锻炼动手能力。我当初的想法是想要稍微接触一点嵌入式的东西于是就决定用小车上手。
再来说说配置,除了外壳以外,我买的套餐包括4个直流电动机作为轮子的驱动,4个舵机的机械臂(不知道为什么机械臂动不了),一个720p摄像头,一块扩展板,电压表(就是有数字显示的那个小东西)还有一个蓝牙模块(我感觉没什么用就没装)和4000毫安的大电池(可以充电)。
那个扩展板真的很方便,而且板载了TB6612用来控制电机 和 pca9685(16路电机控制板)用来控制机械臂。TB6612网上的资料和例程都挺多的,pca9685就少的可怜了。对了,还有一个无源蜂鸣器,不过刚刚拼好就被我玩坏了,一开始不会用,运行一段程序之后树莓派卡死之后无源蜂鸣器就不能用了,本来还想用来演奏歌曲的。
总的来说的话,对于想要了解嵌入式的人来说的话还是很值得买的。那么话不多说,我就简单说一下我在上面完成的几个试验吧。
PS:我的树莓派是之前就买了的,自己之前也把树莓派的环境配置过了,比如安装中文输入法,安装vim进行一些设置来适应树莓派上的编程,修改apt源等等,这方面东西网上教程很多,所以遇到不会的直接百度就行。
双LED控制试验
扩展板自带了两个LED灯,电路图如下
GPIO就是树莓派上的物理接口,P21 和 P22就是使用wiringPi库的时候用到的编号。
#include <wiringPi.h>
#include <stdio.h>
#define LEDpin1 21 //LED的编号
#define LEDpin2 22 //LED的编号
int main(){
int stat = wiringPiSetup();
if(stat==-1) printf("init failly...\n");
else printf("init successful..\n");
pinMode(LEDpin1, OUTPUT); //设置管脚模式为输出电压
pinMode(LEDpin2, OUTPUT);
char input='1';
while(input!='q'&&input!='Q'){
system("stty -icanon"); //关闭缓冲区,无需回车就能直接接受
input = getchar();
switch(input){
case 'j':
digitalWrite(LEDpin1, 1);
printf("LED1 ON..\n");
break;
case 'k':
digitalWrite(LEDpin2, 1);
printf("LED2 ON..\n");
break;
case 'u':
digitalWrite(LEDpin1, 0);
printf("LED1 OFF..\n");
break;
case 'i':
digitalWrite(LEDpin2, 0);
printf("LED2 OFF..\n");
break;
default: break;
}
}
printf("demo end\n");
return 0;
}
稍微总结一下使用wiringPi库的步骤
首先初始化wiringPi库 wiringPiSetup()
然后设置pin的模式 pinMode()
最后控制针脚送高低电平 digitalWrite()
这些函数wiringPi的用户手册上都有,可以自己去网上查。
无源蜂鸣器演奏音乐
无源蜂鸣器内部没有振动源,需要外部频率刺激才能有动作。这里涉及到pwm的概念,简单的说pwm就是脉冲宽度调制,也就是说可以调整脉冲的占空比,通过调节占空比可以调节信号和能量的编号。我们只需要设置好特定的频率就可以让无源蜂鸣器演奏啦。
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
/*这个文件用来使用无源蜂鸣器来演奏音乐*/
typedef struct _TONE{
int freq; //频率
int t_ms; //持续时间
}TONE, *POINT;
#define voice 0 //蜂鸣器接口
#define ONESEC 1000/2
#define DO 2093 //1
#define RE 2349 //2
#define MI 2637 //3
#define FA 2794 //4
#define SO 3136 //5
#define LA 3520 //6
#define XI 3951 //7
#define DO1 4186 //8
#define RI1 4698 //9
//小星星
TONE star_notation[]={
{DO, ONESEC},
{DO, ONESEC},
{SO, ONESEC},
{SO, ONESEC},
{LA, ONESEC},
{LA, ONESEC},
{SO, ONESEC*2},
{FA, ONESEC},
{FA, ONESEC},
{MI, ONESEC},
{MI, ONESEC},
{RE,