Uprava kodu pro senzor pohybu
Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Uprava kodu pro senzor pohybu
Zdravim vsechny
jsem uplny zacatecnik s Arduinem a programovani take neni moje silna stranka, a proto pisu sem, jestli by mi nekdo nepomohl se zmenou kodu pro snimac pohybu :
HC-SR501
http://arduinobasics.blogspot.cz/2013/1 ... art-2.html
ktery pak ovlada transmitter:
http://arduinobasics.blogspot.cz/2014/0 ... orial.html
tady je kod, upravoval jsem ho podle sebe, ale bohuzel nekde je chyba a ja nevim kde :
Pin Configuration:
- Digital#12 of Arduino to Data Input of TX module
- Digital#2 of Arduino to Motion Detection Alarm
----------------------------------------------------------------------------------*/
#include <VirtualWire.h>
char *controller;
void setup() {
pinMode(13,OUTPUT);
pinMode(2,INPUT);
vw_set_ptt_inverted(true);
vw_set_tx_pin(12);
vw_setup(4000);
}
void loop(){
int motion_1 = 2;
int light_1 = 13;
pinMode (motion_1,INPUT);
pinMode (light_1, OUTPUT);
digitalWrite(light_1,LOW);
delay(1000); //this delay is to let the sensor settle down before taking a reading
int sensor_1 = digitalRead(motion_1);
if (sensor_1 == LOW){
digitalWrite(light_1,HIGH);
delay(500);
digitalWrite(light_1,LOW);
delay(500);
}
if(digitalRead(2) == 1){
//You can add a for loop here to take multiple shots
controller="1" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,1);
delay(10);
}
else{
controller="0";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,0);
}
}
Pro zkusene si myslim, ze to bude jednoduche, vedel by nekdo?
jsem uplny zacatecnik s Arduinem a programovani take neni moje silna stranka, a proto pisu sem, jestli by mi nekdo nepomohl se zmenou kodu pro snimac pohybu :
HC-SR501
http://arduinobasics.blogspot.cz/2013/1 ... art-2.html
ktery pak ovlada transmitter:
http://arduinobasics.blogspot.cz/2014/0 ... orial.html
tady je kod, upravoval jsem ho podle sebe, ale bohuzel nekde je chyba a ja nevim kde :
Pin Configuration:
- Digital#12 of Arduino to Data Input of TX module
- Digital#2 of Arduino to Motion Detection Alarm
----------------------------------------------------------------------------------*/
#include <VirtualWire.h>
char *controller;
void setup() {
pinMode(13,OUTPUT);
pinMode(2,INPUT);
vw_set_ptt_inverted(true);
vw_set_tx_pin(12);
vw_setup(4000);
}
void loop(){
int motion_1 = 2;
int light_1 = 13;
pinMode (motion_1,INPUT);
pinMode (light_1, OUTPUT);
digitalWrite(light_1,LOW);
delay(1000); //this delay is to let the sensor settle down before taking a reading
int sensor_1 = digitalRead(motion_1);
if (sensor_1 == LOW){
digitalWrite(light_1,HIGH);
delay(500);
digitalWrite(light_1,LOW);
delay(500);
}
if(digitalRead(2) == 1){
//You can add a for loop here to take multiple shots
controller="1" ;
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,1);
delay(10);
}
else{
controller="0";
vw_send((uint8_t *)controller, strlen(controller));
vw_wait_tx();
digitalWrite(13,0);
}
}
Pro zkusene si myslim, ze to bude jednoduche, vedel by nekdo?
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Uprava kodu pro senzor pohybu
Otázka je, co ti nejde.
Jinak vw_setup(1200) nastavuje bitrate na 1200. Čím menší, tím lepší, ale pod 1000 už se nevyplatí moc jít. Já používám 1200 a dosah je ideální. Záleží na vzdálenosti...
Další věcí je to, že tohle pásmo, na kterém tyto moduly vysílají je free a nemělo by se moc zarušovat. Takže se počítá s tím, že to bude používané jen na odeslání nějaké informace jednou za dlouhou dobu. Ten kód co jsem poslal tohle nesplňuje, spíše jsem učesal co jsi napsal a když to bude fungovat, tak se to dá vyladit tak, aby to fungovalo dobře a neporušovalo to legislativu. Tenhle kód pošle každých 100ms buď 1 nebo 0.
Jinak vw_setup(1200) nastavuje bitrate na 1200. Čím menší, tím lepší, ale pod 1000 už se nevyplatí moc jít. Já používám 1200 a dosah je ideální. Záleží na vzdálenosti...
Další věcí je to, že tohle pásmo, na kterém tyto moduly vysílají je free a nemělo by se moc zarušovat. Takže se počítá s tím, že to bude používané jen na odeslání nějaké informace jednou za dlouhou dobu. Ten kód co jsem poslal tohle nesplňuje, spíše jsem učesal co jsi napsal a když to bude fungovat, tak se to dá vyladit tak, aby to fungovalo dobře a neporušovalo to legislativu. Tenhle kód pošle každých 100ms buď 1 nebo 0.
Kód: Vybrat vše
#include <VirtualWire.h>
#define PIN_MOTION 2
#define PIN_LIGHT 13
#define PIN_TX 12
char *message;
void setup() {
pinMode(PIN_LIGHT, OUTPUT);
pinMode(PIN_MOTION, INPUT);
digitalWrite(PIN_LIGHT, LOW);
vw_set_ptt_inverted(true);
vw_set_tx_pin(PIN_TX);
vw_setup(1200);
delay(1000);
}
void loop(){
byte input = digitalRead(PIN_MOTION);
if (input == HIGH){
digitalWrite(PIN_LIGHT, HIGH);
message = "1" ;
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx();
}
else{
digitalWrite(PIN_LIGHT, LOW);
message = "0";
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx();
}
delay(100);
}
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
Diky moc za kod
Ted mi ale nejde zkompilovat projekt a hlasi toto : collect2.exe: error: ld returned 5 exit status
Co je spatne?
Ted mi ale nejde zkompilovat projekt a hlasi toto : collect2.exe: error: ld returned 5 exit status
Co je spatne?
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
resp. toto :
collect2.exe: error: ld returned 5 exit status
Užita knihovna VirtualWire v adresáři: d:\ARDUINO\arduino-nightly\libraries\VirtualWire (legacy)
exit status 1
Chyba kompilace.
collect2.exe: error: ld returned 5 exit status
Užita knihovna VirtualWire v adresáři: d:\ARDUINO\arduino-nightly\libraries\VirtualWire (legacy)
exit status 1
Chyba kompilace.
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
Na Win10 mi to ale chodi akorat pise :
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino: In function 'void loop()':
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:29:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
message = "1" ;
^
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:36:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
message = "0";
^
Jinak kdybych to chtel upravit, aby to odesilalo jen pri pohybu - senzor message = "1" je to mozny?
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino: In function 'void loop()':
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:29:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
message = "1" ;
^
C:\Users\fidos\Documents\Arduino\sketch_feb23a\sketch_feb23a.ino:36:13: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
message = "0";
^
Jinak kdybych to chtel upravit, aby to odesilalo jen pri pohybu - senzor message = "1" je to mozny?
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Uprava kodu pro senzor pohybu
Tak tady to je upravené. Funguje to takto. Nastaví se pin 13 (PIN_LIGHT) jako výstup pro kontrolní ledku a pin 2 (PIN_MOTION) jako vstup od čidla pohybu. Na pin 12 (PIN_TX) je připojený TX RF modul data (tedy jen datový pin).
Teď to udělá to, že pokud se na pinu 2 od čidla pohybu objeví logická jednička, tak se rozsvítí kontrolní ledka na pinu 13 a odešle se "1" pomocí RF modulu. Poté se vteřinu čeká a vše se opakuje. Takže dokud bude čidlo pohybu produkovat logickou jedničku, tak se každou vteřinu odešle "1".
Teď to udělá to, že pokud se na pinu 2 od čidla pohybu objeví logická jednička, tak se rozsvítí kontrolní ledka na pinu 13 a odešle se "1" pomocí RF modulu. Poté se vteřinu čeká a vše se opakuje. Takže dokud bude čidlo pohybu produkovat logickou jedničku, tak se každou vteřinu odešle "1".
Kód: Vybrat vše
#include <VirtualWire.h>
#define PIN_MOTION 2
#define PIN_LIGHT 13
#define PIN_TX 12
char *message;
void setup() {
pinMode(PIN_LIGHT, OUTPUT);
pinMode(PIN_MOTION, INPUT);
digitalWrite(PIN_LIGHT, LOW);
vw_set_ptt_inverted(true);
vw_set_tx_pin(PIN_TX);
vw_setup(1200);
delay(1000);
}
void loop(){
byte input = digitalRead(PIN_MOTION);
if (input == HIGH){
digitalWrite(PIN_LIGHT, HIGH);
message = "1" ;
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx();
delay(1000);
}
else{
digitalWrite(PIN_LIGHT, LOW);
}
}
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
Skvely! Zda se, ze funguje, jeste cekam az mi prijde reciever, abych to mohl cely otestovat.
Dikes si borec
Dikes si borec
-
- Příspěvky: 128
- Registrován: čtv led 01, 2015 6:30 pm
Re: Uprava kodu pro senzor pohybu
Kdyžtak dej pak vědět, poladíme i druhou stranu.
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
Ahoj
jsi na prijmu? potreboval bych poradit s recieverem
jsi na prijmu? potreboval bych poradit s recieverem
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
zdravim
tak skoro po roce mam cas, abych dokoncil dalkovou spoust Akorat zkusenosti s arduinem mam porad stejny, a tak bych se chtel zeptat jestli by mi nekdo nepomoh upravit kod pro reciever. Mel by umet prijmout signal z transmiteru a rozsvitit ir ledku, ktera zapne fotak. Viz.:http://www.instructables.com/id/Motion- ... /?ALLSTEPS
kod :
Remote Receiver (RX - Nikon):
#include
#include
Nikon D5000(11); // I Use Nikon (please use the code that works with your DSLR)
void setup() {
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
vw_rx_start();
unsigned int data = 0;
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) {
if(buf[0]=='1') {
digitalWrite(13,1);
D5000.shutterNow();
}
if(buf[0]=='0') {
digitalWrite(13,0);
}
}
}
Zkousel sem tenhle kod (dole) a zda se, ze reciever prijima - pri pohybu na transmiteru sepne snimac a posila na reciever - ledka na desce nebo na vystupu se rozblika a pri vypnuti transmiteru prestane. Akorat mi neni jasny proc, kdyz transmiter nevysila, ledka na recieveru furt sviti.
kod :
#define rfReceivePin A0 //RF Receiver pin = Analog pin 0
#define ledPin 13 //Onboard LED = digital pin 13
unsigned int data = 0; // variable used to store received data
const unsigned int upperThreshold = 70; //upper threshold value
const unsigned int lowerThreshold = 50; //lower threshold value
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
data=analogRead(rfReceivePin); //listen for data on Analog pin 0
if(data>upperThreshold){
digitalWrite(ledPin, LOW); //If a LOW signal is received, turn LED OFF
Serial.println(data);
}
if(data<lowerThreshold){
digitalWrite(ledPin, HIGH); //If a HIGH signal is received, turn LED ON
Serial.println(data);
}
}
tak skoro po roce mam cas, abych dokoncil dalkovou spoust Akorat zkusenosti s arduinem mam porad stejny, a tak bych se chtel zeptat jestli by mi nekdo nepomoh upravit kod pro reciever. Mel by umet prijmout signal z transmiteru a rozsvitit ir ledku, ktera zapne fotak. Viz.:http://www.instructables.com/id/Motion- ... /?ALLSTEPS
kod :
Remote Receiver (RX - Nikon):
#include
#include
Nikon D5000(11); // I Use Nikon (please use the code that works with your DSLR)
void setup() {
vw_set_ptt_inverted(true);
vw_set_rx_pin(12);
vw_setup(4000);
vw_rx_start();
unsigned int data = 0;
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) {
if(buf[0]=='1') {
digitalWrite(13,1);
D5000.shutterNow();
}
if(buf[0]=='0') {
digitalWrite(13,0);
}
}
}
Zkousel sem tenhle kod (dole) a zda se, ze reciever prijima - pri pohybu na transmiteru sepne snimac a posila na reciever - ledka na desce nebo na vystupu se rozblika a pri vypnuti transmiteru prestane. Akorat mi neni jasny proc, kdyz transmiter nevysila, ledka na recieveru furt sviti.
kod :
#define rfReceivePin A0 //RF Receiver pin = Analog pin 0
#define ledPin 13 //Onboard LED = digital pin 13
unsigned int data = 0; // variable used to store received data
const unsigned int upperThreshold = 70; //upper threshold value
const unsigned int lowerThreshold = 50; //lower threshold value
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
data=analogRead(rfReceivePin); //listen for data on Analog pin 0
if(data>upperThreshold){
digitalWrite(ledPin, LOW); //If a LOW signal is received, turn LED OFF
Serial.println(data);
}
if(data<lowerThreshold){
digitalWrite(ledPin, HIGH); //If a HIGH signal is received, turn LED ON
Serial.println(data);
}
}
-
- Příspěvky: 5451
- Registrován: pát úno 13, 2015 2:24 pm
- Lokalita: SO, SK
- Bydliště: SO, SK
Re: Uprava kodu pro senzor pohybu
No lebo tam nie je poriešenie stavu, ak máme data<lowerThreshold
a po ňom je na dátovom analógovom pine niečo medzi 50 a 70.
Čo sa stane vtedy ? No dáta sú mimo intervalu a nemá čo LED na pine13 vypnúť.
a po ňom je na dátovom analógovom pine niečo medzi 50 a 70.
Čo sa stane vtedy ? No dáta sú mimo intervalu a nemá čo LED na pine13 vypnúť.
DC-AC inverter REC Lion DC-AC ESP32 DIY inv. 15 GB za sekundu DIY MPPT Holder
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
Zjedz vsetko, co si kupil, v obchode a netreba ti tasku, auto ci chladnicku.
-
- Příspěvky: 12
- Registrován: pát úno 19, 2016 3:43 pm
Re: Uprava kodu pro senzor pohybu
Kdyz se vratim ke kodu pro ir ledku, proc mi reciever nezapina ir, kdyz transmiter posila? sry sem uplnej zacatecnik
tady jenom aktualizuju kod, ktery je pro me, mam canon a ne nikon :
/*----------------------------------------------------------------------------------
Motion Activated DSLR Shutter Remote
Receiver Sketch (433mHz Serial RX)
Written By: Angelo Casimiro (ASCAS/ TechBuilder)
Date Written: October 18, 2014
Pin Configuration:
- Digital#12 of Arduino to Data Out of RX module
- Digital#11 of Arduino to IR LED
----------------------------------------------------------------------------------*/
#include <multiCameraIrControl.h>
#include <VirtualWire.h>
Canon D5(11);
void setup()
{
vw_set_ptt_inverted(true);vw_set_rx_pin(12);
vw_setup(4000);vw_rx_start();unsigned int data = 0;
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){
if(buf[0]=='1'){
digitalWrite(13,1);
D5.shutterNow();
}
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
tady jenom aktualizuju kod, ktery je pro me, mam canon a ne nikon :
/*----------------------------------------------------------------------------------
Motion Activated DSLR Shutter Remote
Receiver Sketch (433mHz Serial RX)
Written By: Angelo Casimiro (ASCAS/ TechBuilder)
Date Written: October 18, 2014
Pin Configuration:
- Digital#12 of Arduino to Data Out of RX module
- Digital#11 of Arduino to IR LED
----------------------------------------------------------------------------------*/
#include <multiCameraIrControl.h>
#include <VirtualWire.h>
Canon D5(11);
void setup()
{
vw_set_ptt_inverted(true);vw_set_rx_pin(12);
vw_setup(4000);vw_rx_start();unsigned int data = 0;
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)){
if(buf[0]=='1'){
digitalWrite(13,1);
D5.shutterNow();
}
if(buf[0]=='0'){
digitalWrite(13,0);
}
}
}
-
- Podobná témata
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 18 Odpovědi
- 1591 Zobrazení
-
Poslední příspěvek od Soban
-
- 1 Odpovědi
- 874 Zobrazení
-
Poslední příspěvek od Mogul
-
- 5 Odpovědi
- 1506 Zobrazení
-
Poslední příspěvek od 1lubos1
-
- 14 Odpovědi
- 1034 Zobrazení
-
Poslední příspěvek od ElektroEzs
-
- 0 Odpovědi
- 663 Zobrazení
-
Poslední příspěvek od 007ToMMaS