Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Sa proyektong ito, gagawa ka ng isang lampara sa gabi gamit ang ardruino, Adafruit neo rgb Strips at isang 3D printer.
Tandaan na ang hindi maipapasok ay puro para sa proyekto ng aking paaralan. Ang code para sa proyektong ito ay batay sa ibang proyekto. Sa sinabi kong hindi ako dalubhasa pagdating kay Ardruino.
Hakbang 1: Mga Kinakailangan
Para sa proyektong ito kakailanganin mo ang sumusunod na hardware at mga tool
Hardware:
1 - Isang ardruino101 (sa US) o isang Genuino101 (para sa labas ng US).
2 - NeoPixel rgb led strips mula sa adafruit (5 volt).
3 - Isang ardruino usb konektor (i-type ang B sa Isang konektor).
4 - Isang software mula sa Ardruino, Ardruino IDE Sa tutorial na ito gagamitin namin ang 1.8.5 na bersyon. Ang mga kinakailangan sa library ng software ay: 101, Adafruit NeoPixel at Madgwick.
5 -At isang bagay na mailalagay ang iyong hardware. Sa kasong ito ay gumagamit ako ng isang 3D printer. Ang file para sa 3D print na ito ay matatagpuan sa mga paglalarawan na tinatawag na "Lamp Head". Tandaan na ang format ng file na ito ay hindi handa sa 3D print. Nakasalalay sa iyong mga 3D printer dapat mo munang patakbuhin ang itinalagang 3d print software sa 3D na object muna. Minsan ang laki ng naka-print na 3D ay i-reset. kaya siguraduhin na ang diameter ay nakatakda sa 11 cm ng 11 cm.
6 - Pangunahing soldering kit.
Hakbang 2: Pag-unawa sa Hardware at Software
Ardruin / Genuino101
Linawin lamang ang Ardruino101 at genuino101 ay exacly pareho sa tabi ng mga pangalan. Parehong may parehong pagtutukoy at gumagamit ng parehong software.
Ang Ardruino101 ay nagtataglay ng mga pangunahing panoorin tulad ng ardruino UNO at marami pa. Ang pangunahing tampok ng ardruino101 ay ang accelerometer at gyroscope na gagamitin namin sa aming proyekto. Gayundin ang ganitong uri ng ardruino ay mayroong natatanging library ng code na tinatawag na CurrieIMU (Panloob na Mga Yunit ng pagsukat) na kasama sa extension ng library 101.
Sa nasabing sinabi ay pinag-uusapan ang tungkol sa software.
Larware at aklatan
Ang Ardruino IDE ay gumagamit ng python dahil pangunahing source code ito. ito rin ang pangunahing code ng platvorm kung saan tumatakbo ang karamihan sa ardruino. Mayroong maraming mga tutorial sa online kung paano gamitin ang software na ito kaya inirerekumenda ko sa iyo na saliksikin ang mga iyon kung bago ka sa programe na ito.
Sinabi na ang mga ginagamit naming aklatan ay ang mga sumusunod:
Mula sa menu ng Sketch,> Isama ang Library> Pamahalaan ang Mga Aklatan … Sa uri ng kahon ng input ng teksto sa
- 101 Sa standart ang ardruino 101 ay hindi awtomatikong kasama sa ardruino IDE. Kailangan namin ang extension ng library na ito upang mai-code ang aming uri ng ardruino.
-Adafruit NeoPixel upang mai-code ang aming Neo pixel strips.
-Madgwick Upang mabasa ang hilaw na data at upang makalkula ang data na ito sa raw, pitch at roll.
Neo RGB strips
Ang uri na gagamitin ko ay isang 5 boltahe o 5v na uri. Sa 5v na ito hindi ko kailangan ng isang pinahabang mapagkukunan ng kuryente upang makontrol ang aking mga piraso. Sa halip ay gagamitin ko ang aking ardruino bilang mapagkukunan ng kuryente upang makontrol at magaan ang mga piraso.
Narito ang ilang mga tip na kailangan mong malaman bago ka magsimula sa mga strip na ito.
Una kailangan mo ng isang Neodigital RGB na humantong mga piraso mula sa adafruit. Ang ganitong uri ng mga piraso ay maaaring gamitin sa paggamit ng mga code. Susunod na kailangan mong malaman ay na mayroong isang backside at isang frontside sa mga strips na ito. Ang likod at harapang ito ay mahalaga para sa paghihinang. Tiyaking solder mo ang front side kung saan ang arrow key ay tumuturo ang layo mula sa tip.
Narito ang isang gabay sa kung paano gamitin ang mga ito.
Mayroong 3 solder point na kailangan mong tandaan Ang koneksyon sa lupa (GND), Koneksyon ng Boltahe (V) at Koneksyon ng Pin (DIN).
Hakbang 3: Pag-set up ng Mga Components
Una kailangan mong i-print ang 3d ng sangkap na maaari mong makita sa mga kinakailangan. Sa kasong ito, gagamitin ko ang PLA. Siguraduhin na ang diameter ng labis na bagay ay 11cm ng 11cm. Tinitiyak nito na ang ardruino at ang mga strip ay magkakasya sa shpere. Tandaan na ang bawat 3D printer ay gumagamit ng mga difrent softwares upang makalkula ang proseso ng pag-print. Sa sinabi na ang file na iyong ginagamit ay maaaring ma-scale nang difrently kaya't tandaan mo iyon.
Pangalawa pagkatapos ng pag-print siguraduhin na ang mga sangkap ay maaaring magsara. Ang 3D na mga kopya nang magkasama ay bumubuo ng isang globo. Dapat silang magkasya nang maayos. Kung ang componten ay mawawala pagkatapos ay mag-ad ng ilang mga tape sa panloob na bahagi kaya napunan ang takip. At kung ito ay makapal na paggamit ng papel de liha.
Pangatlo ang mga skematich para sa ardruino at ang mga piraso ay medyo madali. Gumagamit ka ng 3 mga wire upang ikonekta ang mga piraso sa ardruino. Tandaan na ang mga lugar lamang na ako na maghinang ay nasa mga piraso. hindi sa Ardruino mismo.
Ang GND ay pupunta sa GND
Ang DIN ay pupunta sa isang Pin (sa aming kaso pin6 sa ardruino)
Ang 5V ay pupunta sa 5V
Siguraduhin na ang halaga ng led strips na iyong ginagamit ay cap sa 30. Ano pa man pagkatapos at mabibigo itong maayos na maisagawa ang code. Maaari mo lamang i-cut ng anumang hindi kinakailangang mga piraso ng displayd na may markang gunting.
Ang ika-apat na Evrything ay dapat magkasya nang maayos sa globo. Maaari mong gawin akong gumawa ng isang intersection sa pagitan ng 1 ng 3d print upang makita ang labangan at ilagay ang isang makikita sa labangan ng plastik sa itaas.
Hakbang 4: Pag-coding
Kaya sa ngayon dapat ay mayroon ka ng lahat ng mga sangkap na kinakailangan sa iyong silid-aklatan.
Narito ang code na kakailanganin mo upang mapatakbo ang proyekto. Ang resulta ay dapat magmukhang link ng video na ipinapadala ko sa pahinang ito.
Ang mapagkukunan ng code na ito ay matatagpuan dito. Kasama rin sa proyektong ito ang mga mahihirap na hakbang upang mas maunawaan ang code at algaritme sa likod ng mga gamit.
# isama # isama # isama # isama
# tukuyin ang PIN 6 // 11 pixel na NeoPixel Strip
#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Bilang ng mga píxels #define SAMPLE_RATE 25 // Sampling rate para sa accelerometer at gyroscope
// Madgwick configure
Madgwick filter; unsigned mahabang microsPerReading, microsPrevious; float accelScale, gyroScale;
// NeoPixel config
Adafruit_NeoPixel pixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// Mga puwang ng kulay
RGBConverter rgbConverter; doble h = 1; doble s = 1; doble v = 1; byte rgb [3];
// Lampara ng Paggalaw ng Katayuan
// State 0 -> Select Hue - Pitch // State 1 -> Select saturation - Roll // State 2 -> Select Value - Yaw // State 3 -> Fix color pabagu-bago int statusLamp = 0;
walang bisa ang pag-setup () {
Serial.begin (9600);
// simulan ang IMU at filter
CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);
// Itakda ang saklaw ng accelerometer sa 2G
CurieIMU.setAccelerometerRange (2); // Itakda ang saklaw ng gyroscope sa 250 degree / segundo CurieIMU.setGyroRange (250);
CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();
CurieIMU.attachInterrupt (eventCallback);
CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.interrupts (CURIE_IMU_TAP);
// ipasimula ang mga variable upang mag-bilis ng mga pag-update upang maitama ang rate
microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();
// Init NeoPixel 11
pix.begin (); pix.show ();
// Init NeoPixel 1
pixelStatus.begin (); pix.show ();
// Ipakita ang katayuan sa px
setStatusPixel (statusLamp); }
void loop () {
int aix, aiy, aiz; // accelerometer int gix, giy, giz; float ax, ay, az; float gx, gy, gz; float roll, pitch, yaw; static unsigned mahabang microsNow;
// suriin kung oras na upang basahin ang data at i-update ang filter
microsNow = micros (); kung (microsNow - microsPrevious> = microsPerReading) {
// basahin ang raw data mula sa CurieIMU
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// convert mula sa hilaw na data patungo sa gravity at degree / second unit
palakol = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);
// i-update ang filter, na tumutukoy sa oryentasyon
filter.updateIMU (gx, gy, gz, ax, ay, az);
// print the heading, pitch and roll
roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();
// pagtaas ng nakaraang oras, kaya pinapanatili namin ang tamang bilis
microsPrevious = microsPrevious + microsPerReading;
// Tanging kung baguhin ang Hue, saturation o Halaga
kung (statusLamp select Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform anggulo ng pitch = pitch + 90; // Nakakakuha ng mga cordinate ng kulay mula sa mga anggulo h = pitch / 180.0;}
// Mga paghihigpit sa Angles
// roll only -90º to 90º = 180º // State 1 -> piliin ang saturation kung (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform anggulo roll = roll + 90; // Nakakakuha ng mga cordinate ng kulay mula sa mga anggulo s = roll / 180.0; }
// State 2 -> piliin ang Halaga
kung (statusLamp == 2) {// yaw 0º hanggang 360º v = yaw / 360.0; }
// I-convert sa rgb
rgbConverter.hsvToRgb (h, s, v, rgb); / * Serial.print ("Kulay:"); Serial.print (h); Serial.print ("-"); Serial.print (s); Serial.print ("-"); Serial.print (v); Serial.println ("");
Serial.print ("Oryentasyon:");
Serial.print (yaw); Serial.print (""); Serial.print (pitch); Serial.print (""); Serial.println (roll); * /
// Baguhin ang kulay ng mga pixel
para sa (int px = 0; px <NUMPIXELS; px ++) {pix.setPixelColor (px, pix. Color (rgb [0], rgb [1], rgb [2])); pix.show (); }}
// Ipakita ang katayuan sa px
setStatusPixel (statusLamp); }}
float convertRawAcceleration (int aRaw) {
// dahil gumagamit kami ng 2G saklaw // -2g mga mapa sa isang hilaw na halaga ng -32768 // + 2g mga mapa sa isang hilaw na halaga ng 32767
float a = (aRaw * 2.0) / 32768.0;
ibalik a; }
float convertRawGyro (int gRaw) {
// dahil gumagamit kami ng saklaw na 250 degree / segundo // -250 na mga mapa sa isang hilaw na halagang -32768 // +250 na mga mapa sa isang hilaw na halaga ng 32767
float g = (gRaw * 250.0) / 32768.0;
bumalik g; }
static void eventCallback ()
{// Detect tap in all axis if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tapikin ang napansin na statusLamp:"); Serial.println (statusLamp);
// Baguhin ang estado
statusLamp ++;
// Init state
kung (statusLamp> 3) {statusLamp = 0; }}}
void setStatusPixel (int statusPx)
{switch (statusPx) {case 0: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0)); pixelStatus.show (); pahinga; case 1: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 150, 0)); pixelStatus.show (); pahinga; case 2: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 150)); pixelStatus.show (); pahinga; case 3: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 0)); pixelStatus.show (); pahinga;
}
}