Model uçağıma kamera bağlayabilmek için dönebilen bir kamera platformuna ihtiyacım oldu.
Arduino kullanarak prototiplersem, daha sonra gerçeğini yapmak da çok kolay olur diye düşündüm, gece gece can sıkıntısının da etkisi ile, ortaya aşağıdaki arduino kodu çıktı.
Daha sonra, madem üzerine webcam bağladım, webden de kontrol edebileyim ben bunu derken, yazdığım kısa python programı ile web sayfası üzerinden kontrol edebileceğim servo motor ile hareket edebilen webcam platformu yapmış oldum.
Çalışmasına ilişkin resimler ve videoları da zamanım olursa bu gün buraya eklemeyi düşünüyorum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <Servo.h> Servo servo; static int i =0; void setup() { servo.attach(9); servo.write(90); Serial.begin(9600); } void loop() { if ( Serial.available()) { char ch = Serial.read(); switch(ch) { case '0'...'9': i = i * 10 + ch - '0'; break; case 's': servo.write(i); i = 0; break; case 'd': servo.write(90); i = 0; break; } } } |
python kodu ise aşağıdaki gibi. Kameradan resim alabilmek icin OpenCV kütüphanesini kullandım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | ''' Created on Jan 21, 2010 @author: koray ''' from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import opencv from opencv import highgui import serial global camera camera=highgui.cvCreateCameraCapture(0) class HTTPHandler(BaseHTTPRequestHandler): def get_image(self): opencvimage = highgui.cvQueryFrame(camera) image=opencv.adaptors.Ipl2PIL(opencvimage) return image def do_POST(self): length = int(self.headers.getheader('content-length')) qstring = self.rfile.read(length) try: degree = int(qstring.split('=')[1]) if (degree>14 and degree<181): print (degree) ser = serial.Serial('/dev/ttyUSB0',9600) ser.open() ser.write(str(degree)+"s") ser.close() self.send_response(301) self.send_header("Location", "html") self.end_headers() except: self.wfile.write("Adam gibi bir sayi girin"); def do_GET(self): if self.path.endswith("jpg"): image = self.get_image() image.save("/tmp/test.jpg") self.send_response(200) self.send_header("Content-Type", "image/jpg") self.end_headers() f=open("/tmp/test.jpg") self.wfile.write(f.read()) f.close() if self.path.find("html")>0: self.send_response(200) self.send_header("Content-Type", "text/html") self.end_headers() self.wfile.write("<html><head><title>KorayCam</title></head><body>") self.wfile.write('<div align="center"><h1>Arduino + Servo + Python</h1>'); self.wfile.write('<img src="test.jpg">') self.wfile.write('<form action="html" method="POST"><input type="text" id="val" name="val"><input type="Submit" value="Ayarla"></form>') self.wfile.write("</div></body></html>") def main(): try: server = HTTPServer (('',8080),HTTPHandler) server.serve_forever() except KeyboardInterrupt: server.socket.close(); if __name__ == '__main__': main() |