Я очень рад принять участие в этом «Конкурсе инновационных приложений MCU RISC-V». На этот раз я представил систему управления датчиком воды на основе MCU RISC-V CH32V307. В целом, затопление всегда приводило к затоплению многих мест в городах во время дождя. Некоторые места относительно отдалены, поэтому трудно обнаружить потенциальные опасности, в некоторых домах есть бассейны для хранения воды (резервуары для воды); ). При нехватке Нет немедленного обнаружения и напоминания, когда он полон или полон воды. Поэтому я использовал RISC-V MCU CH32V307 в сочетании с датчиком воды для создания исходного продукта системы управления датчиком воды. Даже если бы я пытался привлечь идеи, я мог бы испытать мощные функции и простоту эксплуатации RISC-V MCU. CH32V307, что также отражает его способность адаптироваться к различным сценариям применения Интернета вещей.
Давайте сначала представим нашего главного героя: мы используем плату разработки CH32V307, которая использует плату разработки на основе ядра RISC-V MCU CH32V307, выпущенную Nanjing Qinheng Microelectronics (WCH).
Основные функции MCU управления:
> Процессор RISC-V4F, системная частота до 144 МГц
> Поддерживает однотактное умножение и аппаратное деление, а также поддерживает аппаратные операции с плавающей запятой (FPU).
> 64KB SRAM,256KB Flash
> Напряжение источника питания: 2,5/3,3 В, блок GPIO имеет независимое питание.
> Несколько режимов низкого энергопотребления: сон, остановка, режим ожидания
> Сброс при включении/выключении, программируемый детектор напряжения
> 2 комплекта 18-канального универсального DMA
> 4 комплекта компараторов операционных усилителей
> 1 генератор случайных чисел TRNG
> 2 комплекта 12-битного преобразования ЦАП
> 2 блока 16-канального преобразования 12-битного АЦП, 16-канальные сенсорные клавиши TouchKey
> 10 комплектов таймеров
> Полноскоростной интерфейс OTG USB2.0
> Высокоскоростной интерфейс хоста/устройства USB2.0 (480 Мбит/с). Встроенный PHY)
> 3 интерфейса USART и 5 интерфейсов UART
> 2 CAN-интерфейса (2.0B активны)
> Интерфейс SDIO, интерфейс FSMC, интерфейс цифрового изображения DVP
> 2 группы интерфейсов IIC, 3 группы интерфейсов SPI, 2 группы интерфейсов IIS
> Контроллер Gigabit Ethernet ETH (встроенный 10M PHY)
> 80 портов ввода-вывода, могут быть сопоставлены с 16 внешними прерываниями
> Блок вычисления CRC, 96-битный уникальный идентификатор чипа
> Последовательный 2-проводной интерфейс отладки
Следующим на сцене находится наш датчик воды. Его функция — определить, есть ли вода. Если сенсорная плата обнаруживает отсутствие воды, она выдает высокий уровень, в противном случае выходной сигнал будет низким. Мы улавливаем этот сигнал через CH32V307, обрабатываем и управляем этим сигналом.
Прежде чем приступить к подключению линий, поговорим о подключениях и логике нашего оборудования. Сначала мы передаем высокий и низкий уровни датчика воды на нашу плату разработки, а затем наша плата разработки управляет индикатором, подключенным к нашему реле, для отображения на основе этого сигнала.
Выше приведена принципиальная схема: когда датчик воды обнаруживает отсутствие воды, он отображает синий индикатор, когда есть вода, он отображает красный свет;
Итак, как мы можем подключиться? Сначала подключите сигнальную линию датчика воды к PD11 на панели управления для приема, а затем подключите реле. Поскольку реле необходимо управлять двумя индикаторами, подключите PD12 и PD14.
Провода подключены, и пришло время кодировать. Мы используем здесь IDE MounRiver Studio, разработанную с использованием TencentOS Tiny. Здесь мы перейдем непосредственно к основному коду.
#define RAIN_PORT GPIOD
#define RAIN_PIN GPIO_Pin_11
#define RAIN_RCC RCC_APB2Periph_GPIOD
#define RAIN_STATE() GPIO_ReadInputDataBit(RAIN_PORT,RAIN_PIN)//Читать статус датчика воды
void rain_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RAIN_RCC,ENABLE);
GPIO_InitStructure.GPIO_Pin=RAIN_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(RAIN_PORT,&GPIO_InitStructure);
}
Вверху — состояние датчика воды, внизу — реле.
void POWER_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
void Open_led(void){
GPIO_ResetBits(GPIOD,GPIO_Pin_12);
GPIO_SetBits(GPIOD,GPIO_Pin_14);
}
void Close_led(void){
GPIO_ResetBits(GPIOD,GPIO_Pin_14);
GPIO_SetBits(GPIOD,GPIO_Pin_12);
}
Тогда просто прочитайте это в первом задании.
if(RAIN_STATE()==1){
printf("===>Сейчас нет воды%d\r\n",RAIN_STATE());
Close_led();
}else{
printf("===>На данный момент есть вода%d\r\n",RAIN_STATE());
Open_led();
}
Что ж, давайте посмотрим видео моего успеха (видео показано на 21:17 секунде).
4. Мысли и понимание
Эта система управления датчиком воды является продуктом первого поколения, то есть продуктом начального уровня. В основном она демонстрирует богатые сценарии применения и простоту разработки платы разработки CH32V307. Отчетность о данных и отображение на мобильном терминале могут быть добавлены в будущем. Это не сложно для CH32V307. Потому что CH32V307 такой мощный. . Наконец, я хотел бы поблагодарить всех зрителей за просмотр от всего сердца. Зеленые горы никогда не меняются, а зеленые воды всегда текут; благодарим вас за поддержку и надеемся, что в следующий раз у вас будет возможность принять участие в таком мероприятии.