Close Menu
magazin Mehatronikamagazin Mehatronika
  • English
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Home automation
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
    • Re:recenzija
  • Edukacija
    • Tutorijali
  • Novosti
  • Lifestyle
    • Ekologija
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
Facebook X (Twitter) Instagram LinkedIn
Trending
  • Nadzor stanja sistema (Condition Based Monitoring) uz pomoć inteligentnih pretvarača
  • Kako instalirati Arduino IDE 2 na Ubuntu i Debian OS-u
  • Kako instalirati Raspberry Pi OS i odabrati SD karticu za Raspberry Pi 5
  • Rešenja napajanja i hlađenja za NVIDIA GB300 NVL72 AI klastere velike gustine
  • PCBWay: Usluga montaže štampanih ploča
  • Megger Grid Analytics
  • JetHome JetHub E1 v.3 recenzija
  • JetHome ES1 recenzija
  • Srpski
    • Srpski
    • English
LinkedIn Facebook X (Twitter) Instagram
magazin Mehatronikamagazin Mehatronika
  • Početna
  • Industrija
  • Recenzije
    • Industrijska oprema
    • SBC računari
    • Razvojni sistemi
    • STEM
    • Home automation
    • Mrežna oprema
    • Displeji
    • Dodaci
    • Alati
    • Muzička oprema
    • Pametni uređaji
    • Re:recenzija
  • Edukacija
    • Tutorijali
  • Novosti
  • Lifestyle
    • Ekologija
    • Događaji
    • Intervjui
  • Stručni tekstovi
  • Forum
magazin Mehatronikamagazin Mehatronika
Home»Recenzije»NUCLEO-C031C6: STM32C0316 razvojni sistem
Recenzije

NUCLEO-C031C6: STM32C0316 razvojni sistem

Aleksandar DakićBy Aleksandar Dakić20/05/2023Updated:02/03/20255 Mins Read

STM NUCLEO-C031C6: STM32C0316

71%
71%
Veoma dobro

Iskoristili smo trenutak i istražili najnoviji NUCLEO-STM32C0316 razvojni sistem. Izveden na srednjem formatu veličine NUCLEO-STM razvojnih ploča, daće obilje portova za povezivanje. Tu je sve što nam je bilo potrebno za izradu osnovne ideje IoT sistema za merenje vlage zemljišta koji se može koristiti u preciznoj poljoprivredi.

Pros
  1. M0+ jezgro na 48MHz
  2. 32 bita po ceni 8-16 bitnih sistema
  3. Power menadžent
  4. ST-LINK/V2-1 in-circuit dibager i programator
Cons
  1. Nema pripadajućeg USB kabla data kabla

Cortex-M0+ je ušao u modu. Iako je inžinjersko rešenje staro preko decenije, doživljava svoj procvat u polju mikrokontrolera. Možda danas najpoznatiji mikrokontroler baziran na M0+ je RP2040 koga je Raspberry Pi dizajn tim načinio od dva M0+ jezgra, dodajući na njih interesantnu PIO state mašinu. Na kraju, dobili smo rešenje koje je sa pravom doživelo pravi procvat na tržištu, gde sa cenom od oko 1 dolara po MCU omogućava izradu razvojnih pločica u cenovnom opsegu od 3 do 10 dolara. Cenovno gde je i NUCLEO-C031C6.

Sa druge strane, veliki igrači – STM i TI – su se držali jednog jezgra (time obezbeđujući jedan I2C, IS2, dva UART, tajmere, DMA, power kontrolu i sve to mikrokontrolerom koji radi na do 48MHz . Idealno rešenje za low-cost IoT razvoj.

NUCLEO-C031C6

Kada STM to začini Arduino i Morpho konektorima, ulazi se u svet koji je bio, najviše zbog cene, ograničen na 8- i 16-bit mikrokontrolere. Sada više nema razloga da nove IoT aplikacije ne budu 32-bitne.

Box & NUCLEO-C031C6

Iskoristili smo trenutak i istražili najnoviji NUCLEO-C031C6 razvojni sistem. Izveden na srednjem formatu veličine NUCLEO-STM razvojnih ploča, daje obilje portova za povezivanje. Standardno odlično označena NUCLEO-C031C6 ploča, sa dobrom podrškom u literaturi omogućava brzo ulaženje u STM32C0 svet.

Kao ideja za prvi projekat kojim bi predstavili ovaj M0+ mikrokontroler, u par koraka napravili smo trenutno popularan „green“ projekat precizne poljoprivrede : merač vlažnosti zemljišta.

Bez želje da duboko ulazimo u tematiku, neke osnove su potrebne za razumevanje samog sistema. Senzor koji smo koristili je generični kapacitivni senzor V2.0 koji proizvode mnogi proizvođači, ali ga DFRobot obično brendira. Kapacitivni senzor procenu vlažnosti zemljišta zasniva na činjenici da vazduh ima dielektričnu konstantu 0, suve materije u zemlji je imaju u intervalu od 0 do 5, dok je dielektrična konstanta vode 80. Da bi se izvršila inicijalna kalibracija senzora, potrebno je očitati izmerenu vrednost senzora u vazduhu i vrednost senzora uronjenog u vodu. Vlažnost vazduha ćemo proglasiti za 0%, dok ćemo vodu tretirati kao 100% vlažnu. Ono što očekujemo je da je vlažnost zemljišta negde u ovim granicama.

I tu počinju realne muke koje prevazilaze ideju ovog uvodnog teksta. Zapreminski udeo čvrste materije u zemljištu varira, orijentaciono možemo tvrditi da je oko 50%. Ovo može i ne mora biti. Zemljište puno gline može imati ovaj udeo mnogo veći, dok dobro aerisani supstrati na bazi treseta uz dodatak zeolita, koje obično imamo u saksijama mogu imati daleko manji zapreminski udeo čvrste materije. Ovde pada na pamet jedna dobra ideja da se inicijalna kalibracija ne treba vršiti između vazduha i vode, već u između dehidriranog i potpuno vodom zasićenog supstrata.

STM32C0316 u radu

Znajući da je zapreminski udeo mešavine vode i vazduha drugih 50%, i da vazduh i suvo tlo imaju dielektričnu konstantnu do 5, jasno je da voda istiskajući vazduh iz zapremine povećava rezultujuću dielektričnu konstantu „sistema“, i time menja kapacitivnost. Merenjem te promene dolazimo do vlažnosti supstrata.

Nakon normalizacije očitanih vrednosti i standardnog postupka normiranja rezultata, koji smo mi izveli na uzorku od deset očitavanja, izrazili smo vlažnost tla u procentualnom opsegu od 1 do 100. Par dana rada pokazalo je da sistem funckcioniše, da se vlažnost vremenom smanjuje i da bi u nekom trenutku moglo da se signalizira potreba za zalivanjem saksije.

Ovaj projekat je samo poziv na razmišljanje o upotrebi low-cost IoT sistema, kao što je i ovaj NUCLEO-C031C6, u preciznoj poljoprivredi – u kontekstu izgradnje IoT sistema za kontinuirano praćenje vlažnosti tla prilikom uzgoja biljaka.

#include "main.h"
#include "TM1637.h"

ADC_HandleTypeDef hadc1;

const uint32_t numReadings = 10;

uint32_t readings[10];
uint32_t readIndex = 0;

uint32_t level = 0;
uint32_t total = 0;
uint32_t average = 0;
uint32_t firstreadings = 0;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);

int main(void)
{
 HAL_Init();
 SystemClock_Config();

 MX_GPIO_Init();
 MX_ADC1_Init();
 HAL_ADC_Start(&hadc1);
 TM1637_SetBrightness(7);

  for (uint32_t thisReading = 0; thisReading < numReadings; thisReading++) {
      readings[thisReading] = 0;}

  while (1)
  {

    if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK ){
     level = HAL_ADC_GetValue(&hadc1);
    }

     total = total - readings[readIndex];
     readings[readIndex] = level;
     total = total + readings[readIndex];
     readIndex = readIndex + 1;

     if (readIndex >= numReadings) {
         readIndex = 0;
       }
     average = total / numReadings;
     TM1637_DisplayDecimal((2600-average)*6.7, 1);
  }
  
}


void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

 
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  {
    Error_Handler();
  }
}

static void MX_ADC1_Init(void)
{
  ADC_ChannelConfTypeDef sConfig = {0};

  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.LowPowerAutoPowerOff = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.NbrOfConversion = 1;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = DISABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_1CYCLE_5;
  hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_1CYCLE_5;
  hadc1.Init.OversamplingMode = DISABLE;
  hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  sConfig.Channel = ADC_CHANNEL_4;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
}


static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOF_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_RESET);

  HAL_GPIO_WritePin(GPIOB, DATA_Pin|CLK_Pin, GPIO_PIN_RESET);

  GPIO_InitStruct.Pin = User_Button_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(User_Button_GPIO_Port, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = Led_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(Led_GPIO_Port, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = DATA_Pin|CLK_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF0_USART1;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF6_I2C1;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);

}


void Error_Handler(void)
{
  __disable_irq();
  while (1)
  {
  }
}

#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
 
}
#endif

STM32C031 : osnovni projekat senzora vlažnosti zemljišta sa prikazom na LED displej
https://github.com/magazinMehatronika/stm32c031-soil-hummidity-sensor
0 forks.
0 stars.
0 open issues.

Recent commits:
  • Update main.c, GitHub
  • Add files via upload, GitHub
  • Update README.md, GitHub
  • Add files via upload, GitHub
  • Create README.md, GitHub

Više informacija: https://www.st.com/en/evaluation-tools/nucleo-c031c6.html

STMicroelectronics
Previous ArticleFANUC će pokazati raznolikost mogućnosti robota u Automatici
Next Article Easy Harmony ET6
Aleksandar Dakić

Aleksandar je osnivač magazina Mehatronika. Sa pozadinom u električnom inženjeringu i dugom istorijom rada u stručnim časopisima, on se fokusira na ključnom sadržaju magazina Mehatronika i stoji iza brojnih inicijativa.

Related posts

JetHome JetHub E1 v.3 recenzija

8.5 22/09/2025

JetHome ES1 recenzija

7.1 17/09/2025

Seeed Studio SenseCAP Watcher recenzija

8.1 17/09/2025

6×10 RGB Matrix for XIAO recenzija

7.8 05/09/2025

Wio Terminal Chassis Battery 650 mAh recenzija

7.6 03/09/2025

ELECFREAKS micro:bit Nezha Pro Sports Kit recenzija

8.2 30/08/2025
Kompanije
ABB akYtec Armsom Automatika Banana Pi Beogradski Sajam Bosch Rexroth CADCAM Data CHIRON Croatia CircuitMess Danfoss DFRobot Digilent Dossis Eaton Elcom Media Elecfreaks Elecrow Electronic Design Elektromont ELESA+GANTER EMP EMT elektro ENEL Valjevo EP-Solutions ePlan Eurocom EXOR ETI Fanuc Faulhaber Festo Fox Electronics Gamax Gomo Design Hennlich Hidraulika HMS ICM Electronics INEA SR INNOMOTICS IvDam Process Control LattePanda Libre Computer Lilygo magazinMehatronika malina314 Mean Well / ASIKO Melco-Buda Metronik Microsoft Mikro Kontrol Milk-V Mitsubishi Electric Momentum National Instruments Neminik Neofyton NVIDIA OM SISTEM Orange Pi PCBWay Pickering Radxa Raspberry Pi Recom Renishaw Rittal Sajam voda Samsung Schneider Electric Schunk Seeed Studio Siemens SM Automation Sobel Soldered staubli STMicroelectronics SunFounder Tectra / Megger teenage engineering Tehnogama TeLa elektrik TI LaunchPad Tipteh TRC pro Trim Triton Engineering UMBRAmatik Unicom Uno-Lux Processing Uno Lux NS URAM System Vesimpex VETS Wago Weidmuller Wurth Elektronik Yaskawa Yokogawa
Distribuciju štampanih izdanja srednjim školama omogućile kompanije
Facebook X (Twitter) Instagram LinkedIn
  • Uređivačka politika
  • Kontakt
  • Media kit
  • Slanje jedinica za recenziju
  • Pretplata
  • Elektronska izdanja

magazin Mehatronika - Agencija “Gomo Design”
Stanoja Glavaša 37, 26300 Vršac, Serbia
+381 60 0171 273

© 2025 magazin Mehatronika by Gomo Design.

Type above and press Enter to search. Press Esc to cancel.

Logo magazin Mehatronika
Manage Consent
Da bismo omogućili najbolje korisničko iskustvo, koristimo tehnologije kao što su kolačići da bismo obradili informacije o uređaju sa kojeg pristupate sajtu, kao i informacije o posećivanju naših stranica. Prihvatanje naše upotrebe ovih tehnologija znači da nam dozvoljavate da obradimo ove podatke. Odbijanje ili kasnije opozivanje pristanka može dovesti do prestanka rada određenih funkcija sajta.
Funkcionalni kolačići Stalno aktivni
Skladištenje ili pristup ovim podacima je neophodan za omogućavanje osnovnog korisničkog iskustva u pružanju usluge ili priustupu sadržaju kojeg je korisnik izričito tražio, odnosno za svrhu komunikacije preko elektronske mreže.
Podešavanja
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistički kolačići
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing kolačići
Ovi podaci se koriste u kreaciji korisničkih profila na koje se šalje marketinški materijal, ili koji se koriste za praćenje interakcija korisnika sa sajtom, ili sa nekoliko sajtova za marketinške svrhe.
Upravljajte opcijama Upravljajte uslugama Upravljajte {vendor_count} dobavljačima Pročitajte više o ovim svrhama
Pogledaj podešavanja
{title} {title} {title}