Как подключить ультразвуковой датчик измерения расстояния HC-SR04 к ATmega16 и передать данные через USART/UART на компьютер
Очень часто нам нужно подключить датчик измерения расстояния HC-SR04 к ATmega16, Arduino или другому микроконтроллеру и отображать данные на экран или передать через USART/UART на наш компьютер.
В данной статье мы решим эти проблемы, а именно:
- подключим HC-SR04 к ATmega16;
- подключим радио модуль TB387 к ATmega16 или напрямую, или другой имеющийся радио модуль как HC-11/12 или FS1000A/XD-FST;
- напишем прошивку для ATmega16;
- проверим работоспособность.
Схема подключения модуля TB387 и датчика движения HC-SR04 к ATmega16
Пример программы в Atmel Studio 7
uart.h
#ifndef UART_H_ #define UART_H_ void USARTInit(unsigned int); void USARTTransmitChar(char); void USARTTransmitString(char*); void USARTTransmitStringLn(char*); char USARTReceiveChar(void); #endif /* UART_H_ */
uart.c
#include <avr/io.h> #include "uart.h" void USARTInit(unsigned int ubrr) { // нормальный асинхронный двунаправленный режим работы // UBRR = f / (16 * band) // Установка скорости UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)(ubrr); // RXC - завершение приёма // |TXC - завершение передачи // ||UDRE - отсутствие данных для отправки // |||FE - ошибка кадра // ||||DOR - ошибка переполнение буфера // |||||PE - ошибка чётности // ||||||U2X - Двойная скорость // |||||||MPCM - Многопроцессорный режим // |||||||| // 76543210 UCSRA = 0; // RXCIE - прерывание при приёме данных // |TXCIE - прерывание при завершение передачи // ||UDRIE - прерывание отсутствие данных для отправки // |||RXEN - разрешение приёма // ||||TXEN - разрешение передачи // |||||UCSZ2 - UCSZ0:2 размер кадра данных // ||||||RXB8 - 9 бит принятых данных // |||||||TXB8 - 9 бит переданных данных // |||||||| // 76543210 // разрешен приём и передача данных по UART UCSRB = 1<<RXEN | 1<<TXEN; // URSEL - всегда 1 // |UMSEL - режим: 1-синхронный 0-асинхронный // ||UPM1 - UPM0: 1 чётность // |||UPM0 - UPM0: 1 чётность // ||||USBS - стоп биты: 0-1, 1-2 // |||||UCSZ1 - UCSZ0: 2 размер кадра данных // ||||||UCSZ0 - UCSZ0: 2 размер кадра данных // |||||||UCPOL - в синхронном режиме - тактирование // |||||||| // 76543210 // 8-битовая посылка, 2 стоп бита UCSRC = 1<<URSEL | 1<<USBS | 1<<UCSZ0 | 1<<UCSZ1; } // Отправка байта void USARTTransmitChar(char c) { // Устанавливается, когда регистр свободен while(!( UCSRA & (1<<UDRE))); UDR = c; } // Отправка строки void USARTTransmitString(char str[]) { register char i = 0; while(str[i]) { USARTTransmitChar(str[i++]); } } // Отправка строки void USARTTransmitStringLn(char str[]) { USARTTransmitString(str); USARTTransmitChar((char)13); USARTTransmitChar((char)10); } // Получение байта char USARTReceiveChar(void) { // Устанавливается, когда регистр свободен while(!(UCSRA & (1<<RXC))); return UDR; }
hcsr04.h
#ifndef HCSR04_H_ #define HCSR04_H_ void initHCSR04(); void stopHCSR04(); void trigHCSR04(); void waitHCSR04(); uint32_t getDistance(); #endif /* HCSR04_H_ */
hcsr04.c
// HC-SR04 к ATmega16 #define F_CPU 11059200UL // Clock Speed #define TRIG_DDR DDRD #define TRIG_PORT PORTD #define TRIG_PIN PIND3 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdbool.h> #include "hcsr04.h" uint16_t rising, falling; uint32_t counts; uint32_t dist; bool star = false; // Режим захвата ISR(TIMER1_CAPT_vect) { // ICES1 = 1 // фронт - положительный срез if (TCCR1B & (1<<ICES1)) { // Сохраняем текущее значение счетчика rising = ICR1; // В следующий раз обнаружить спад (отрицательный срез) TCCR1B &= ~(1<<ICES1); // Просто код ошибки, что измерение не произошло dist = -2; } // ICES1 = 0 // спад - отрицательный срез else { // Сохраняем текущее значение счетчика falling = ICR1; // считаем число тактов counts = falling - rising; // определяем растояние в миллиметрах dist = (counts * 100) / 813; // уведомляем функцию waitHCSR04() что можно отправить // результат заказчику т.е. растояние определено star = false; } } // обработчик прерывания по совпадению значения таймера со значением регистра OCR1A // OCR1A = 0xFFFF ISR(TIMER1_COMPA_vect) { // уведомляем функцию waitHCSR04() что можно отправить // результат заказчику т.е. растояние не определено // HC-SR04 не получил обратный сигнал т.е. растояние // слишком большая, сенсор не подключён или сигнал слишком слабый dist = -1; star = false; } // инициализация HCSR04 void initHCSR04() { // инициализация ножки TRIG как выход TRIG_DDR |= 1<<TRIG_PIN; rising = falling = counts = dist = 0; // инициализация таймера 1 TIMER1 // CS12,CS11,CS10: Clock Select. Эти 3 бита задают источник тактового сигнала для счетчика. // 0 1 0 : F_CPU/8 (с выхода делителя) // ICNC1: Установка этого бита в лог. 1 активирует входной подавитель шума // WGM13,WGM12,WGM11,WGM10: // 0 1 0 0 : режим CTC, максимальное значение OCR1A = 0xFFFF TCCR1B |= (1<<ICNC1) | (1<<CS11) | (1<<WGM12); // TICIE1 = 1: разрешено прерывание захвата таймера/счетчика 1 // OCIE1A = 1: разрешено прерывание по совпадению регистра A с состоянием таймера/счетчика1 TIMSK |= (1<<TICIE1) | (1<<OCIE1A); // ICES1 = 1: захват входа ICR1 по нарастающему фронту (положительный срез). TCCR1B |= (1<<ICES1); // максимальное значение счетчика OCR1A = 0xFFFF; // активируем прерывания sei(); } // отключаем режим захвата void stopHCSR04() { TRIG_DDR &= ~(1<<TRIG_PIN); // TIMER1 INIT TCCR1B &= ((1<<ICNC1) | (1<<CS11) | (1<<WGM12)); TIMSK &= ((1<<TICIE1) | (1<<OCIE1A)); TCCR1B &= ((1<<ICES1)); OCR1A = 0; } // Генерируем импульс на 12us void trigHCSR04() { TRIG_PORT ^= (1<<TRIG_PIN); _delay_us(12); TRIG_PORT ^= (1<<TRIG_PIN); } // ждём пока star равно true т.е. завершение измерения void waitHCSR04() { star = true; while(star) { _delay_us(1); } } uint32_t getDistance() { // Инициализируем таймер (HCSR04) initHCSR04(); // Генерируем импульс на 12us trigHCSR04(); // Ждем, пока растояние не определено waitHCSR04(); // Останавливаем таймер stopHCSR04(); // Возвращяем результат return dist; }
main.c
#define F_CPU 11059200UL // Clock Speed #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdio.h> #include "uart.h" #include "hcsr04.h" int main(void) { uint32_t d; char str[20]; USARTInit(MYUBRR); while (1) { d = getDistance(); sprintf(str, "Distance: %dmm", d); USARTTransmitStringLn(str); _delay_ms(1000); } }
Результат
Скачать
Terminal 1.9b — работаем с COM-портом
datasheet ATMEGA16.pdf
Проект в Atmel Studio 7 HC-SR04+UART+ATmega16
продать аккаунт https://birzha-accauntov.ru/
аккаунты с балансом площадка для продажи аккаунтов
магазин аккаунтов социальных сетей https://pokupka-akkauntov-online.ru/
Account Buying Service Ready-Made Accounts for Sale
Account Exchange Service Account Selling Service
Account Trading Platform Account Exchange Service
Accounts for Sale Buy accounts
Buy accounts Purchase Ready-Made Accounts
find accounts for sale account trading platform
account selling platform buyaccountsdiscount.com
sell accounts sell accounts
account market account exchange
guaranteed accounts accounts market
account selling service buy accounts
account trading service buy accounts
sell account verified accounts for sale
account market https://social-accounts.org
account marketplace https://buy-social-accounts.org/
secure account sales account market
website for buying accounts secure account sales
account marketplace profitable account sales
account acquisition profitable account sales
buy accounts account exchange
buy accounts sell accounts
account purchase account purchase
accounts marketplace verified accounts for sale
buy and sell accounts buy accounts
sell accounts https://accounts-marketplace.xyz
account marketplace https://buy-best-accounts.org/
account buying service https://social-accounts-marketplaces.live
gaming account marketplace https://social-accounts-marketplace.xyz
buy pre-made account https://buy-accounts-shop.pro
online account store buy accounts
account catalog https://social-accounts-marketplace.live
find accounts for sale account market
secure account purchasing platform https://accounts-marketplace.online
маркетплейс аккаунтов akkaunty-na-prodazhu.pro
площадка для продажи аккаунтов rynok-akkauntov.top
маркетплейс аккаунтов https://akkaunty-market.live
покупка аккаунтов kupit-akkaunty-market.xyz
маркетплейс аккаунтов https://akkaunty-optom.live
купить аккаунт kupit-akkaunt.online
facebook account sale facebook ads account buy
buy facebook ads manager https://buy-ad-account.top
facebook ads accounts https://buy-ads-account.click
buy fb ad account buying facebook accounts
buy aged facebook ads account buy facebook advertising accounts
buy facebook accounts for ads https://buy-ad-account.click
buy facebook accounts for advertising https://ad-accounts-for-sale.work
buy aged google ads account https://buy-ads-account.top
google ads accounts for sale https://ads-account-for-sale.top
buy verified google ads account https://ads-account-buy.work/
buy google ads threshold account https://buy-ads-invoice-account.top
buy google ads invoice account https://buy-account-ads.work
buy google agency account buy-ads-agency-account.top
buy google adwords accounts https://sell-ads-account.click
buy google ads buy-verified-ads-account.work
buy verified business manager buy-business-manager.org
buy facebook ads accounts and business managers buy-business-manager-acc.org
buy facebook business manager buy business manager account
buy fb bm https://buy-verified-business-manager.org
unlimited bm facebook business-manager-for-sale.org
buy facebook bm account https://verified-business-manager-for-sale.org
buy tiktok ad account https://buy-tiktok-ads-account.org
tiktok ads account buy https://tiktok-ads-account-buy.org
buy tiktok ad account https://tiktok-agency-account-for-sale.org
buy tiktok ads https://buy-tiktok-ads-accounts.org
tiktok ads agency account https://buy-tiktok-business-account.org
tiktok ads account for sale https://buy-tiktok-ads.org
buy tiktok business account https://tiktok-ads-agency-account.org
buy accounts facebook buy and sell accounts gaming account marketplace
where do you inject semaglutide AsthmaFree Pharmacy is semaglutide the same as wegovy
ventolin evohaler: AsthmaFree Pharmacy — buy ventolin pharmacy
RelaxMedsUSA: buy Zanaflex online USA — Zanaflex medication fast delivery
https://asthmafreepharmacy.com/# where can i buy ventolin over the counter
safe online source for Tizanidine: Tizanidine tablets shipped to USA — RelaxMedsUSA
Zanaflex medication fast delivery: RelaxMedsUSA — RelaxMedsUSA
Pinco r?smi sayt: Uduslar? tez c?xar Pinco il? — Canl? krupyerl? oyunlar
Slot gacor Beta138: Withdraw cepat Beta138 — Promo slot gacor hari ini
https://mandiwinindo.site/# Judi online deposit pulsa
Login Beta138: Beta138 — Bonus new member 100% Beta138
Pinco il? real pul qazan: Qeydiyyat bonusu Pinco casino — Etibarl? onlayn kazino Az?rbaycanda
https://swertewin.life/# Swerte99
Jiliko casino: Jiliko bonus — Jiliko slots
Nha cai uy tin Vi?t Nam: Slot game d?i thu?ng — Ca cu?c tr?c tuy?n GK88
Abutogel login: Abutogel login — Link alternatif Abutogel
https://betawinindo.top/# Situs judi resmi berlisensi
Swerte99 login: Swerte99 slots — Swerte99 slots
Swerte99 casino walang deposit bonus para sa Pinoy: Swerte99 bonus — Swerte99 casino
Online gambling platform Jollibet: jollibet — jollibet
Situs togel online terpercaya: Abutogel login — Situs togel online terpercaya
Beta138: Bandar bola resmi — Link alternatif Beta138
Etibarli onlayn kazino Az?rbaycanda: Canli krupyerl? oyunlar — Pinco casino mobil t?tbiq
buy neurontin in mexico: buy viagra from mexican pharmacy — Mexican Pharmacy Hub
best online pharmacy india: Indian Meds One — Indian Meds One
Mexican Pharmacy Hub: generic drugs mexican pharmacy — Mexican Pharmacy Hub
https://indianmedsone.com/# Indian Meds One
buying prescription drugs in mexico: Mexican Pharmacy Hub — mexican border pharmacies shipping to usa
Mexican Pharmacy Hub: Mexican Pharmacy Hub — Mexican Pharmacy Hub
Mexican Pharmacy Hub: order kamagra from mexican pharmacy — buy antibiotics over the counter in mexico
MediDirect USA: MediDirect USA — MediDirect USA
best india pharmacy: reputable indian pharmacies — india pharmacy
https://mexicanpharmacyhub.com/# buying from online mexican pharmacy
Indian Meds One: Indian Meds One — india pharmacy
Indian Meds One: Indian Meds One — Indian Meds One
MediDirect USA: MediDirect USA — MediDirect USA
legit mexican pharmacy for hair loss pills: Mexican Pharmacy Hub — Mexican Pharmacy Hub
http://kamameds.com/# KamaMeds
Tadalify: tadalafil tablets — cialis free trial 2018
https://tadalify.shop/# Tadalify
SildenaPeak: SildenaPeak — SildenaPeak
Tadalify: Tadalify — where to buy liquid cialis
cialis doesnt work for me: Tadalify — cialis dosage for bph
Safe access to generic ED medication: Online sources for Kamagra in the United States — Kamagra oral jelly USA availability
Kamagra oral jelly USA availability: Affordable sildenafil citrate tablets for men — KamaMeds
KamaMeds: Kamagra oral jelly USA availability — Safe access to generic ED medication
cialis 30 day free trial: cialis price south africa — Tadalify
Tadalify: Tadalify — Tadalify
generic cialis: generic tadalafil cost — tadalafil 40 mg india
sildenafil 20mg daily: cost of genuine viagra — canada viagra online
cialis over the counter in spain: buy liquid tadalafil online — where to buy cialis cheap
online us pharmacy viagra: viagra europe pharmacy — over the counter female viagra pill
cialis 10mg reviews: Tadalify — Tadalify
Non-prescription ED tablets discreetly shipped: Fast-acting ED solution with discreet packaging — Kamagra reviews from US customers
generic viagra 50mg canada: SildenaPeak — best online viagra site
generic viagra sildenafil citrate: where can i get viagra online — SildenaPeak
sildenafil 20 mg brand name: buy canadian generic viagra online — sildenafil best price uk
Men’s sexual health solutions online: Affordable sildenafil citrate tablets for men — Fast-acting ED solution with discreet packaging
pictures of cialis pills: cialis tadalafil 20mg kaufen — where to buy cialis in canada
Men’s sexual health solutions online: Compare Kamagra with branded alternatives — Kamagra oral jelly USA availability
SildenaPeak: SildenaPeak — how to get a viagra prescription
Safe access to generic ED medication: Affordable sildenafil citrate tablets for men — Sildenafil oral jelly fast absorption effect
Sildenafil oral jelly fast absorption effect: Fast-acting ED solution with discreet packaging — Fast-acting ED solution with discreet packaging
Kamagra reviews from US customers: Kamagra oral jelly USA availability — Men’s sexual health solutions online
Affordable sildenafil citrate tablets for men: Kamagra oral jelly USA availability — Online sources for Kamagra in the United States
IverGrove: ivermectin for cat ear mites — order ivermectin
TrustedMeds Direct: purchase amoxicillin online without prescription — where can you buy amoxicillin over the counter
CardioMeds Express: lasix side effects — lasix tablet
ivermectin for rabbits: ivermectin plus — IverGrove
http://cardiomedsexpress.com/# lasix pills
lasix 100mg: furosemide 100mg — CardioMeds Express
TrustedMeds Direct: TrustedMeds Direct — TrustedMeds Direct
IverGrove: IverGrove — IverGrove
FertiCare Online where can i get generic clomid without a prescription FertiCare Online
where can i get prednisone: otc prednisone cream — prednisone 20mg online without prescription
IverGrove: ivermectin injection for goats — IverGrove
prednisone 20 mg tablets coupon: SteroidCare Pharmacy — prednisone 20mg tab price
http://steroidcarepharmacy.com/# SteroidCare Pharmacy