İçindekiler:
- Adım 1: Malzemeler
- Adım 2: MDF'deki Çekmece Parçalarını Kesin. (Daha İyi Sonuçlar İçin Bir Lazer Kesici Kullanın)
- Adım 3: İki Küçük Çekmeceli ve Büyük Bir Çekmeceli Bir Çekmece Oluşturmak için Tüm Parçaları Bir Araya Yapıştırın
- Adım 4: Her Çekmecenin Ortasındaki Vidaları Vidalayın
- Adım 5: Matkap Arka Taraftaki Çekmeceden Delikler Açarken Delik Sensörün Boyutunda Olmalıdır
- Adım 6: Her Sensörü CNY 70 Bakır Tellerle Kaynaklayın. (4 Kez Daha fazla tekrarlayın)
- Adım 7: Sensör İçin Özel Bir Devre Kullanılır
- Adım 8: Sensör Ara Katını Dragon Board 410c'ye bağlayın. (GPIO'ya Erişmek için kullanılır)
- Adım 9: Devreyi Breadboard'dan Asma Kat'a Bağlayın
- Adım 10: Kodu Yazın veya Kopyalayın
- Adım 11: Programı çalıştırın
- Adım 12: Sonuçlar
Video: Envanter Çekmecesi "Akıllı Şehirler Hackathon Qualcomm17": 13 Adım
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Bir sonraki belgede akıllı çekmecenin yapım ve programlanma sürecini görebilirsiniz. Bu çekmece, şehirlerin kalitesini artırmak amacıyla Dragon Board 410c'de programlanmıştır. Proje, “akıllı şehirler hackathon Qualcomm 17” yarışmasının bir parçasıdır.
Bu projenin fikri, çok az insanın gördüğü, fabrikalar ve hatta hastaneler gibi şirketler tarafından sağlanan alet ve malzemelerin kayıp ve kötü yönetimi olan bir sorunla başladı. Bu yerlerde, işçilere faaliyetleri yapmaları için bazı malzeme ve araçlar sağlanır, bu malzeme ve araçlar pahalı olduklarından veya yerini alacak ekonomik kaynakların bulunmadığından yeniden kullanılmalıdır.
Hastanelerde kaldırılan malzemelerin kontrolünü eline alan kişiler var ama insan müdahalesi olduğunda hata oluyor ve bu da gereksiz harcamalara yol açabiliyor. Bu soruna en iyi çözüm, ödünç alınan ve iade edilen nesnelerin envanterini tutabilen ve aynı zamanda kimin sorumlu olduğunu bilen akıllı bir çekmecedir.
Adım 1: Malzemeler
Proje için gereken malzeme bir sonraki: 1 x Dragon Board 410c
Dragon Board 410c için 1 x Sensör Ara Kat 96 Panoları
1 x Ekmek Tahtası
1 x MDF (Orta Yoğunluklu Sunta) levha 61 x 122 cm
5 x sensör CNY 70
1 X TIP31B
1 x elektromıknatıs
1x7408
1 x Klavye
1 x ekran
3 x vida
Dirençler (çeşit)
Bakır teller
Zamk
Delmek
Adım 2: MDF'deki Çekmece Parçalarını Kesin. (Daha İyi Sonuçlar İçin Bir Lazer Kesici Kullanın)
Adım 3: İki Küçük Çekmeceli ve Büyük Bir Çekmeceli Bir Çekmece Oluşturmak için Tüm Parçaları Bir Araya Yapıştırın
Adım 4: Her Çekmecenin Ortasındaki Vidaları Vidalayın
Adım 5: Matkap Arka Taraftaki Çekmeceden Delikler Açarken Delik Sensörün Boyutunda Olmalıdır
Adım 6: Her Sensörü CNY 70 Bakır Tellerle Kaynaklayın. (4 Kez Daha fazla tekrarlayın)
Adım 7: Sensör İçin Özel Bir Devre Kullanılır
Adım 8: Sensör Ara Katını Dragon Board 410c'ye bağlayın. (GPIO'ya Erişmek için kullanılır)
Bu adımın ejderha tahtası kapalıyken yapılması çok önemlidir, aksi takdirde yanabilir, ayrıca tüm PIN'lerin doğru yerleştirilmesi gerekir.
Adım 9: Devreyi Breadboard'dan Asma Kat'a Bağlayın
Adım 10: Kodu Yazın veya Kopyalayın
#include #include #include //#include
#include "libsoc_gpio.h"
#include "libsoc_debug.h" #include "libsoc_board.h"
/* Aşağıdaki kod parçası, bu örneğin tüm 96Board'larda çalışmasını sağlar */
imzasız int LED_1; // elektro iman
unsigned int BUTTON_1;//ilk sensör
unsigned int BUTTON_2;//ikinci sensör unsigned int BUTTON_3;// kapat unsigned int BUTTON_4;//üçüncü sensör
yapı Kullanıcısı{
char kullanıcı adı[20]; karakter şifresi[20]; }Kullanıcı;
yapı Veritabanı{
char Makale_Adı[20]; karakter Konumu[20]; }Veri tabanı;
int sensör1;
int sensör2; int sensör3;
int sensor1_last_state;
int sensor2_last_state; int sensor3_last_state;
karakter kullanıcı adı[50];
karakter şifresi[50];
char EvetHayır[40];
DOSYA *pFILE;
char Evet[20] = {"Evet"};
int koşu = 1;
_attribute_((yapıcı)) statik boşluk _init()
{ board_config *config = libsoc_board_init(); BUTTON_1 = libsoc_board_gpio_id(config, "GPIO-A");//fists sensörü BUTTON_2 = libsoc_board_gpio_id(config, "GPIO-C");// ikinci sensör BUTTON_3 = libsoc_board_gpio_id(config, "GPIO-D"); // rafı kapat BUTTON_4 = libsoc_board_gpio_id(config, "GPIO-B"); // üçüncü sensör // BUTTON_5 = libsoc_board_gpio_id(config, "GPIO-E");
LED_1 = libsoc_board_gpio_id(config, "GPIO-E"); // elektro iman
libsoc_board_free(yapılandırma); } /* 96Boards özel kodunun sonu */
int ana()
{ gpio *led_1, *button_1, *button_2, *button_3, *button_4; //int dokunma; yapı Kullanıcı Karina; struct Kullanıcı Yöneticisi; strcpy(Karina.kullanıcıadı, "Karina Valverde"); strcpy(Karina.password, "Daha Uzun Dikey"); strcpy(Yönetici.kullanıcıadı, "Patron"); strcpy(Yönetici.şifre, "ITESM"); struct Veritabanı Aracı; struct Veritabanı Kalemi; yapı Veritabanı Örneği; strcpy(Araç. Makale_Adı, "Araç"); struct Veritabanı Aracı; struct Veritabanı Kalemi; yapı Veritabanı Örneği; strcpy(Araç. Makale_Adı, "Araç"); strcpy(Kalem. Makale_Adı, "Kalem"); strcpy(Vaka. Makale_Adı, "Vaka"); libsoc_set_debug(0); led_1 = libsoc_gpio_request(LED_1, LS_SHARED); button_1 = libsoc_gpio_request(BUTTON_1, LS_SHARED); button_2 = libsoc_gpio_request(BUTTON_2, LS_SHARED); button_3 = libsoc_gpio_request(BUTTON_3, LS_SHARED); button_4 = libsoc_gpio_request(BUTTON_4, LS_SHARED); //button_5 = libsoc_gpio_request(BUTTON_5, LS_SHARED);
if((led_1 == NULL) || (button_1 == NULL)|| (button_2 == NULL)|| (button_3 == NULL)||(button_4 == NULL))
{ başarısız ol; } libsoc_gpio_set_direction(led_1, OUTPUT); libsoc_gpio_set_direction(button_1, INPUT); libsoc_gpio_set_direction(button_2, INPUT); libsoc_gpio_set_direction(button_3, INPUT); libsoc_gpio_set_direction(button_4, INPUT); //libsoc_gpio_set_direction(button_5, INPUT);
if((libsoc_gpio_get_direction(led_1) != ÇIKTI)
|| (libsoc_gpio_get_direction(button_1) != GİRİŞ) || (libsoc_gpio_get_direction(button_2) != GİRİŞ) || (libsoc_gpio_get_direction(button_3) != GİRİŞ) || (libsoc_gpio_get_direction(button_4) != GİRİŞ)) { hataya git; } sensor1 = libsoc_gpio_get_level(button_1); sensor2 = libsoc_gpio_get_level(button_2); sensor3 = libsoc_gpio_get_level(button_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 ==1){ strcpy(Tool. Location, "Rafta Bulunur"); } else if (sensor1 == 0){ strcpy(Tool. Location, "Bu Rafa Asla Yerleştirilmemiştir"); } if (sensor2 ==1){ strcpy(Pen. Location, "Rafta Bulunur"); } else if (sensor2 == 0){ strcpy(Pen. Location, "Bu Rafa Asla Yerleştirilmemiştir"); } if (sensor3 ==1){ strcpy(Case. Location, "Rafta Bulunur"); } else if (sensor3 == 0){ strcpy(Case. Location, "Bu Rafa Asla Yerleştirilmemiştir"); } while(çalışıyor) { libsoc_gpio_set_level(led_1, YÜKSEK); printf("Lütfen kullanıcı adını giriniz: "); scanf("%s", kullanıcı adı); printf("Lütfen şifreyi giriniz: "); scanf("%s", şifre); if (strcmp(kullanıcı adı, "Karina") == 0 && strcmp(şifre, "Uzun") == 0){ libsoc_gpio_set_level(led_1, DÜŞÜK); libsoc_gpio_set_level(led_1, DÜŞÜK); while(libsoc_gpio_get_level(button_3) != 1){ sensor1 = libsoc_gpio_get_level(button_1); sensor2 = libsoc_gpio_get_level(button_2); sensor3 = libsoc_gpio_get_level(button_4); } libsoc_gpio_set_level(led_1, YÜKSEK); if (sensor1 == 1 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, Karina.username); }else if (sensor1 == 0 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, "Rafta Yerleştirildi"); } if (sensor2 == 1 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, Karina.username); }else if (sensor2 == 0 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, "Rafta Yerleştirildi"); }
if (sensor3 == 1 && sensor3 != sensor3_last_state){
strcpy(Case. Location, Karina.username); }else if (sensor3 == 0 && sensor3 != sensor3_last_state){ strcpy(Case. Location, "Rafta Yerleştirildi"); } }else if (strcmp(kullanıcı adı, "Boss") == 0 && strcmp(parola, "ITESM") == 0){ printf(" Veritabanı ile bir metin dosyası oluşturmak istiyor musunuz? [Evet/Hayır] "); scanf("%s", EvetHayır); if ((strcmp(EvetHayır, Evet) == 0))){ //Manager_user(pFILE); pFILE = fopen("Veritabanı.txt", "w"); fprintf(pFILE, "%s", "-------Rack'in Veritabanı ----- \n"); fprintf(pFILE, "%s", "Makalenin Adı:"); fprintf(pFILE, "%s", Araç. Makale_Adı); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Makalenin Konumu:"); fprintf(pFILE, "%s", Araç. Konum); fprintf(pFILE, "%s", "\n"); fprintf(pFILE, "%s", "Makalenin Adı:"); fprintf(pFILE, "%s", Kalem. Makale_Adı); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Makalenin Konumu:"); fprintf(pFILE, "%s", Kalem. Konum); fprintf(pFILE, "%s", "\n");
fprintf(pFILE, "%s", "Makale Adı:");
fprintf(pFILE, "%s", Case. Article_Name); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Makalenin Konumu:"); fprintf(pFILE, "%s", Case. Location); fprintf(pFILE, "%s", "\n");
fclose(pFILE);
}
printf("Erişim Engellendi\n");
} } fail: if(led_1 || button_1|| button_2|| button_3) { printf("apply gpio resource fail!\n"); libsoc_gpio_free(led_1); libsoc_gpio_free(button_1); libsoc_gpio_free(button_2); libsoc_gpio_free(button_3); }
Adım 11: Programı çalıştırın
Adım 12: Sonuçlar
Proje gelecek vaat ediyor, çünkü çok etkili bir şekilde gelişebilir, sensörler RFID´S etiketleri için değiştirilebilir ve aynı zamanda RFID ile malzemeden kimin sorumlu olduğunu izlemek için kimlik kartları kullanmak mümkündür.