Создание скетча для ардуино из исходника другой среды программирования

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Нашел исходник программы для ультрозвукового датчика присутствия на мк ATTiny13 и модуле HC-SR04.

Помогите реализовать устройство на платформе ардуино. Сам в программировании ноль, поэтому и обращаюсь за помощью.

Исходный текст:

 

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 0 ' default use 32 for the hardware stack
$swstack = 0 ' default use 10 for the SW stack
$framesize = 0

Config Portb.3 = Output 'выход для подключения ноги Trigger
Trigger Alias Portb.3
Trigger = 0

Config Portb.4 = Input 'вход для импульса Echo

Config Portb.0 = Output 'конфигурация для подключения светодиода
Led Alias Portb.0
Led = 0

Config Portb.1 = Output 'output control pin
Control Alias Portb.1
Control = 0

Config Portb.2 = Input 'вход для button

Dim A As Word , A2 As Word 'сюда копируется значение длины сигнала
Dim M As Word , Em As Eram Word
Dim I As Byte , T As Word , Tled As Byte
Const Toff = 750 '250=1min '500 'TIME to OFF
Const Tmax = 50000

Enable Interrupts 'enable global ints
Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Btn 'we jump to this label when one of the pins is changed
Pcmsk = &B00000100 'enable pcint2 (portb.2)

Config Watchdog = 1024 '8192 '2048
M = Em : T = Tmax : Tled = 0 : Control = 0 : Led = 0
Start Watchdog

Do
Reset Watchdog
Gosub Test
A2 = A
Waitms 100
Reset Watchdog
Gosub Test
Waitms 100

If A < M And A2 < M And A > 0 And A2 > 0 Then
T = 0 ': Led = 1
Else
Incr T ' : Led = 0
If T > Tmax Then T = Tmax
End If

If T < Toff Then
Control = 1
Else
Control = 0
End If

If T = 0 Then
If Tled < 9 Then : Led = 1 : Else : Led = 0 : End If ' on
Else
If T < Toff Then
If Tled < 5 Then : Led = 1 : Else : Led = 0 : End If ' last minute
Else
If Tled < 1 Then : Led = 1 : Else : Led = 0 : End If ' off
End If
End If

Incr Tled : If Tled > 10 Then Tled = 0

Loop
End

'------------------------------------------------------------------------------------
Btn:
For I = 1 To 50
Toggle Led : Waitms 200 : Reset Watchdog
Next
Gosub Test
'Gifr = 0
M = A : Shift M , Right , 3 : M = A -m : Em = M : T = Tmax
'Tled = 0 : Control = 0
Set Led ': Waitms 2000 : Reset Led : Waitms 1000
Do : Loop
Return

'-----------------------------------------------------------------------------------
Test:
Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pinb , 4 , 1 'ловим импульс высокого уровня

Return
'-----------------------------------------------------------------------------------

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

это шутка? библиотека ардуиновская с примерами вас не устраивает?

com
Offline
Зарегистрирован: 06.09.2013

так их же читать надо, примеры-то!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да можно не читать. подключил, загрузил программу включил терминал и смотришь как круто. почувствовал себя сразу богом

вот например библиотека с примерами

https://github.com/elrodri/Ultrasonic-HC-SR04

хоть в терминал шли значения, хоть на 1602 дисплей выводи. код уже есть

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Примеры ардуиновские смотрел, в них другой алгоритм работы датчика.

В основном связано с измерением растояния и выодом значения в COM порт.

Алгоритм работы программы ультрозвукового датчика присутствия следующий:

 LED это индикатор режима работы устройства. 
В рабочем режиме должен мигать. Это означает нормальную работу.
Мигание возможно 3-х видов:
заполнение 10% - объект вне зоны, реле выключено
заполнение 90% - объект в зоне, реле включено
заполнение 50% - объект вышел из зоны. Идет отсчет 60 секунд до выключения. 

При нажатии кнопки происходит запоминания обстановки.
Используется при установке. Работает по принципу отложенной съемки в фотоаппарате.
После установки нажать однократно. LED начнет быстро мигать. У вас есть 10 секунд на покидание зоны охраны.

Бонус: можно искусственно ограничивать зону охраны. Например сделать так, чтобы датчик срабатывал, если человек садится в кресло у стола, но не тогда, когда он ходит по комнате. Для этого необходимо в момент “запоминания обстановки” встать на ее границе и тем ограничить зону охраны.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

что вы имеете в виду под заполнением?

 

com
Offline
Зарегистрирован: 06.09.2013

tss пишет:

Примеры ардуиновские смотрел, в них другой алгоритм работы датчика.

а вы не погорячились, взявшись за это дело?

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Собирал это устройство на мк. Травил плату , прошивал мк, пайки и деталей не много. Может собрать даже начинающий.

Работает нормально, включает и выключает свет в помещении. В отличии от датчиков которые при отсутствия движения выключают свет, это определяет присутствие человека без движения. Что не мало важно учитывая поведение человека в некоторой обстановке.(на пример при установке его в клозете не надо переодически махать руками, чтобы свет не выключался.)

com
Offline
Зарегистрирован: 06.09.2013

тогда в чем проблемы? на моргание полно примеров, на определение расстояния - тоже

что конкретно не получается?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

jeka_tm пишет:

что вы имеете в виду под заполнением?

 

может ответите

com
Offline
Зарегистрирован: 06.09.2013

заполнение - величина, обратная скважности

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

не понял при чем здесь ультразвуковой датчик? измерять не только время прохождения звука до препятствия но и уровень обратного сигнала?

com
Offline
Зарегистрирован: 06.09.2013

не причем. просто меняются периоды между вспышками светодиода в зависимости от окружающей обстановки, я так понял

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

jeka_tm пишет:что вы имеете в виду под заполнением?

Под заполнение подразумевается частота вспышек светодиода. Сведодиод это только индикатор работы датчика, испольнительнпе устройсво реле, которое включает свет при нахождении человека в зоне котроля датчика и выключает при выходе . Я не программист и не могу читать код программы, но по работе устройства примерно понимаю так: влкючаем датчик нажимаем кнопку в течении 10 секунд не происходит ни каких действий, после 10 секунд идет посылка сигнала и замер времени его возрата, результат сохраняется в память мк, после этого устройство производит постоянный замер и сравнивание с сохраненым в память. При попадании в зону контроля датчика человека велечина времени меняется , дается кманда на включение реле. (выход мк переводит свое состояние с 0 на 1)

 

 

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Выяснил что исходный текст написан в среде Bascom.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если правильно понял система запоминает текущее расстояние без человека, и если есть изменение определяет в течении какого времени. для руки время будет небольшое и игнорирует. если время соответствует диапазону "тела человека" включается реле. а светодиод просто для индикации. так?

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

 Совершено верно, именно такой принцип работы.

Если получиться написать скетч для дуино было бы замечательно. Я думаю многим бы пригодился. Можно использоать устройство в домашней автоматике.

 

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

 

 jeka_tm:

Если Вас интересует, то можете почитать про это устройство вот здесь:http://bezkz.su/publ/shemy/vyklyuchateli-pereklyuchateliik-f/700211-prostoy-avtomaticheskiy-vyklyuchatel-sveta-na-ultrazvukovom-datchike.htm

Просмотрел на форуме вот эту тему: ATtiny13A 101 применение 

Хочу попробывать прошить ATiny как там написано.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну для начала проверьте датчик примером из библиотеки

#include "Ultrasonic.h"

Ultrasonic ultrasonic(12, 13);

void setup()
{
  Serial.begin(9600); 						// start the serial port
}

void loop()
{
  float dist_cm = ultrasonic.Ranging(CM); 	// get distance
  Serial.println(dist_cm); 					// print the distance
  
  delay(100); 								// arbitary wait time.
}

 

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Проверял несколько ,результаты такие.От 0 до 2.5 метров измеряет расстояние, дальше показывает ошибку. И то если поверхность отражения ровная и без наклона, растояние до человека уверенно измеряет от 0 до1.5м.Заказал на eBay датчик US-020 Ultrasonic Module Distance Measuring Transducer Sensor DC 5V, по даташиту от 0 до 7 метров, буду пробывать с ним.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а до скольки метров вы хотели измерять?

tss
tss аватар
Offline
Зарегистрирован: 24.02.2014

Нашел готовый скетч ультразвукового датчика присутствия на Ардуино. Проверил, работа устраивает.

Так что вопрос , решен. Спаибо за комментарии.