Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

BeeMonitor

Componenten en benodigdheden

Arduino Nano 33 BLE Sense
× 1
USB-A naar micro-USB-kabel
× 1

Apps en online services

Arduino IDE
Edge Impulse Studio
Android Studio

Over dit project

Inleiding

We zullen de ontwikkeling presenteren van een bijenbestrijdingstoepassing die de imker helpt bij de efficiënte productie van honing en andere producten. De applicatie heeft betrekking op het gebied van de bijenteelt. We zien de motivatie in het helpen van de imker om de bijen onder controle te houden en zo effectief mogelijk te zijn. Dit zou het voor de imker gemakkelijker maken om lange uren aan individuele kasten te werken. Het idee is dat de app op basis van temperatuur en vochtigheid inzicht geeft in de toestand van de bijenfamilie in een bepaalde bijenkast en detectie van een bijzondere gebeurtenis die zwermen heet. Dit is een evenement waarbij de bijenfamilie in twee delen wordt verdeeld. Het ene deel blijft in de korf en het andere verlaat de korf en vindt een nieuw thuis. Het eerste deel blijft in de korf en wacht tot de nieuwe koningin uitkomt, terwijl de tweede helft samen met de oude koningin de korf verlaat. Hierbij is het van belang dat de imker tijdig actie onderneemt. Hij zou daarbij geholpen worden door een bijenbestrijdingsapplicatie, die zo'n gebeurtenis herkent op basis van de geluidsverwerking van het bijengezoem.

Oplossing

Aangezien een individuele imker meestal grote hoeveelheden bijenkasten heeft en dus ook veel bijenkasten, vergt handmatige inspectie van een individuele bijenkast veel tijd. Met behulp van onze applicatie maakt de imker verbinding met individuele kasten via een mobiele terminal en Bluetooth-verbinding, waar hij de gezondheid van de bijenfamilie kan bekijken. Bovendien waarschuwt de applicatie de imker in geval van zwermen dat hij tijdig actie kan ondernemen en dat de bijen niet zullen ontsnappen naar de natuur, wat de honingproductie zou verminderen.

Beschrijving

Het systeem bestaat uit een Arduino Nano BLE 33 Sense-microcontroller, die ook een microfoon op de printplaat bevat. Met behulp van een algoritme dat op een microcontroller draait, luistert de controller naar het zoemen van bijen en herkent met behulp van een aangeleerd model het verschil in het zoemen van bijen, wanneer de koningin in de korf aanwezig is en wanneer Het is niet. Naast geboortedetectie bevat de Arduino ook een temperatuur- en vochtigheidssensor. Met behulp van deze gegevens kunnen we de toestand of de gezondheid van de bijenfamilie in de korf bepalen. Omdat het doel een laag energieverbruik was, meet het systeem de toestand slechts enkele keren per dag, of in de tijdsperioden tussen 10.00 en 13.00 uur, waar de kans op swarning het grootst is. De rest van de dag is het apparaat grotendeels inactief en verbruikt het geen energie.

Machine learning-model

Beschrijving EdgeImpulse-procedure

  • Gegevens vastleggen met een microfoon

Eerst hebben we het zoemen van de bijen vastgelegd met behulp van een microfoon om gegevens te verzamelen die de basis vormden voor een leermodel.

  • Spectrale analyse van geluiden

De gegevens werden vervolgens verwerkt met behulp van een spectrogram.

  • Een model bouwen met een neuraal netwerk

Het spectrogram was de input voor het neurale netwerk, dat werd gebruikt om het model te trainen. Na een lange herberekening kregen we de resultaten, die werden weergegeven in een matrix die de herkenningsprestaties van het model weergeeft.

De onderstaande grafiek laat zien hoe het model presteert op basis van de vastgelegde gegevens.

  • Maak een bibliotheek en upload deze naar de Arduino

Ten slotte hebben we een bibliotheek gemaakt om te uploaden naar het Arduino-bord.

Hardware

  • Arduino Nano BLE 33 Sense
  • Batterijvermogen
  • Mobiele Android-terminal

Connectiviteit

Voor het ontvangen van gegevens van Arduino naar applicatie op Android-telefoon hebben we de Bluetooth-connectiviteitsoptie gebruikt. Arduino Nano BLE 33 Sense biedt bluetooth-module op zijn printplaat. Met deze communicatie kunt u verbinding maken met de Arduino in de korf en afstand houden van de korf waar geen risico is op bijensteken.

Android-app

Vervolgens hebben we de Android-app ontworpen die we nodig hebben om verbinding te maken met de Arduino Nano BLE 33 Sense en beginnen met het downloaden van gegevens en waarschuwingen over de status van de bijenfamilie.

1. Verbinding maken met het apparaat in de korf

2. Hoofdscherm met temperatuur- en vochtigheidsgegevens en gebeurteniswaarschuwingen.

Hieronder kun je waarschuwingen zien die het Arduino-apparaat naar de Android-applicatie stuurt.

Werkingsconcept

Doe het zelf!

Instructies voor het testen van ons systeem.

Stap 1 Downloaden van the.ino programma-omgeving voor het programmeren van de Arduino ble 33 sense. Compileer code en stuur deze naar het Arduino-bord.

https://www.arduino.cc/en/software

Stap 2 Download de app naar je Android-apparaat (.apk-bestand in bijlage)

Stap 3 Installeer het Arduino-apparaat in de bijenkorf.

Stap 4 Verbinding maken met het apparaat met Bluetooth-verbinding

Verbeteringen

  • Verbeteren van het machine learning-model door de database van bijenzoemen te vergroten.
  • Extra functies toevoegen aan de Android-app
  • We zien verbeteringen in het bouwen van een database met bijenkorfinformatie op het LoraWan-netwerk, waar gegevens naar een server kunnen worden verzonden en overal en altijd kunnen worden geopend.

Conclusie

We presenteren graag ons idee en delen met u een project dat u in uw eigen omgeving kunt uitproberen. We zijn van mening dat we op de goede weg zijn om het werk van de imker gemakkelijker te maken met verdere verbeteringen. U kunt ook bijdragen aan het verbeteren van het model door de database met opnames van bijenzoem te vergroten. Hierdoor wordt het systeem nauwkeuriger en minder storingsgevoelig. Bedankt!

Code

  • Arduino Nano ble 33 sense
  • ei-smartbees-arduino-1.0.6.zip
Arduino Nano ble 33 senseC/C++
/* Edge Impulse Arduino-voorbeelden Copyright (c) 2021 EdgeImpulse Inc. Hierbij wordt gratis toestemming verleend aan eenieder die een kopie van deze software en bijbehorende documentatiebestanden (de "Software") verkrijgt om te handelen in de Software zonder beperking, inclusief maar niet beperkt tot de rechten om de Software te gebruiken, kopiëren, wijzigen, samenvoegen, publiceren, distribueren, in sublicentie geven en/of verkopen van kopieën van de Software, en om personen aan wie de Software wordt geleverd toe te staan ​​dit te doen, onder voorbehoud van de volgende voorwaarden:De bovenstaande copyrightkennisgeving en deze toestemmingskennisgeving moeten worden opgenomen in alle kopieën of substantiële delen van de software. DE SOFTWARE WORDT GELEVERD "AS IS", ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUK. IN GEEN GEVAL ZULLEN DE AUTEURS OF HOUDERS VAN HET AUTEURSRECHT AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ IN EEN OVEREENKOMST, ONRECHTMATIGE OF ANDERE, VOORTVLOEIENDE UIT, UIT OF IN VERBAND MET DE SOFTWARE OF HET GEBRUIK IN OF DE ANDERE HANDELINGEN SOFTWARE.*/// Als uw doel beperkt is in het geheugen, verwijdert u deze macro om 10K RAM te besparen#define EIDSP_QUANTIZE_FILTERBANK 0/* Inclusief ----------------------- ----------------------------------------- */#include  #include #include #include #include #define BLE_UUID_STRING "1A3AC131-31EF-758B-BC51-54A61958EF82"#define ESTECBA92-2 "E 082F-C079-9E75AAE428B1"/** Audiobuffers, pointers en selectors */typedef struct { int16_t *buffer; uint8_t buf_ready; uint32_t buf_count; uint32_t n_samples;} inference_t;static inference_t inference;statisch ondertekende korte sampleBuffer[2048];static bool debug_nn =false; // Zet dit op true om b.v. functies gegenereerd uit het onbewerkte signaalBLEDevice central;BLEService service(BLE_UUID_TEST_SERVICE);BLEStringCharacteristic serviceOutput(BLE_UUID_STRING, BLERead | BLENotify, 200);/** @brief Arduino setup function*/void setup(){ // plaats hier uw setup-code om één keer uitvoeren:Serial.begin(115200); terwijl (!Serial); pinMode (LED_BUILTIN, UITGANG); if (!BLE.begin()) { Serial.println("het starten van BLE is mislukt!"); terwijl (1); } BLE.setLocalName("BeeHive"); BLE.setAdvertisedService(service); service.addCharacteristic(serviceOutput); BLE.addService(service); BLE.adverteren(); Serial.println("Bluetooth-apparaat actief, wacht op verbindingen..."); if (!HTS.begin()) { Serial.println("Kan de vochtigheidstemperatuursensor niet initialiseren!"); terwijl (1); } if (microphone_inference_start(EI_CLASSIFIER_RAW_SAMPLE_COUNT) ==false) { ei_printf("ERR:Kan audiosampling niet instellen\r\n"); opbrengst; }}/** @brief Arduino hoofdfunctie. Voert de inferencing-lus uit.*/void loop(){ central =BLE.central(); if (centraal) { Serial.print("Verbonden met centraal:"); Serial.println(centraal.adres()); digitalWrite (LED_BUILTIN, HOOG); while (central.connected()) { ei_printf("Inferentie starten over 2 seconden...\n"); vertraging (2000); ei_printf("Opname...\n"); bool m =microfoon_inference_record(); if (!m) { ei_printf("ERR:Kan geen audio opnemen...\n"); opbrengst; } vlottertemperatuur =HTS.readTemperature(); float vochtigheid =HTS.readHumidity(); StaticJsonDocument<600> doc; doc["temperatuur"] =(rond (temperatuur*10)/10,0); doc["vochtigheid"] =(rond(vochtigheid*10)/10,0); doc["gebeurtenis"] =""; ei_printf("Opname klaar\n"); signaal_t signaal; signal.total_length =EI_CLASSIFIER_RAW_SAMPLE_COUNT; signal.get_data =µphone_audio_signal_get_data; ei_impulse_result_t resultaat ={ 0 }; EI_IMPULSE_ERROR r =run_classifier(&signal, &result, debug_nn); if (r !=EI_IMPULSE_OK) { ei_printf("ERR:Kan classificatie niet uitvoeren (%d)\n", r); opbrengst; } // print de voorspellingen ei_printf("Voorspellingen"); ei_printf("(DSP:%d ms., Classificatie:%d ms., Anomalie:%d ms.)", result.timing.dsp, resultaat.timing.classification, resultaat.timing.anomaly); ei_printf(":\n"); float voorspellingen[3]; for (size_t ix =0; ix  0) { Serial.write(print_buf); }}/** @brief PDM buffer volledige callback Gegevens ophalen en audiothread callback*/static void pdm_data_ready_inference_callback(void){ int bytesAvailable =PDM.available(); // lees in de voorbeeldbuffer int bytesRead =PDM.read((char *)&sampleBuffer[0], bytesAvailable); if (inference.buf_ready ==0) { for (int i =0; i > 1; i++) { inference.buffer[inference.buf_count++] =sampleBuffer[i]; if (inference.buf_count>=inference.n_samples) { inference.buf_count =0; gevolgtrekking.buf_ready =1; pauze; } } }}/** @brief Init inferencing struct en setup/start PDM @param[in] n_samples The n samples @return { description_of_the_return_value }*/static boolmicrofoon_inference_start(uint32_t n_samples){ inference.buffer =(malloc16_t *) (n_samples * sizeof(int16_t)); if (inference.buffer ==NULL) { return false; } gevolgtrekking.buf_count =0; gevolgtrekking.n_samples =n_samples; gevolgtrekking.buf_ready =0; // configureer de data ontvangen callback PDM.onReceive(&pdm_data_ready_inference_callback); // stel optioneel de versterking in, standaard ingesteld op 20 PDM.setGain(80); PDM.setBufferSize(4096); // initialiseer PDM met:// - één kanaal (monomodus) // - een samplefrequentie van 16 kHz if (!PDM.begin(1, EI_CLASSIFIER_FREQUENCY)) { ei_printf("Kan PDM niet starten!"); microfoon_inference_end(); onwaar retourneren; } return true;}/** @brief Wacht op nieuwe gegevens @return True als u klaar bent*/static bool microfoon_inference_record(void){ inference.buf_ready =0; gevolgtrekking.buf_count =0; while (inference.buf_ready ==0) {//delay (10); vertraging (2000); } return true;}/** Ontvang onbewerkte audiosignaalgegevens*/static int microfoon_audio_signal_get_data (size_t offset, size_t lengte, float *out_ptr){ numpy::int16_to_float(&inference.buffer[offset], out_ptr, lengte); return 0;}/** @brief Stop PDM en laat buffers vrij*/static void microfoon_inference_end(void){ PDM.end(); free(inference.buffer);}#if !defined(EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR !=EI_CLASSIFIER_SENSOR_MICROPHONE#error "Ongeldig model voor huidige sensor."#endif
ei-smartbees-arduino-1.0.6.zipC/C++
Bibliotheek met machine learning-model
Geen voorbeeld (alleen downloaden).
Andorid-app
https://github.com/TCodingB/BeeMonitor.git
Apk-bestand voor Android-apparaat
https://github.com/TCodingB/BeeMonitor/tree/main/apk/debug

Productieproces

  1. Wat is VMC-bewerking?
  2. Gids voor aluminium lasermarkering
  3. MIG-lassen versus TIG-lassen
  4. Gids voor lasermarkering
  5. Overwegingen voor Zwitserse machinale bewerking met hoge productie
  6. Gids voor CNC-prototyping
  7. Het fabricageproces van de schacht begrijpen
  8. Wat is fiberlasermarkering?
  9. Elektrolytisch polijsten versus passiveren
  10. Wat is RVS-passivering?
  11. Hoe u vistuig ontwerpt en bouwt in bedrijfstijd