崇明建设小学网站包头市建设局网站
1.背景
树莓派很好,美中不足的是,不能进行ADC转换,所以要选一个外接的ADC芯片来进行模拟量转换。正好,我要设计的产品里需要用到ADC,所以,我就设计了一个用ads1115进行ADC转换,将结果发送到树莓派的电路和程序,下面是保姆级教程。
2. 为什么用ads1115这个ADC转换芯片?
因为wiringPi库自带了驱动程序,直接拿来用就可以了,很方便,所以,我就选了这颗。
3. 电路图

4. 代码
#include <ads1115.h>
#include <stdio.h>
#include <unistd.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>#define ADC_ADDRESS 0x48
#define PINBASE 120 // choose PINBASE value arbitrarilyint main()
{int ret = TRUE;int analog0;// int analog1;// int analog2;// int analog3;float vbat = 0.0;int ioerr = wiringPiSetupGpio();if (ioerr == -1){printf("wiringPiSetupGpio() error\n");return FALSE;}ret = ads1115Setup(PINBASE, ADC_ADDRESS);if (ret == FALSE){printf("ads1115Setup() error\n");return FALSE;}while(1){analog0 = analogRead(PINBASE+0); // connected to ads1115 AIN0printf("analog0 = %d\n", analog0);vbat = analog0 * 4.096 / 0x7FFF*(169+9.31)/9.31;printf("vbat = %.2f\n", vbat);// analog1 = analogRead(PINBASE+1); // connected to ads1115 AIN1// printf("analog1 = %d\n", analog1);// analog2 = analogRead(PINBASE+2); // connected to ads1115 AIN2// printf("analog2 = %d\n", analog2);// analog3 = analogRead(PINBASE+3); // connected to ads1115 AIN3// printf("analog3 = %d\n", analog3);delay(250); // sample rate 250ms}return 0;}
5. 结果检验

测出来的电池电压很准,比我上次设计的用STM32的ADC采样的电池电压要准得多。
6. 大功告成,亲个嘴儿。
