Об этом проекте
Всем привет, мне предложили сделать машину для уклонения от препятствий, но я подумал, что это слишком распространено и непрактично делать ..., поэтому я подумал сделать гидролокатор, используя концепцию сервопривода машины для уклонения от препятствий и датчик HC-SR04.
У меня не было экрана tft lcd, из-за которого я не знал, как отображать выходные данные сонара. Тогда я подумал использовать IDE обработки, поскольку это позволило отображать выходные данные сонара на моем компьютере с хорошим разрешением! но поскольку я был новичком в обработке IDE, я не знал, как ее использовать, поэтому для практики я использовал веб-редактор p5 (просто для практики), чем я использовал обработку Ide и некоторые библиотеки для чтения вывода сонара и отображения на ПК!
Я прикрепил ультразвуковой датчик к серводвигателю с помощью пистолета для горячего клея, так что ультразвуковой датчик вращается вместе с сервоприводом и охватывает диапазон 180 градусов, а затем вывод, обнаружен объект или нет, отображается при обработке IDE, и я написал еще код, который точно отображает расстояние и угол!
Друзья, я также поделился тем, как выглядит результат обработки IDE, как будто вы можете использовать изображение в качестве ссылки в своем проекте :)
Поскольку мы знаем, как выглядит сборка и вывод, единственное, что осталось, это видео вывода, просмотрите видео до конца, чтобы лучше понять вывод.
Код
- Код сонара для Arduino IDE
- Код сонара для обработки IDE
Код сонара для Arduino IDE C / C ++
#include const int trigPin =12; const int echoPin =11; long duration; int distance; Servo s1; void setup () {Serial.begin (9600); pinMode (trigPin, ВЫХОД); pinMode (echoPin, ВХОД); s1.attach (9);} void loop () {для (int я =0; я <180; я =я + 1) {s1.write (я); задержка (30); расстояние =calDist (); Serial.print (i); Serial.print (","); Serial.print (расстояние); Serial.print ("."); } для (int я =180; я> 0; я =я-1) {s1.write (я); задержка (30); расстояние =calDist (); Serial.print (i); Serial.print (","); Serial.print (расстояние); Serial.print ("."); }} int calDist () {digitalWrite (trigPin, LOW); delayMicroseconds (2); digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW); duration =pulseIn (echoPin, HIGH); расстояние =продолжительность * 0,034 / 2; расстояние возврата;}
Код сонара для обработки IDE Java
import processing.serial. *; Последовательный myPort; String ang =""; String distance =""; String data =""; int angle, dist; void setup () {size (2000,800); myPort =новый последовательный порт (это, «COM3», 9600); myPort.bufferUntil ('.'); фон (0);} void draw () {fill (0,5); noStroke (); rect (0, 0, ширина, высота * 0,93); noStroke (); заполнить (0,255); rect (0, высота * 0,93, ширина, высота); drawRadar (); drawLine (); drawObject (); drawText ();} void serialEvent (Serial myPort) {данные =myPort.readStringUntil ('.'); data =data.substring (0, data.length () - 1); int index1 =data.indexOf (","); ang =data.substring (0, index1); расстояние =data.substring (index1 + 1, data.length ()); угол =int (угол); dist =int (расстояние); System.out.println (угол);} void drawRadar () {pushMatrix (); noFill (); strokeWeight (0,5); инсульт (10,255,10); перевести (ширина / 2, высота-высота * 0,06); линия (-ширина / 2,0, ширина / 2,0); arc (0,0, (ширина * 0,5), (ширина * 0,5), PI, TWO_PI); arc (0,0, (ширина * 0,25), (ширина * 0,25), PI, TWO_PI); arc (0,0, (ширина * 0,75), (ширина * 0,75), PI, TWO_PI); arc (0,0, (ширина * 0,95), (ширина * 0,95), PI, TWO_PI); строка (0,0, (- ширина / 2) * cos (радианы (30)), (- ширина / 2) * sin (радианы (30))); строка (0,0, (- ширина / 2) * cos (радианы (60)), (- ширина / 2) * sin (радианы (60))); строка (0,0, (- ширина / 2) * cos (радианы (90)), (- ширина / 2) * sin (радианы (90))); строка (0,0, (- ширина / 2) * cos (радианы (120)), (- ширина / 2) * sin (радианы (120))); строка (0,0, (- ширина / 2) * cos (радианы (150)), (- ширина / 2) * sin (радианы (150))); инсульт (175,255,175); строка (0,0, (- ширина / 2) * cos (радианы (15)), (- ширина / 2) * sin (радианы (15))); строка (0,0, (- ширина / 2) * cos (радианы (45)), (- ширина / 2) * sin (радианы (45))); строка (0,0, (- ширина / 2) * cos (радианы (75)), (- ширина / 2) * sin (радианы (75))); строка (0,0, (- ширина / 2) * cos (радианы (105)), (- ширина / 2) * sin (радианы (105))); строка (0,0, (- ширина / 2) * cos (радианы (135)), (- ширина / 2) * sin (радианы (135))); строка (0,0, (- ширина / 2) * cos (радианы (165)), (- ширина / 2) * sin (радианы (165))); popMatrix ();} void drawLine () {pushMatrix (); strokeWeight (9); инсульт (0,255,0); перевести (ширина / 2, высота-высота * 0,06); линия (0,0, (ширина / 2) * cos (радианы (угол)), (- ширина / 2) * sin (радианы (угол))); popMatrix ();} void drawObject () {pushMatrix (); strokeWeight (9); инсульт (255,0,0); перевести (ширина / 2, высота-высота * 0,06); float pixleDist =(расстояние / 40.0) * (ширина / 2.0); float pd =(ширина / 2) -pixleDist; float x =-pixleDist * cos (радианы (угол)); float y =-pixleDist * sin (радианы (угол)); if (dist <=40) {линия (-x, y, -x + (pd * cos (радианы (угол))), y- (pd * sin (радианы (угол)))); } popMatrix ();} void drawText () {pushMatrix (); заполнить (100,200,255); textSize (25); текст («10см», (ширина / 2) + (ширина * 0,115), высота * 0,93); текст («20см», (ширина / 2) + (ширина * 0,24), высота * 0,93); текст («30см», (ширина / 2) + (ширина * 0,365), высота * 0,93); текст («40см», (ширина / 2) + (ширина * 0,45), высота * 0,93); если (расстояние <=40) {текст ("Расстояние:" + расстояние, ширина * 0,7, высота * 0,99); } translate (ширина / 2, высота-высота * 0,06); textSize (25); текст ("30", (ширина / 2) * cos (радианы (30)), (- ширина / 2) * sin (радианы (30))); текст ("60", (ширина / 2) * cos (радианы (60)), (- ширина / 2) * sin (радианы (60))); текст ("90", (ширина / 2) * cos (радианы (91)), (- ширина / 2) * sin (радианы (90))); текст ("120", (ширина / 2) * cos (радианы (123)), (- ширина / 2) * sin (радианы (118))); текст ("150", (ширина / 2) * cos (радианы (160)), (- ширина / 2) * sin (радианы (150))); popMatrix (); }