你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的ST研究

[复制链接]
点点&木木 发布时间:2019-3-19 16:26
本帖最后由 点点&木木 于 2019-4-12 12:15 编辑

介绍
我们是PolytechSorbonne的3名工程专业的学生,​​专门从事电子和计算机科学。我们的项目是帮助其他学生的工作。我们必须收集很多不同的DATA,如地面和空气的温度,湿度......
问题:我们的项目需要低消耗,抗水和耐用,因为它意味着在山上野外
微控制器恢复传感器的数据,并在屏幕上实时显示信息。它还通过SigFox天线将这些数据发送到名为Ubidots的在线服务器。
该系统完全自主:它由太阳能电池板充电的电池供电,每小时唤醒一次以收集和发送数据。

1.jpg



   硬件组件
STM32 Nucleo L432KC
×     1      
DHT22温度传感器              ×  1      
Adafruit防水DS18B20数字温度传感器        ×  1      
DFRobot SEN0193      ×   1      
Adafruit BMP183      ×     1      
MPU9250       ×       1      





1)代码
为了开发我们的项目,我们使用了Mbed。这是一个在线编程软件。它的特殊之处在于它是一个协作平台,你可以找到很多由传感器支持的库。它易于使用。

2.jpg

为了消耗尽可能少的能量,我们在卡上使用了睡眠模式,这使得我们的盒子在等待时几乎没有任何消耗。我们决定每小时唤醒一次,以便在再次入睡之前收集并发送数据。
此外,允许盒子通过一个小开关使用它的液晶显示器,只有当人们在周围时,在野外时他们可以让盒子关闭它。


2)在线服务器
我们使用Sigfox技术,发送数据,然后通过回调,所有内容都以Json格式发送给ubidot Text。这项技术很有意思,因为它具有非常好的覆盖范围,完全符合我们的项目问题,例如从阿尔卑斯山发送数据。


3.jpg

所有数据都可以显示在仪表板上。然后可以在CSV文件中下载所有内容。为了使我们的数据更精确一点,每个变量在发送时被100倍除以ubidot 100,并获得浮动数据
4.jpg


3)卡
我们选择ALTIUM DESIGNER来制作我们的PCB。在这张卡上,我们放置了微控制器和所有传感器。


原理图

5.PNG



代码

// PROGRAMME PRINCIPALE

#include "mbed.h"
#include "DHT.h"
#include "ssd1306.h"
#include "standard_font.h"
#include "bold_font.h"
#include "DS1820.h"
#include "BMP183.h"
//#include "MPU9250.h"

#define TIMERR 2
#define DEBUG 0
#define SLEEPTIME 3600

Serial sig(D1,D0);
Serial sig2(USBTX,USBRX);

DigitalOut ChipSelectBaro(A3);
//SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK)
SPI spi(D11, D12, D13);

AnalogIn moisture(A0);

DHT C1(A2,AM2302);

DigitalOut myled(LED1);

SSD1306 oled(D3 /* cs */, D6/* reset */, A5 /* dc */,
            A4 /* clock */, D2 /* data */);

DS1820 probe(A1);

int Dht22(void);
int Ds1820(void);
int Sen0193(void);
int Baro(BMP183 baro);
int InitBaro(BMP183 baro);

float temp,hum,tempS;
float pres,alt;
float humS;

int varReveil;
void callbackReveil (void){
   varReveil = 0;
}
Ticker flipper;


int main()
{
    int test =0;
     
   // BMP183 baro(SPI_MOSI, SPI_MISO, SPI_SCK, D2);
   BMP183 baro(D11, D12, D13, A3);
   oled.initialise();
   oled.clear();
   oled.set_contrast(255); // max contrast

   oled.set_font(bold_font, 8);
   oled.printf("Petit Callou\r\n Des Alpes\r\n");

   oled.set_font(standard_font, 6);
  // oled.printf("\r\n Test program\n");
    //oled.printf("******************\r\n");
   wait(1); // wait 1 second for device stable status

   oled.update();

   test = InitBaro(baro);
   baro.getCalibrationData();

int i=0;
while(1){
     
     Dht22();
     Ds1820();
     Sen0193();
     if(test == 1);
           Baro(baro);
     
     
       oled.printf("\r\n****Petit Caillou****\r\n");
       oled.printf("Temp Air: %2.2fC \r\nSol: %2.2fC\r\n",temp,tempS);
       oled.printf("Hum Air: %2.2f/100 \r\nSol: %2.2f/100\r\n",hum,humS/10);
       oled.printf("Pres %2.2fPa \r\nAlt: %2.2fm\r\n", pres, alt);
       oled.update();
     
     
     temp = temp*100;
     hum = hum *100;
     tempS = tempS*100;
     humS = humS/10;


     sig.printf("AT$SF=");
     sig.printf("%04x%04x%04x%04x%04x%04x",(int)temp,(int)hum,(int)tempS,(int)pres,(int)alt,(int)humS);
     sig.printf("\r\n");
     sig2.printf("AT$SF=");
     sig2.printf("%04x%04x%04x%04x%04x%04x",(int)temp,(int)hum,(int)tempS,(int)pres,(int)alt,(int)humS);
     sig2.printf("\r\n");
      if(DEBUG == 1)
    {
     oled.printf("Msg Envoye\n\r");
     }

    i++;
     
    varReveil = 1;
    flipper.attach(&callbackReveil, SLEEPTIME);
     while(varReveil==1){
       sleep();
       }
   flipper.detach();   
    // wait(6);
}
   
}

int InitBaro(BMP183 baro){
   int status;
   int go = -1;
   status = baro.getID();
   
    if(status != 0x55) {
       go = -1;
       oled.printf("Communication to Barofailed...\n");
    }else {
       oled.printf("Baro OK!\n\r");
       go = 1;
    }
    return go;
}

int Baro(BMP183 baro){
   baro.read();
   
   pres = baro.Pressure;
   alt = baro.Altitude;
    if(DEBUG == 1)
    {
       oled.printf("\r\n*****BMP183****\r\n");
       oled.printf("Temp.: %f\r\n", baro.Temperature);
       oled.printf("Pres.: %f\r\n", pres);
       oled.printf("Alt.: %f\r\n", alt);
       oled.printf("***************\r\n");
       oled.update();
    }
    return 0;
}

int Ds1820(void){
   probe.convertTemperature(true, DS1820::all_devices);         //Start temperature conversion, wait until ready
   tempS = probe.temperature();
    if(DEBUG == 1)
    {
   oled.printf("\r\n*****Ds1820****\r\n");
   oled.printf("It is %3.1foC\r\n", tempS);
   oled.printf("***************\r\n");
   oled.update();
    }
   // wait(TIMERR);
    return 0;
}

int Dht22(void){
   
   // float temp,hum;
   C1.readData();
   hum = C1.ReadHumidity();
   temp = C1.ReadTemperature(CELCIUS);
     if(DEBUG == 1)
    {
   oled.printf("\r\n******DHT22******\r\n");
   oled.printf("temp =  %6.2f C\r\n", temp);
   oled.printf("hum =  %6.2f%\r\n", hum);
   oled.printf("*****************\r\n");
   oled.update();
    }
   // wait(TIMERR);
    return 0;
}


int Sen0193(void){
   
   float value = 0.0f,valuefin=0.0f;
   int valueint=0;
   value = moisture;
   valueint = moisture *100;
   valuefin = (78-valueint )* 100  / 40;
   humS=valuefin;
     if(DEBUG == 1)
    {
   oled.printf("\r\n*****SEN0193****\r\n");
   oled.printf("hum du sol : %2.2f // :%2.2f/100\n", value,valuefin);
   oled.printf("\r\n*****************\r\n");
   oled.update();
    }
   // wait(TIMERR);
    return 0;
}

收藏 评论2 发布时间:2019-3-19 16:26

举报

2个回答
飞翔-396652 回答时间:2019-3-19 19:09:44
好东西 值得欣赏 谢谢
Kevin201707 回答时间:2019-3-20 09:49:54
路过

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版