Skip to content

My Project

Show off and share your great projects here! We love pictures!
961 Topics 13.4k Posts
  • 1 Votes
    69 Posts
    6k Views
    SebexS
    @Nca78 said in Particle Powered Air Quality Sensor Logging to Google Docs: @Sebex said in Particle Powered Air Quality Sensor Logging to Google Docs: Perhaps I don't necessarily need to use the same pins Both the sensors you quote are using I2C. So they both use the same 2 pins (SDA, SCL) to communicate. You can put many I2C sensors on those same pins, they each have an address to know which sensor is receiving/sending data to the master (here, your arduino). Look for a tutorial on I2C first. Thanks I get it now :smile:
  • PMS7003 dust sensor battery powered

    3
    0 Votes
    3 Posts
    66 Views
    alexsh1A
    What Chinese are doing with this sensor which is used in a handheld air quality meters like this: https://a.aliexpress.com/_UCY55 is this -> Li-Ion battery 3000-4000mAh This would last hours. Not days. Unless you want to use a car battery, I do not think there is a portable pm25 monitor able to work days without recharging.
  • Candle - signal Hub - A universal 433Mhz signal detector and cloner

    29
    3
    6 Votes
    29 Posts
    5k Views
    alowhumA
    Go for it! I don't see why it wouldn't be possible.
  • RGB LED strip

    70
    2
    9 Votes
    70 Posts
    33k Views
    TRS-80T
    I have been researching controlling LEDs and this seems one of the better threads on MySensors with links to all the relevant related projects (this @maghac OP one for analog RGB, @LastSamurai RGBW alternative, @dmonty for digital, @ikkeT and others' improvements, and finally @Jim-de-Groot latest board; sorry if I left anyone out). Thanks to everyone for sharing your work! So I will ask here a variation of what I I asked @LastSamurai in his thread: Are all of you still using these MySensors based nodes? Because I initially started thinking to use a MySensors based solution because I thought Wi-Fi based ones (although arguably easier, cheaper) like MagicHome controllers would be "too slow" but @LastSamurai seemed to state that he changed from MySensors because it was "too slow" in responding. Or maybe the reasons are not speed / response time related? Maybe you guys didn't like that interface? Or maybe they were not as readily and cheaply available back when this post began (may 2017)? Or maybe people just like to tinker (I get it, some times I do too)? But right now I am thinking about ordering some of those MagicHome devices just to play around with, they are only few dollars each on AliExpress instead of dorking around ordering boards, figuring out correct mosfets to use, implementing software, etc... What am I missing here? I am not trying to be contrary! I honestly want to know! :D
  • Car Presence Modul / Passiv node but delay at bootup

    1
    0 Votes
    1 Posts
    33 Views
    No one has replied
  • 433mhz keyfob remote

    1
    0 Votes
    1 Posts
    75 Views
    No one has replied
  • DHT22 and DHT lib

    8
    0 Votes
    8 Posts
    455 Views
    cneroneC
    Hi, I wrote an updated version that uses the standard dht adafruit library. I posted on github site (https://github.com/cnerone/MySensorsArduinoExamples/commit/922cdaaff772db3a59aef8d784d4ef4e43c9a50a) but its pubblication it's still in progress... I run it for one year and it runs very good with no issues...
  • In-Wall Touch-Sensor Double Switch and more...

    3
    6
    1 Votes
    3 Posts
    392 Views
    R
    @trs-80 touch sensors are those: https://www.aliexpress.com/item/32694092023.html It is sensitive enough to detect touch through the decorative plastic plate yes, I am planning to add it to openhardware, just need to dedicate time for that :)
  • Cant figure out how to implement DS18b20 to 8266gateway directly

    3
    0 Votes
    3 Posts
    121 Views
    T
    Hahah regarding the alcohol i think thats the problem! I will check everything again with your pointers, thanks for the answer I actually had a second look after i posted and made some changes, i got a lot less errors but still wasnt able to compile. I will have a new pass Thanks
  • US decora style wall switch

    40
    3 Votes
    40 Posts
    18k Views
    dbemowskD
    @alex_the_techy I have had an A8 for just over 2 1/2 years now and it has been a relatively good entry level printer. Most of these entry level printers have some quirks about them, but they give you a good start into 3D printing. It does have an acrylic frame which is not quite as sturdy or durable as the aluminum extrusion frame that something like the Ender 3's or the Creality printers have. You can pick up an Ender 3 now for less than $200 US at aliexpress which is right around the same price as an A8. I would go with that over an A8 if I were to buy one these days. Many people that buy the A8 printers end up doing an AM8 frame conversion on them which basically gives you a frame similar to the Ender 3. I am not sure what the cost of the AM8 extrusion parts cost, but whatever the price is, it's too much when you can start out with the Ender 3 for around the same price as buying an A8 and you don't have to go through the hassle of the conversion, which by the way requires some 3D printed parts.
  • Garage Node!

    7
    9
    3 Votes
    7 Posts
    2k Views
    A
    Hey there, I am also in the process of building the same. Getting a lot of help from you. Thanks.
  • DHT11, W5100, OLED display node

    4
    0 Votes
    4 Posts
    421 Views
    bgunnarbB
    Did you try commenting out #define MY_DEBUG ? That might save you a few bytes.
  • CAN bus and nRF

    1
    0 Votes
    1 Posts
    175 Views
    No one has replied
  • flic.io -> homeautomation -> Garage Door node

    11
    4 Votes
    11 Posts
    2k Views
    LiamL
    Looking for any information about these problems. I had a network failure and the garage door opener Chamberlain B970 stopped working. I already found and fixed the problem, but I really lost contact with the remote control. Your solutions are perfect for me. Thank you! P.S. I know it's an old topic, but I wanted to thank everyone involved. I've been looking for the right information for 2 hours and didn't expect to find it here.
  • 2AAA battery NRF24 Sensor PCB with ATmega 328p

    9
    1
    0 Votes
    9 Posts
    893 Views
    NeverDieN
    @garystofer said in 2AAA battery NRF24 Sensor PCB with ATmega 328p: One could measure the VCC an other way not needing a voltage divider by configuring the ADC so that it uses the VCC as the reference and then measure the internal 1.1V reference. Yes this is how I do it, except even more extreme: I measure the battery voltage during the entire tx interval, and pick the lowest voltage (which, it turns out, is always the last measurement). So, I suspect the extreme method can be made more efficient by measuring just after Tx completes.
  • Help! feedback S_COVER status

    9
    0 Votes
    9 Posts
    287 Views
    G
    //#define MY_DEBUG #define MY_GATEWAY_ESP8266 #define MY_NODE_ID 9 #define MY_BAUD_RATE 9600 #define MY_WIFI_SSID "xxxxx" #define MY_WIFI_PASSWORD "xxxxxxxxxxx" #define MY_HOSTNAME "PortInt48" #define SKETCH_NAME "PortInt48" #define SKETCH_VERSION "2.4" #define SKETCH_NAME_PORT "Portão Interno" #define SKETCH_NAME_SENS_PORT_O "Sensor Portão Aberto" #define SKETCH_NAME_SENS_PORT_C "Sensor Portão Fechado" #define SKETCH_NAME_INFO "Estado do Portão" //#define SKETCH_NAME_BOTAO "Botão Portão Ext" #define MY_IP_ADDRESS 10,0,1,48 #define MY_IP_GATEWAY_ADDRESS 10,0,1,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 #define MY_PORT 5003 #define MY_GATEWAY_MAX_CLIENTS 3 //#define MY_INCLUSION_MODE_FEATURE //#define MY_INCLUSION_MODE_DURATION 60 //#define MY_INCLUSION_MODE_BUTTON_PIN 5 // D1 #ifndef UNIT_TEST #include <Arduino.h> #endif #include <ESP8266WiFi.h> #include <SPI.h> #include <ArduinoOTA.h> #include <MySensors.h> #include <NewPing.h> #define CHILD_PORTAO_INT 1 #define CHILD_ID_SENSOR_A 2 #define CHILD_ID_SENSOR_TA 3 #define CHILD_ID_TEXT 4 #define RELE_PIN 13 //d7 #define ECHO_PIN 14 //d5 #define TRIGGER_PIN 12 //d6 #define CLOSED 0 #define OPEN 1 #define CLOSING 2 #define OPENING 3 #define MAX_DISTANCE 160 #define RELE_OFF 1 #define RELE_ON 0 int reverso = 3000; int lastDist = 0; int AverageDist = 0; int cState = 0; int lState = 0; int lLimit = 0; int Distx = 0; int lDistx = 0; int incomingBlindData = 0; int distmin = 13; int distmax = 80; int Level_FECHADO = 2; int Level_ABERTO = 2; int Level_CONTROLE = 23 ; int lastState = 0; int lastposition = 0; int aberto = 0; int abertototal = 0; boolean metric = true; boolean obstruction = false; const char *currentState[] = { "Fechado", "Aberto", "Fechando", "Abrindo" }; static int status = 0; // 0=cover is down, 1=cover is up static bool initial_state_sent = false; unsigned long lastsend = 0; unsigned long lastsendx = 0; enum State {STOP, UP, DOWN,}; static int State = STOP; NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); MyMessage msg_Porcent(CHILD_PORTAO_INT, V_PERCENTAGE); MyMessage msg_S_COVER_U(CHILD_PORTAO_INT, V_UP); MyMessage msg_S_COVER_D(CHILD_PORTAO_INT, V_DOWN); MyMessage msg_S_COVER_S(CHILD_PORTAO_INT, V_STOP); MyMessage msg_Aberto(CHILD_ID_SENSOR_A, V_TRIPPED); MyMessage msg_Aberto_Total(CHILD_ID_SENSOR_TA, V_TRIPPED); MyMessage msg_Text(CHILD_ID_TEXT, V_TEXT); void presentation() { sendSketchInfo(SKETCH_NAME, SKETCH_VERSION); // Send the sketch version information to the gateway and Controller present(CHILD_PORTAO_INT, S_COVER, SKETCH_NAME_PORT); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_SENSOR_A, S_DOOR, SKETCH_NAME_SENS_PORT_O); present(CHILD_ID_SENSOR_TA, S_DOOR, SKETCH_NAME_SENS_PORT_C); present(CHILD_ID_TEXT, S_INFO, SKETCH_NAME_INFO ); metric = getControllerConfig().isMetric; } void setup() { pinMode(RELE_PIN, OUTPUT); digitalWrite(RELE_PIN, RELE_OFF); //-------------------OTA---------------- ArduinoOTA.setHostname(MY_HOSTNAME); ArduinoOTA.onStart([]() { Serial.println("ArduinoOTA start"); }); ArduinoOTA.onEnd([]() { Serial.println("\nArduinoOTA end"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("OTA Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) { Serial.println("Auth Failed"); } else if (error == OTA_BEGIN_ERROR) { Serial.println("Begin Failed"); } else if (error == OTA_CONNECT_ERROR) { Serial.println("Connect Failed"); } else if (error == OTA_RECEIVE_ERROR) { Serial.println("Receive Failed"); } else if (error == OTA_END_ERROR) { Serial.println("End Failed"); } }); ArduinoOTA.begin(); } void loop() { ArduinoOTA.handle(); calcDistx(); getState(); if (initial_state_sent == false) { sendState(); initial_state_sent = true; } if (millis() - lastsendx >= 20000) { sendState(); lastsendx = millis(); } if (lState != cState) { if ( (cState == OPEN) || (cState == CLOSED) ) { if (cState == OPEN) { status = 1; State = UP; aberto = 1; abertototal = 1; } else if (cState == CLOSED) { status = 0; State = DOWN; aberto = 0; abertototal = 0; } } if (cState == CLOSING) { status = 0; State = STOP; aberto = 1; abertototal = 0; } else if (cState == OPENING) { status = 0; State = STOP; aberto = 1; abertototal = 0; } else { //send(msg_Porcent.set(Distx)); } lState = cState; sendState(); } if ( digitalRead( RELE_PIN ) == 1) { relayOff(); } } void relayOff() { digitalWrite(RELE_PIN, RELE_OFF ); } void getState() { if (Distx >= distmax) { cState = OPEN; } else if (Distx <= distmin) { cState = CLOSED; } else if ((Distx < distmax) && (Distx > distmin)) { if (lState == OPEN) { cState = CLOSING; } else { cState = OPENING; } } } void receive(const MyMessage &message) { if (message.isAck()) { return; } incomingBlindData = atoi(message.data); if (message.sensor == CHILD_PORTAO_INT) { calcDistx(); if ((message.type == V_UP ) && (cState == OPENING)) { m_up(); wait(reverso); m_up(); wait(reverso); m_up(); } else if ((message.type == V_UP ) && (cState == CLOSING)) { m_up(); } else if ((message.type == V_UP ) && (cState == CLOSED)) { m_up(); } else if ((message.type == V_UP ) && (cState == OPEN)) { } else if ((message.type == V_DOWN) && (cState == OPEN)) { m_up(); } else if ((message.type == V_DOWN) && (cState == CLOSED)) { } else if ((message.type == V_DOWN) && (cState == CLOSING)) { m_up(); wait(reverso); m_up(); wait(reverso); m_up(); } else if ((message.type == V_DOWN) && (cState == OPENING)) { m_up(); wait(reverso); m_up(); } else if (message.type == V_STOP ) { m_up(); } else if ((incomingBlindData == 100) && (cState != OPEN)) { lastposition = 100; m_up(); } else if ((incomingBlindData == 0) && (cState != CLOSED)) { lastposition = 0; m_up(); } else if ((incomingBlindData > 0) && (incomingBlindData < 100)) { if ((cState == CLOSING) && (incomingBlindData > Distx)) { m_up(); while (Distx >= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } else if ((cState == OPENING) && (incomingBlindData < Distx)) { m_up(); while (Distx <= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } else if ((cState == OPENING) && (incomingBlindData > Distx)) { m_up(); wait(reverso); m_up(); wait(reverso); // m_up(); while (Distx >= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } else if ((cState == CLOSING) && (incomingBlindData < Distx)) { m_up(); wait(reverso); m_up(); wait(reverso); //m_up(); while (Distx <= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } else if ((cState == OPEN) && (incomingBlindData < Distx)) { m_up(); while (Distx >= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } else if ((cState == CLOSED) && (incomingBlindData > Distx)) { m_up(); while (Distx <= incomingBlindData) { calcDistx(); send(msg_Porcent.set(Distx)); } m_up(); } }*/ lastposition = incomingBlindData; sendState(); // Update Vera with status of blinds (up/down) } } void m_up() { digitalWrite(RELE_PIN, RELE_ON); // Change relay state wait(500); digitalWrite(RELE_PIN, RELE_OFF); exit; } void calcDistx() { for (int i = 0; i < 10; ++i) { AverageDist += metric ? sonar.ping_cm() : sonar.ping_in();; wait(10); } AverageDist /= 10; int dist = AverageDist; // Serial.println("Ping: "); Serial.print(dist); // Convert ping time to distance in cm and print result (0 = outside set distance range) // Serial.println(metric ? " cm" : " in"); if (dist != lastDist) { lastDist = dist; int Disty = map(lastDist, distmin, distmax, 0, 100); Distx = constrain(Disty, 0, 100); // Serial.print("Ping CONERTIDO: "); // Serial.print(Distx); // Convert ping time to distance in cm and print result (0 = outside set distance range) // Serial.println(metric ? " cm" : " in"); } } void sendState() { send( msg_Text.set( currentState[cState] ) ); send(msg_S_COVER_U.set(State == UP)); send(msg_S_COVER_D.set(State == DOWN)); send(msg_S_COVER_S.set(State == STOP)); send(msg_Aberto.set(aberto)); send(msg_Aberto_Total.set(abertototal)); send(msg_Porcent.set(Distx)); }
  • Introducing MySensors on nRF24LE1

    myscontroller nrf24le1 soc
    37
    11 Votes
    37 Posts
    29k Views
    Y
    @neverdie Thank you!
  • 1 Votes
    1 Posts
    187 Views
    No one has replied
  • 0 Votes
    1 Posts
    165 Views
    No one has replied
  • HM-TRP Gateway

    10
    1
    0 Votes
    10 Posts
    398 Views
    mfalkviddM
    Great work @chanky Would yo mind sharing the code changes, either through a pull request or here in the forum? Maybe others can benefit from and build on your work.

39

Online

11.7k

Users

11.2k

Topics

113.1k

Posts