Initial commmit
This commit is contained in:
@@ -1,2 +1,5 @@
|
|||||||
# rocket_motor_thrust_meter
|
# Rocket Motor Thrust Meter
|
||||||
|
|
||||||
|
Thrust meter for meassuring thrust of custom rocket motors
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Use following command to receive the data
|
||||||
|
|
||||||
|
socat -u UDP-RECVFROM:9998,fork -
|
||||||
|
|
||||||
|
Format of the data is a CSV deliminated by ;
|
||||||
|
|
||||||
|
counter, voltage, wifi strength
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <WiFiUdp.h>
|
||||||
|
|
||||||
|
// ---------------- USER CONFIG ----------------
|
||||||
|
const char* WIFI_SSID = "control-tower-24";
|
||||||
|
const char* WIFI_PASSWORD = "expaexpa";
|
||||||
|
|
||||||
|
// Destination for UDP packets
|
||||||
|
const char* UDP_TARGET_IP = "192.168.1.255"; // <-- change to your receiver's IP
|
||||||
|
const uint16_t UDP_TARGET_PORT = 9998;
|
||||||
|
|
||||||
|
// How often to read + send (ms)
|
||||||
|
const unsigned long SEND_INTERVAL_MS = 100;
|
||||||
|
|
||||||
|
// Arduino AD 24-bit převodník s 2 kanály
|
||||||
|
|
||||||
|
// piny pro připojení SCK a DT z modulu
|
||||||
|
int pSCK = 7;
|
||||||
|
int pDT = 4;
|
||||||
|
|
||||||
|
WiFiUDP udp;
|
||||||
|
|
||||||
|
// definování různých nastavení kanálů a jejich zesílení
|
||||||
|
#define kanal_A_zesil_128 1
|
||||||
|
#define kanal_B_zesil_32 2
|
||||||
|
#define kanal_A_zesil_64 3
|
||||||
|
|
||||||
|
unsigned long lastSendTime = 0;
|
||||||
|
|
||||||
|
void connectWiFi() {
|
||||||
|
Serial.print("Connecting to WiFi");
|
||||||
|
WiFi.setTxPower(WIFI_POWER_19_5dBm);
|
||||||
|
WiFi.setSleep(false);
|
||||||
|
WiFi.setAutoReconnect(true);
|
||||||
|
WiFi.persistent(true); // saves credentials to flash, faster reconnect
|
||||||
|
WiFi.mode(WIFI_STA);
|
||||||
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
||||||
|
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(400);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
Serial.print("WiFi connected. IP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
// nastavení pinů modulu jako výstup a vstup
|
||||||
|
pinMode(pSCK, OUTPUT);
|
||||||
|
pinMode(pDT, INPUT);
|
||||||
|
// komunikace přes sériovou linku rychlostí 9600 baud
|
||||||
|
Serial.begin(9600);
|
||||||
|
// probuzení modulu z power-down módu
|
||||||
|
digitalWrite(pSCK, LOW);
|
||||||
|
|
||||||
|
connectWiFi();
|
||||||
|
|
||||||
|
// spuštění prvního měření pro nastavení měřícího kanálu
|
||||||
|
spusteniMereni(kanal_A_zesil_64);
|
||||||
|
}
|
||||||
|
|
||||||
|
long counter = 0;
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
// Reconnect WiFi if dropped
|
||||||
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
|
connectWiFi();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long now = millis();
|
||||||
|
if (now - lastSendTime >= SEND_INTERVAL_MS) {
|
||||||
|
lastSendTime = now;
|
||||||
|
|
||||||
|
long rssi = WiFi.RSSI(); // dBm
|
||||||
|
long odpor = spusteniMereni(kanal_A_zesil_64);
|
||||||
|
|
||||||
|
// Build payload: counter;temperature;pressure;rssi\n
|
||||||
|
char payload[64];
|
||||||
|
snprintf(payload, sizeof(payload), "%ld;%ld;%ld\n", counter, odpor, rssi);
|
||||||
|
|
||||||
|
counter = counter + 1;
|
||||||
|
|
||||||
|
Serial.print("Sending UDP packet: ");
|
||||||
|
Serial.println(payload);
|
||||||
|
|
||||||
|
udp.beginPacket(UDP_TARGET_IP, UDP_TARGET_PORT);
|
||||||
|
udp.print(payload);
|
||||||
|
udp.endPacket();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// vytvoření funkce pro měření z nastaveného kanálu
|
||||||
|
long spusteniMereni(byte mericiMod)
|
||||||
|
{
|
||||||
|
byte index;
|
||||||
|
long vysledekMereni = 0L;
|
||||||
|
// načtení 24-bit dat z modulu
|
||||||
|
while(digitalRead(pDT));
|
||||||
|
for (index = 0; index < 24; index++)
|
||||||
|
{
|
||||||
|
digitalWrite(pSCK, HIGH);
|
||||||
|
vysledekMereni = (vysledekMereni << 1) | digitalRead(pDT);
|
||||||
|
digitalWrite(pSCK, LOW);
|
||||||
|
}
|
||||||
|
// nastavení měřícího módu
|
||||||
|
for (index = 0; index < mericiMod; index++)
|
||||||
|
{
|
||||||
|
digitalWrite(pSCK, HIGH);
|
||||||
|
digitalWrite(pSCK, LOW);
|
||||||
|
}
|
||||||
|
// konverze z 24-bit dvojdoplňkového čísla
|
||||||
|
// na 32-bit znaménkové číslo
|
||||||
|
if (vysledekMereni >= 0x800000)
|
||||||
|
vysledekMereni = vysledekMereni | 0xFF000000L;
|
||||||
|
// přepočet výsledku na mikrovolty podle zvoleného
|
||||||
|
// kanálu a zesílení
|
||||||
|
switch(mericiMod) {
|
||||||
|
case 1: vysledekMereni = vysledekMereni/128/2; break;
|
||||||
|
case 2: vysledekMereni = vysledekMereni/32/2; break;
|
||||||
|
case 3: vysledekMereni = vysledekMereni/64/2; break;
|
||||||
|
}
|
||||||
|
return vysledekMereni ;
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 280 KiB |
Reference in New Issue
Block a user